Не могу установить бит в TWINT в регистре TWCR, пробовал: TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); TWCR = 0b10100100;
Моделировал в AVR Studio4, платформы Proteus VSM Viewer, AVR Siulator, в самом Proteus.
Контроллеры AtMega128, 32.
Палыч
Sep 24 2011, 17:58
Цитата(vargy @ Sep 24 2011, 21:00)
Не могу установить бит в TWINT в регистре TWCR
Как большенство флагов в AVR этот флаг можно прочитать или программно сбросить записью в него единицы, но не установить.
vargy
Sep 24 2011, 19:10
Так и оказалось, смущает только то, что в отличии от реального железа, эмуляторы этот бит не устанавливали, а также то, что в примере кода в даташите этот бит установлен программно.
AlexFTF
Sep 25 2011, 03:36
Цитата(vargy @ Sep 25 2011, 02:10)
Так и оказалось, смущает только то, что в отличии от реального железа, эмуляторы этот бит не устанавливали, а также то, что в примере кода в даташите этот бит установлен программно.
Эмуляторы действительно не устанавливают флаги, по крайней мере флаги прерывания. Почему? Непонятно... Поэтому я предпочитаю делать отладку прямо в железе
Палыч
Sep 25 2011, 08:46
Цитата(vargy @ Sep 24 2011, 23:10)
в примере кода в даташите этот бит установлен программно.
C чего Вы взяли, что этот бит "установлен программно"? В примере команда ldi r16, (1<<TWINT)|(1<<TWSTA)|(1<<TWEN) out TWCR, r16 устанавливает биты TWSTA,TWEN и сбрасывает бит TWINT, поскольку этот бит сбрасывается записью в него единицы.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.