Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
382 Часть 111. Практическое программирование микроконтроллеров AVR inc count ; увеличиваем счетчик к следующему разу rcall out_com ; посЫJiаем во внешний мир счетчик Delay2 0 $ 0 3 , $ 00 , 4 0 ; задержка 0 , 2 5 с при 1 МГц cbi PortB , 0 ; гасим светодиод reti ; конец прерывания PCINT Reset : ldi temp , low (RAМEND ) ; устанавливаем указатель на стек out S PL , temp ; для tiny2 3 1 3 только S PL ldi temp , ObO O O O O O O l ; порт В контакт РВО на выход out DDRВ , temp ; === UART ldi temp , 2 5 ; 9 600 при 4 МГЦ + U2X out UBRRL , temp ; скор . передачи ldi temp , ( l <<RXEN l l<<TXEN ) out UCSRB , temp ; разреш . приема/передачи 8 битов ; ==== установка Watchdog , прерывания запрещены ! wdr ; сбрасываем WDT ldi temp , ( l<<WDCE ) 1 ( l<<WDE ) ; разрешение изменений + запуск out WDTCR, temp ldi temp , ( 1«WDIE ) 1 ( 1« WDP2 ) 1 ( 1«WDPl ) 1 ( 1«WDPO ) ; прерывание , время (WDPЗ : O = 0 1 1 1 = 2 сек) + запуск out WDTCR, temp ldi temp , ( 1<< SMl ) 1 ( l<<SE ) ; разрешение S leep, режим Power Down out MCUCR, temp clr count ; обязательно устанавливаем при сбросе sei ; разрешаем прерывания Gcykle : ; главный цикл s leep ; уходим в сон rjmp Gcykle Программа будет через каждые 2 секунды выдавать через UART последовательные состояния счетчика ( 1 , 2, 3, . . . ) . Если вы сбросите контроллер (например, выключи те и включите питание), то программа опять начнет считать с нуля. Вот здесь очень важно, что в начале программы инициализируется счетчик (коман да clr count перед разрешением прерываний) . Закомментируйте ради эксперимента команду clr count и загрузите программу заново . Можете убедиться, что теперь даже сброс не повлияет на значение count - после выключения и включения про грамма продолжит считать с того момента, на котором остановилась перед выклю чением. Еще интереснее варианты вы можете получить, если включите комбиниро ванный режим, о котором шла речь ранее (для этого нужно добавить к строке запи си в woтcR еще и ( l«WDE ) ) - в зависимости от наличия или отсутствия начальной инициализации count, программа либо будет всякий раз выдавать единицу, либо опять же считать с того значения, на котором остановилась перед выключением питания .
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==