Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

Глава 13. Интерфейс ТW/ (12С) и его применение ЕХТ INTO : ; каждую секунду rcall reti ReadSek ; чтение секунд ReadSek : ; чтение значений секунд sbis PinD , pSDA ; линия занята rjтp stopW ldi YL , ОЫ1 0 1 0 0 0 0 ; адрес device DS 1307 ldi УН , 0 ; адрес регистра секунд = О rcall read_i2c ; секунды - в tетр rcall out сот ; отсылаем brcs stopW ; если флаг nереноса С =1 - ошибка ret stopW : ldi tетр , $ЕЕ ; отсылаем $ЕЕ - ошибка rcal l out сот ret RESET : ldi out ldi out ; === UART ldi out ldi out ; === INTO ldi out ldi tетр , low ( RAМEND ) S PL , teтp teтp , high ( RAМEND ) SPH , teтp temp, 2 5 ; 9 6 00 ; указатель стека UBRRL , teтp ; скор . передачи tетр , ( l<<RXEN l l<<TXEN ) UCSRВ , teтp ; разреш . приема /передачи 8 битов temp, ( l<<ISCO l ) ; прер . INTO по спаду MCUCR , teтp temp, l<<INTO ; paзp . INTO out GICR, teтp sei ; разрешили прерывания rcall ReadSek ; чтение секунд - один раз Gcykle : rjтp Gcykle 353 Текст этой программы можно найти в архиве по адресу, указанному во введении (файл rtc1 307_test_sek . asm ) . При компиляции вы получите предупреждение (waming) о том, что регистр r l б у нас определяется дважды : как tетр в начале текста про­ граммы и затем как DATA в файле i2c. prg . Все правильно - это сделано специально для улучшения читаемости программы. Такое двойное определение позволит нам не править текст отлаженных процедур или не привлекать еще один регистр для временного использования в основной программе с лишней операцией обмена дан­ ными при отправке через порт. От такого предупреждения можно избавиться с по­ мощью директивы unde f (позволяющей отменить ранее сделанное определение), но в нашем случае это только запутает программу.

RkJQdWJsaXNoZXIy MTExODQxMg==