Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
Шаг 5. Переходим непосредственно к разработке устройств и программ 337 Начало основной программы main Инициализация таймера 61 ldi temp, high(kzad ) 62 out 0CR1AH, temp 63 ldi temp, low(kzad ) 64 out 0CR1AL, temp 65 ldi temp, 0x03 66 out TCCR1B, temp 67 ldi codL,0x7F 68 ldi codH, 0x07 69 тО' rcall incod 70 brne mO 71 т1 . in temp,PINB 72 sbrs temp, 6 73 rjmp kk1 74 rcall incod 75 breq ml 76 m2: ldi ZH, high(bufr) 77 ldi ZL, low(bufr) 78 clr count ; Записываем коэффициент задержки ; Выбор режима работы таймера ; Код для сравнения (младший байт) ; Код для сравнения (старший байт) ; Ввод и проверка кода клавиш ; Если хоть одна не нажата, продолжаем ; Проверка кнопки звонка ; Если нажата, переходим к звуковой части ; Ввод и проверка кода клавиш ; Если не одна не нажата, продолжаем ; Установка указателя на начало буфера ; Сброс счетчика байт Цикл ввода кода 79 m3. cli ; Запрет всех прерываний 80 ldi data, 1 ; Вызываем задержку первого типа 81 rcall wait ; К подпрограмме задержки 82 m5 - rcall incod ; Ввод и проверка кода кнопок 83 st Z+, XL ; Записываем его в буфер 84 st Z+,XH 85 inc count , Увеличение счетчика байтов 86 inc count 87 cpi count, bsize ; Проверяем, не конец ли буфера 88 brsh m7 ; Если конец, завершаем ввод кода 89 mov codL, XL ; Записываем код как старый 90 mov codH, XH 91 ldi data, 2 ; Вызываем задержку третьего типа 92 rcall wait ; К подпрограмме задержки 93 тб 1 rcall incod ; Ввод и проверка кода кнопок 94 brne m3 ; Если изменилось, записываем в буфер 95 cpi flz, 1 ; Проверка окончания фазы ввода кода 96 brne m6 97 m7 sbic PINB, 7 ; Проверка состояния тумблера 98 rjmp m9 ; К процедуре проверки кода ; — --------------------------- Процедура записи кода 99 mov data, count ; Помещаем длину кода в data 100 ldi addre, klen , Адрес в EEPROM для хранения длины кода 101 rcall eewr ; Записываем в длину кода EEPROM 102 ldi addre, bufe ; В регистр адреса начало буфера в EEPROM 103 ldi ZH, high(bufr) ; В регистровую пару Z записываем 104 ldi ZL, low(bufr) ; адрес начала буфера в ОЗУ 105 m8: Id data, Z+ , Читаем очередной байт из ОЗУ 106 rcall eewr ; Записываем в длину кода EEPROM 107 dec count ; Декремент счетчика байтов 108 brne m8 ; Если не конец, продолжаем запись
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==