![]() | |
Главная Радио и связь
Idi tmp,15 out WDTCR,tmp main: wdr sbis PIND,code /Studio. Ha входных контактах порта D /установить ВЫСОКИЕ уровни. Если не /вставить эту команду, то при каждой новой /отладке придется вручную устанавливать /PIND в окне New 10 View. Если PIND не /установить, отладчик будет воспринимать /состояние линий порта D таким, как при /одновременном нажатии трех кнопок: /«ДВЕРЬ», «КОДОВОЕ УСТРОЙСТВО» и /«ОТПИРАНИЕ ИЗНУТРИ» /Инициализация сторожевого /таймера: при отсутствии команды /сброса (wdr) в течение 2 с /произойдет переход на прерывание /RESET /Очистка Т-флага регистра флагов /Сброс сторожевого таймера /Пропуск следующей команды, /если на линии code (PD3) /ВЫСОКИЙ уровень rcall sbis rcall sbis rcall rjmp OpenLock FIND,open OpenLock FIND,door DoorlsOpen ;Вызов подпрограммы OpenLock ;Пропуск следующей команды, ;если на линии open (PD4) ;ВЫСОКИЙ уровень /Вызов подпрограммы OpenLock /Пропуск следующей команды, /если на линии door (PD2) /ВЫСОКИЙ уровень /Вызов подпрограммы DoorlsOpen /Очитска Т-флага регистра флагов /Возврат к команде с меткой main: /Подпрограмма управления замком OpenLock; rcall rcall rcall rcall cbi PORTB,lock dSOOms dSOOms dSOOms dSOOms PORTB,lock /Установка ВЫСОКОГО уровня /на линии lock порта В /Четыре вызова подпрограммы /Задержки на 500 мс каждая Установка НИЗКОГО уровня на линии lock (РВ2) Загрузка в tmp константы 10 Вызов подпрограммы задержки на 500 мс Уменьшение содержимого tmp на 1 Если флаг Z в регистре флагов не равен 1 (содержимое tmp не стало равным нулю), перейти на метку more: Установить флаг Т в регистре флагов Возврат из подпрограммы /Подпрограмма управления сиреной и светодиодон Idi tmp,10 more: rcall d500ms dec tmp brne more set ret DoorlsOpen: brts NoClose sbi PORTB,hi Idi Idi XL,low(500) XH,high(500) NewPls:wdr sbi PORTB,alarm rcall d05ms cbi PORTB,alarm Если в регистре флагов флаг т установлен, то перейти на метку NoClose: Установить ВЫСОКИЙ уровень на линии hi (РВО) Загрузить в пару регистров XHiXL константу 500 (в XL загрузить младший байт числа 500, в ХН - старший байт числа 500) Сбросить сторожевой таймер Установка ВЫСОКОГО уровня на линии alarm (РВ1) Вызов подпрограммы задержки на 0.5 мс Установка НИЗКОГО уровня rcall d05ms sbiw XL,1 brne NewPls rcall dSOOms rjmp NoClose: sbis Г]Шр DoorlsOpen PIND,door NoClose /Подпрограмма задержки на 0.5 мс ;на линии alarm (PBl) /Вызов подпрограммы /задержки на 0.5 мс /Вычитание единицы из /двухбайтного слова, /хранящегося в регистрах XH:XL /Если флаг Z регистра флагов не равен /нулю (содержимое XHrXL /не равно нулю), перейти /на метку NewPls: /Вызов подпрограммы задержки /на 0.5 мс /Возврат на метку DoorlsOpen /Пропустить следующую команду, /если на линии door (PD2) /ВЫСОКИЙ уровень /Переход на метку NoClose /Возврат из подпрограммы d05ms: wdr Idi Idi d05 l: sbiw YL,low(497) YH,high(497) YL,1 brne d05 l /Подпрограмма задержки на 500 мс d500ms:ldi XL,low(1000) Idi XH,high(1000) d500 l:rcall d05ms sbiw XL,1 brne d500 l /Сброс Сторожевого таймера /Загрузка в YH:YL константы 497 /Вычитание из содержимого YH:YL /единицы /Если флаг ZoO (результат /выполнения предыдущей команды /не равен нулю), перейти /на метку d05 l: /Возврат из подпрограммы /Загрузка в XHrXL /константы 1000 /Вызов подпрограммы задержки /на 0.5 мс /Вычитание единицы /из содержимого XHrXL /Если результат не равен нулю, /перейти на метку d500 l: /Возврат из подпрограммы Рассмотрим набранную программу Программа начинается с директивы .include «имя файла», которую AVR Studio воспринимает так, как если бы вместо нее было вставлено содержимое файла. После начала отладки появится возможность просмотреть содержимое этого файла. 0 1 2 3 [ 4 ] 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 0.0053 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||