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

 
 
> Mega1281. Адресация памяти.
adc
сообщение Jun 8 2008, 06:10
Сообщение #1


Местный
***

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



Ув. форумчане прошу помочь с вопросом: Почему в даташите на M1281 инициализация вачдоктаймера выглядит так:
Код
WDT_off:
; Turn off global interrupt
cli
; Reset Watchdog Timer
wdr
; Clear WDRF in MCUSR
in r16, MCUSR
andi r16, (0xff & (0<<WDRF))
out MCUSR, r16
; Write logical one to WDCE and WDE
; Keep old prescaler setting to prevent unintentional time-out
in r16, WDTCSR
ori r16, (1<<WDCE) | (1<<WDE)
out WDTCSR, r16
; Turn off WDT
ldi r16, (0<<WDE)
out WDTCSR, r16
; Turn on global interrupt
sei
ret

А студия ругается на операнды в команде "out"?
Код
(614): error: Operand 1 out of range: 0x60


--------------------
Умный программист пишет тупым кодом гениальные вещи, а не наоборот...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Amper25
сообщение Jun 8 2008, 08:41
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 215
Регистрация: 10-04-07
Пользователь №: 26 929



ldi r16, (0<<WDE)

Какое то бредовое применение. Означает сдвинуть 0 на бит под номером WDE и записать это все в R16.
Такой вид судя по всему сделан для сохранения общего стиля.
Если ldi r16,(1<<WDE) означает поставить 1 в бит WDE, то
ldi r16, (0<<WDE) - поставить 0.

Хотя можно просто написать ldi r16,0
Но тогда не совсем понятно будет что именно обнуляем.
Go to the top of the page
 
+Quote Post



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

 


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


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