Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
326 Микроконтроллеры AVR от азов программирования... кодовых комбинаций. Для проверки состояния переключателя оценива ется значение седьмого разряда порта РВ. Если контакты переключателя разомкнуты (PINB.7 равен единице), то управление передается по метке comp (к процедуре сравнения кодов). В противном случае выполняется процедура записи. Процедура записи кода в EEPROM занимает строки 60 — 62. В строке 60 длина кодовой комбинации записывается в переменную klen. Так как при описании переменной klen (см. строку 9) ее местом располо жения выбран EEPROM, то записанное в переменную значение автома тически туда и попадает. Язык СИ сам выполняет все необходимые для этого процедуры. Как видите, в языке СИ запись в EEPROM происходит гораздо проще, чем на Ассемблере. В строке 61 находится цикл, который производит запись в EEPROM самой кодовой комбинации. Цикл просто по очереди записывает каждый элемент массива buf г в соответствующий элемент массива buf е. A buf е целиком находится в EEROM. В качестве параметра цикла используется переменная i. По ходу работы цикла значение этой переменной меняется от нуля до ii. То есть перебираются номера всех элементов кодовой комбинации (ii равно ее длине). Тело цикла составляет всего одно выражение. Это выражение запи сывает значение очередного элемента буфера buf г в буфер buf е. Причем в качестве указателя для обоих массивов используется одна и та же переменная. Поэтому в буфере buf е элементы попадают в те же позиции, какие они занимали в буфере buf г. По окончании цикла записи управление переходит к строке 62. В этой строке находится оператор без условного перехода, который передает управление по метке zamok. То есть к процедуре открывания замка. Щелчок механизма замка оповещает об окончании процесса записи. Процедура проверки занимает строки 63,64. Напомним, что к началу этой процедуры переменная i i содержит длину только что введенной кодовой комбинации, а буфер buf г — саму эту комбинацию. Сначала, в строке 63, сравнивается значение переменной klen (длина, записанная ранее в EEPROM) и значение переменной ii. Язык СИ сам извлекает зна чение klen из EEPROM, используя все необходимые процедуры. Если в результате проверки эти две длины окажутся не равными, то управление передается по метке ml. То есть к началу всей программы. Дальнейшее сравнение кодов не производится, и замок не открывается. Если оба значения одинаковы, то программа переходит к сравнению кодо вых комбинаций. Цикл, производящий это сравнение, находится в строке 64. Этот цикл в качестве параметра тоже использует переменную i. В процессе работы цикла значение этой переменной также меняется от нуля до ii. В теле цикла выполняется оператор сравнения i f . Этот опера тор сравнивает значения элементов двух массивов, один из которых (buf г)
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==