реклама на сайте
подробности

 
 
> C8051F321 и Keil
serenya
сообщение Oct 31 2009, 20:18
Сообщение #1





Группа: Участник
Сообщений: 7
Регистрация: 31-10-09
Пользователь №: 53 339



Здравствуйте, имею проект на ASMe для C8051F321, раньше писал его в IDE от Silabs, но из-за ограничения кода перешел на Keil. Пока не было кейла написал 2 куска программы и отладил их отдельно, все работало. Вчера собрал все в одну кучу, с трудом скампилировал,

Program Size: data=179.0 xdata=0 const=0 code=2729
"DAC" - 0 Error(s), 0 Warning(s).

но результат разочаровал. а именно: в проекте имеется LCD 20*2, рабочая подпрограмма работы с ним многократно проверенная (автор Конышев Ю.А.). В ней имеются массивы данных, обращение к ним через DPTR:

LCD_StringLeft:
push ACC
mov A,#lcdAddrLeftStr

lcall LCD_AddrDDRAM

push 00h
mov R0,#lcdLimitStr

clr A
movc A,@A+DPTR
cjne A,#eos,$+5
SJMP $+7

lcall LCD_WriteCData
inc DPTR
djnz R0,$-10

pop 00h
pop ACC
ret

Подпрограмма выводит строку:

lcd_str4: db 'ERROR!!! делаю сброс'

Команда

movc A,@A+DPTR

первый раз получает правильный байт из массива, все последующие байты берутся из области вне массива и имеют значение FF.

Кто знает подскажите как это забороть, сам я не знаю даже в каком направлении копать.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Kolia
сообщение Oct 31 2009, 21:20
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 188
Регистрация: 28-09-06
Из: Minsk
Пользователь №: 20 762



Меня вот это смущает SJMP $+7
Go to the top of the page
 
+Quote Post
Палыч
сообщение Nov 1 2009, 13:04
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Kolia @ Nov 1 2009, 00:20) *
Меня вот это смущает SJMP $ + 7
А меня ещё и вот это: cjne A,#eos,$+5
Вопрос: как программа попадет на lcall LCD_WriteCData ? Ответ: никак...
По существу вопроса о неправильных данных возвращаемых командой movc A,@A+DPTR
Очевидно, что возможны три причины:
1. разрушение содержимого DPTR - вероятнее всего
2. ненулевое значение аккумулятора
3. разрушение области хранения строки вывода (массива) - крайне маловероятно.
Keil имеет симулятор. Что Вам стоит посмотреть какая из этих причин приводит к такому результату?
Go to the top of the page
 
+Quote Post
serenya
сообщение Nov 2 2009, 06:28
Сообщение #4





Группа: Участник
Сообщений: 7
Регистрация: 31-10-09
Пользователь №: 53 339



Спасибо всем за ответы.
Цитата(Kolia @ Nov 1 2009, 00:20) *
Меня вот это смущает SJMP $+7

Вечером дома проверю куда перепрыгивает, но раньше все работало без проблем.

Цитата(тау @ Nov 1 2009, 00:43) *
LCD_WriteCData эта подпрограмма меняет DPTR ?
может она его не восстанавливает перед выходом?

Эта подпрограмма перекодирует коды ASCII в коды LCD. Просто из массива берет по определенному адресу значение и отправляет в LCD, DPTR смотрел, просто инкрементируется и перед командой movc A,@A+DPTR там нужное значение, в памяти смотрел данный массив, там то что надо.

Цитата(Палыч @ Nov 1 2009, 16:04) *
А меня ещё и вот это: cjne A,#eos,$+5
Вопрос: как программа попадет на lcall LCD_WriteCData ? Ответ: никак...

Повторюсь, раньше все работало, и я никаких изменений относительно переходов не делал, и на команду lcall LCD_WriteCData попадает, и данные выводятся на LCD.

Цитата(Палыч @ Nov 1 2009, 16:04) *
2. ненулевое значение аккумулятора

Вечером проверю куда ведет djnz R0,$-10

Сообщение отредактировал serenya - Nov 2 2009, 06:29
Go to the top of the page
 
+Quote Post
Палыч
сообщение Nov 2 2009, 06:51
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(serenya @ Nov 2 2009, 09:28) *
Повторюсь, раньше все работало, и я никаких изменений относительно переходов не делал, и на команду lcall LCD_WriteCData попадает, и данные выводятся на LCD.
Любопытно было бы посмотреть откуда (с какой команды) МК попадает на lcall LCD_WriteCData ...
Совет: замените все относительные переходы (типа "$ + 7"), на "нормальные": в нужных местах поставьте метки и переходы на эти метки.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 22:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01407 секунд с 7
ELECTRONIX ©2004-2016