Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств

346 Микроконтроллеры AVR от азов программирования... } 58 if (fnota==0) goto m5, // Если пауза не воспроизводим звук 59 0CR1A=tabkd[fnota ]; // Программируем частоту звука 60 TCCR1A=0x40; // Включаем звук 61 m5 delay ms (tabz[dnota])> // Формируем задержку 62 TCCR1A=0x00; // Выключаем звук 63 delay_ms (tabz[0]), // Задержка между нотами 64 nota++; И Перемещаем указатель на следующую ноту 65 goto m4, И К началу цикла 66 m2 TCCR1A=0x00, // Выключаем звук 67 if (++melod>=8) melod=0; // Увеличиваем счетчик мелодий // Основная функция 68 void main(void) { 69 unsigned char и, // Указатель массива 70 unsigned char і; // Вспомогательный указатель 71 unsigned int codS; // Старый код 72 P0RTB=0xE7, И Порт В 73 DDRB=0x18; 74 P0RTD=0x7F; // Порт D 75 DDRD=0x00; 76 TCCR1A=0x00; // Таймер/Счетчик 1 77 TCCR1B=0x03; 78 TCNT1=0; 79 0CR1A=kzad; 80 ACSR=0x80, // Аналоговый компаратор 81 melod=0; // Сбрасываем счетчик мелодий 82 оо while (1) 00 84 ml. while (incod() '= klfree); // Ожидание отпускания кнопок 85 while (incod() == klfree) // Ожидание нажатия кнопок 86 if (PINB.6== : 0) muz(); // К музыкальному звонку 87 TCCR1B=0x03, И Настройка таймера 88 n=0, // Сброс счетчика байтов 89 m2 #asm("cli ” ). // Запрещаем прерывания 90 wait(1), И Задержка 1-го типа 91 codS=incod( ), // Ввод кода и запись, как старого 92 bufr [ ii++]=codS ; И Запись очередного кода в буфер 93 if (n>=bsize) goto m4, И Проверка конца буфера 94 wait(2), И Задержка 2-го типа 95 m3. if (incod() l= codS) goto m2, И Проверка, не изменилось ли состояние 96 if (flz==0) goto m3, // Проверка флага окончания задержки 97 m4. if (PINB.7==1) goto comp, // Проверка переключателя режимов u ------- ------------ Запись кода в EEPROM 98 klen=n, // Запись длины кода 99 for (i=0, i<n , i++) bufe[i]=bufr[i]; // Запись всех байтов кода 100 goto zamok; И К процедуре открывания замка // ---------------- ------------ Проверка кода 101 comp 1 if (klen 1 =n) goto ml; // Проверка длины кода 102 for (i=0; Ku ; i++) if (bufe[i] ’ =bufr[i]) goto ml; // Проверка кода u ------- ------------ Открывание замка 103 zamok PORTB 4=1, // Открываем замок 104 wait(3), // Задержка 3-го типа 105 PORTB. 4=0, // Закрываем замок } 1

RkJQdWJsaXNoZXIy MTExODQxMg==