Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: I2C: Проблема с регистром в AVR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
vargy
Не могу установить бит в TWINT в регистре TWCR, пробовал:
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
TWCR = 0b10100100;

Моделировал в AVR Studio4, платформы Proteus VSM Viewer, AVR Siulator, в самом Proteus.

Контроллеры AtMega128, 32.
Палыч
Цитата(vargy @ Sep 24 2011, 21:00) *
Не могу установить бит в TWINT в регистре TWCR

Как большенство флагов в AVR этот флаг можно прочитать или программно сбросить записью в него единицы, но не установить.
vargy
Так и оказалось, смущает только то, что в отличии от реального железа, эмуляторы этот бит не устанавливали, а также то, что в примере кода в даташите этот бит установлен программно.
AlexFTF
Цитата(vargy @ Sep 25 2011, 02:10) *
Так и оказалось, смущает только то, что в отличии от реального железа, эмуляторы этот бит не устанавливали, а также то, что в примере кода в даташите этот бит установлен программно.


Эмуляторы действительно не устанавливают флаги, по крайней мере флаги прерывания. Почему? Непонятно... Поэтому я предпочитаю делать отладку прямо в железе sm.gif
Палыч
Цитата(vargy @ Sep 24 2011, 23:10) *
в примере кода в даташите этот бит установлен программно.
C чего Вы взяли, что этот бит "установлен программно"? В примере команда
ldi r16, (1<<TWINT)|(1<<TWSTA)|(1<<TWEN)
out TWCR, r16
устанавливает биты TWSTA,TWEN и сбрасывает бит TWINT, поскольку этот бит сбрасывается записью в него единицы.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.