Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
352 Часть 111. Практическое программирование микроконтроллеров А VR или модуля из схемы или полном отключении внешнего питания ничего не должно случиться , даже если вы не станете отключать батарейку, т. к. потреблять ток выводу SQW оказывается неоткуда . А вот при переключении в энергосберегающий режим вы ход SQW продолжит работу и будет потреблять от внешнего источника через R2 в моменты нулевого состояния . При обычном номинале резистора R2 -5 кОм это не такой уж маленький ток - в среднем порядка 0,5 мА, что сильно превышает допусти мые значения для режима энергосбережения. Потому в режимах энергосбережения нужно принимать дополнительные меры (см . главу 14) . Основное неудобство обращения с часами DS 1 307 - то, что у них нет состояния «по умолчанию», и внутренние регистры при первом подключении резервной бата рейки могут иметь произвольные значения . В частности, в этих часах в одном из регистров (том же, что хранит значения секунд) предусмотрен бит сн, который может погружать часы в «спячку», - если он установлен в 1 , то не работает гене ратор, и даже невозможно определить правильность подключения . Поэтому после первого включения (если батарейка подсоединена - то только после первого) часы приходится инициализировать. Логика разработчиков проста - зачем кому-то нужны часы, которые не установлены на правильное время? Ну, а если корректиро вать показания, то нетрудно установить и эти биты . Рассмотрим сначала простейший случай - проверку состояния часов. Если они были когда-то запущены, и батарейка не отключалась, то скорее всего бит сн сбро шен, часы показывают какое-то время, но необязательно при этом запущен вывод внешнего прерывания . Вот определить все это мы и попытаемся с помощью сле дующей программы (листинг 1 3 .2) . тактовая частота 4 МГц ; I 2C PortD , выводы 13 ( SDA, PD7 ) и 12 ( SCL , РDб ) , см . i2c . prg . device AТmegaB . include "m8def . inc " . def temp = rl б ; рабочий регистр ; регистр DATA=temp определен в i2c . prg ; регистр r17 занят в i2c . prg ; =========прерывания================ rjmp RESET ; Reset Handler rjmp EXT_INTO ; IRQO Handler . org INT_VECTORS_S I ZE ; начало кода ; ======================================== . include " i2c . prg" ; процедуры i2c out_com : ; посылка байта из temp с ожид . готовности ret sbis UCSRA, UDRE ; ждем готовности буфера передатчика rjmp out сот out UDR, temp
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==