Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
354 Часть 111. Практическое программирование микроконтроллеров АVR По этой программе контроллер один раз в начале запросит величину, хранящуюся в регистре. секунд часов (процедура ReadSek ) . После загрузки надо выключить пи тание схемы, запустить монитор порта, настроить его на нужный порт и скорость передачи, прием чисел в hех-формате (см. главу 15) и включить питание снова. Если часы идут, то в монитор порта сразу после включения вернется какое-то зна чение секунд. Если дополнительно запущено прерывание на выводе SQW с нужной скоростью, то в монитор порта будет поступать каждое новое значение секунд. Причем секунды в hех-формате будут нормально читаться, как обычное число от 00 до 59, а при попытке переключить на прием в десятичной форме - как не имею щее смысла расшифрованное ВСD-значение, т. е. после 9 ( $ 0 9) будет идти 1 6 ( $ 1 0) после 25 ($ 1 9) - 32 ( $20) и т. д. Если часы не запущены вовсе (бит сн оказался установленным в единицу), то про грамма сразу после запуска выдаст единственное значение $ЕЕ («ошибка») . В этом случае диагноз однозначный: батарейка отключалась, и часы необходимо заново инициализировать и установить в них время . Если не запущен выход SQW, то они выдадут единственное значение из регистра секунд сразу после запуска, и в этом случае может быть достаточно часы инициализировать, не устанавливая время «по полной программе» . Но, как уже говорились, при полном сбросе биты регистров часов могут принимать произвольные значения, потому не исключено, что часы будут идти и даже выдавать правильные прерывания раз в секунду, но вместо вре мени показывать ерунду. По значению выдаваемых секунд это можно легко уста новить - неустановленные часы могут выдавать даже величины секунд более 59 . Мы сейчас сосредоточимся на том, как часы инициализировать и прочесть из иду щих часов значения времени. А установкой значений текущего времени займемся в главе 15 - эта тема больше относится к тому, как правильно посылать и прини мать числа через UART, а не к собственно порту TWI . ЗАМЕТКИ НА ПОЛЯХ Конечно, никто не мешает организовать классическую процедуру установки часов по нажатию кнопок. Этот вариант был бы обязательно необходим, если бы часы не име ли резервной батарейки и их приходилось бы устанавливать при каждом сбое пита ния , - не будешь же каждый раз тащить часы к ноутбуку, включать его , запускать нужную программу и т. д. Но для часов с резервной батарейкой , которые в самом худшем случае приходится раз в полгода немного подкорректировать , в нудной про цедуре установки кнопками никакой нужды нет - проще все-таки это делать через компьютер. Сначала о том, как часы просто «завести» - запустить в работу в нужном нам ре жиме . С помощью такой программы можно проверить правильность соединений, невзирая на начальные установки, - даже если часы не показывают верное время, они будут исправно отсчитывать секунды, начиная с нуля, и мы это увидим . Для инициализации нужно дополнить программу процедурой IniCl k (листинг 1 3 .3) . IniCl k : ; завести кварц, установить выход и обнулить секунды sbis PinD , pSDA ; если линия занята - на error rjmp stopW
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==