|
Программирование на ассемблере для МК ATmega128, Требуется консультация |
|
|
|
Dec 5 2007, 10:27
|
Группа: Новичок
Сообщений: 5
Регистрация: 5-12-07
Пользователь №: 32 990

|
Пишу программу для обмена информацией между МК и компьютером по интерфейсу RS-232. Прием информации МК выполнен по прерыванию "прием завершен". Для чтения содержимого буфера используется команда lds r16,UDR1 (поскольку регистр UDR1 расположен в адресном пространстве дополнительных регистров ввода-вывода, работать с ним с помощью команд in, out евозможно). При тестировании программы в отладчике после записи данных в регистр UDR1 и выполнении вышеуказанной команды, в регистр r16 записывается 0. Скажите пожалуйста, почему это происходит и как нужно пересылать данные из UDR1, чтобы они правильно записывались в нужный регистр.
|
|
|
|
|
 |
Ответов
(1 - 10)
|
Dec 5 2007, 11:14
|
Группа: Новичок
Сообщений: 5
Регистрация: 5-12-07
Пользователь №: 32 990

|
Цитата(Палыч @ Dec 5 2007, 13:41)  ИМХО, fuse M103C остался запрограммирован Тогда, подскажите, где в отладчике AVR Studio 4 можно сбросить этот бит. Насколько мне известно Fuse Bit программируются при прошивке микроконтроллера. При создании проекта и в самом начале программы выбрано .device ATmega128.
|
|
|
|
|
Dec 5 2007, 12:21
|

Местный
  
Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836

|
Странно, действительно не читается.. вот простой код-тест Код .device ATmega128 .INCLUDE "m128def.inc" .cseg .org 0x0000 ldi r16,5 sts UDR1,r16 clr r16 lds r16,UDR1 nop nop Делаю останов, записываю регистр в ручную, всеравно... ноль. Очень странно. Раньше с таким не сталкивался..?!
--------------------
Умный программист пишет тупым кодом гениальные вещи, а не наоборот...
|
|
|
|
|
Dec 5 2007, 13:05
|
Группа: Новичок
Сообщений: 5
Регистрация: 5-12-07
Пользователь №: 32 990

|
Цитата(Палыч @ Dec 5 2007, 15:11)  Так Вы прогоняете программу в симуляторе AVRStudio?
Справа в Workspace->I/O разверните USART1 и измените UDR1 непосредственно перед выполнением команды
lds r16,UDR1
Т.е. ставите на эту команду останов (breakpoint), когда симулятор дошагает до этой команды и остановится - меняете UDR1 и продолжаете выполнение программы (Run или Step).
C этими UDR при отладке - всегда путаница и косяки из-за того, что два регистра (на вывод и на ввод) имеею один адрес и имя. Вообще-то я так уже много раз делал и получал описанный выше результат.
|
|
|
|
|
Dec 5 2007, 13:23
|

Местный
  
Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836

|
А из нулевого регистра данных все нормально читается (также записываю ручками после останова): Код .device ATmega128 ; .INCLUDE "m128def.inc" ; .cseg .org 0x0000 ldi r16,5 out UDR0,r16 clr r16 in r16,UDR0//перед выполнением в симуляторе записываю значение в UDR0 nop странно?!
--------------------
Умный программист пишет тупым кодом гениальные вещи, а не наоборот...
|
|
|
|
|
Dec 5 2007, 13:41
|

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

|
Цитата(adc @ Dec 5 2007, 16:23)  А из нулевого регистра данных все нормально читается (также записываю ручками после останова) странно?! Да, действительно: для UDR0 - работает, а для UDR1 - нет. Ну, чтож... Еще один баг симулятора AVRStudio... Это лишнее подтверждение того, что отлаживаться лучше всего - в железе Кстати, если открыть окно Memory->Extended I/O, то по адресу 9С будет глухой ноль. При попытке туда, что-либо занести - получаем изменение UDR1 в окне Workspace->I/O, но в Memory->Extended I/O остается ноль...
|
|
|
|
|
Dec 5 2007, 14:44
|

Местный
  
Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836

|
Цитата(Палыч @ Dec 5 2007, 16:41)  Кстати, если открыть окно Memory->Extended I/O, то по адресу 9С будет глухой ноль. При попытке туда, что-либо занести - получаем изменение UDR1 в окне Workspace->I/O, но в Memory->Extended I/O остается ноль... Пробовал. Меняется и там и там. При записи в Workspace->I/O, меняется в Memory->Extended I/O и на оборот. (Вер:AVRStudio 4.13 SP1 Build 557)
--------------------
Умный программист пишет тупым кодом гениальные вещи, а не наоборот...
|
|
|
|
|
Dec 6 2007, 05:21
|
Группа: Новичок
Сообщений: 5
Регистрация: 5-12-07
Пользователь №: 32 990

|
Палыч и adc, спасибо за помощь! Буду считать, что это дефект отладчика и в железе программа не работает по другим причинам.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|