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

Глава 9. Программирование таймеров . def temp = rl б ; рабочая переменная . def cRazr = r 1 7 ; счетчик разрядов ; в начале программы N_mas k : ; маски семисегментных цифр . с!Ь оьо о 1 1 1 1 1 1 , оьо о о о 1 1 0 , оьо1 0 1 1 0 1 1 , оьо 1 0 0 1 1 1 1 , оьо 1 1 0 0 1 1 0 , оьо 1 1 0 1 1 0 1 , оьо 1 1 1 1 1 0 1 , оьо о о о о 1 1 1 , оьо 1 1 1 1 1 1 1 , оьо 1 1 0 1 1 1 1 253 Не забудем предварительно обнулить счетчик разрядов, разрешить прерывание пе­ реполнения ТimerO с коэффициентом 1 : 64 (не забудьте, что у ATmega8535 таблица прерываний отличается от ATmega8) и установить разряды PDO-PDЗ , а также все разряды порта В на выход. Листинг 9 . 1 3 иллюстрирует прерывание переполнения ТimerO : TIMO_OVF : ; динамическая индикация inc cRazr ; счетчик разрядов cpi cRaz r , 4 ; всего 4 разряда brne Set razr c l r cRazr ; если равен 4 , очищаем Set razr : ldi УН, 1 ; старший разряд адреса SRAМ = 1 mov YL, cRazr+DdН ; установка тек . адреса ld temp , Y ; в temp - значение дес . цифры ldi ZH, HIGH (N_mask* 2 ) ; адрес констант в памяти - в Z ldi ZL , LOW ( N_mask* 2 ) add ZL , temp ; адрес маски цифры, равной temp adc ZH, O ; на всякий случай учитываем перенос lpm ; в rO - маска out PortC , rO ; установили сегменты ; установка разряда биты РВО-РВЗ cpi cRaz r , 0 brne Setl sbr temp , 1 ; устанавливаем разряд РВО out PortB , temp reti ; выход Setl : cpi cRaz r , 1 brne Set2 sbr temp , 2 ; устанавливаем разряд PBl out PortB , temp reti ; выход Set2 : cpi cRaz r , 2 brne SetЗ sbr temp , 4 ; устанавливаем разряд РВ2

RkJQdWJsaXNoZXIy MTExODQxMg==