Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
Глава б. Основы программирования МКАVR 155 витьс я : прицелиться пальцем (или курсором) и выбрать свободный ход кнопки, чтобы четко зафиксировать нажатие в определенный момент времени . В то же время отпус кание никакой специальной подготовки не требует - просто расслабьтесь, и палец сам соскользнет с кнопки. Потому всегда, когда требуется зафиксировать определен ный момент времени , кнопка должна реагировать на отпускание (срав н ите с подготов кой гранаты-«лимонки» к бою, когда сначала вынимается кольцо, а граната срабаты вает лишь после того , как вы ее выпустите из рук, освободив рычаг чеки) . Иной случай представляет собой , например, компьютерная клавиатура , где задача стоит не зафик сировать момент времени , а обеспечить как можно больше нажатий в единицу време ни , - там кнопки реагируют именно на нажатие (но и работу с клавиатурой приходит ся специально осваивать) . Также именно на нажатие следует реагировать в случае однократного действия , когда момент отпускания бе з различен , а дребезг не оказывает никакого влияния, - примером может служить кнопка «Пуск» с блокировкой на пульте управления каким-нибудь станком. ; Программ а счета отпусканий кнопки в двоичном коде . device AТmegaB . include "m8de f . inc " ; частота по умолчанию 1 МГц .macro Delay ; процедура задержки ldi Razrl , @ 0 ; старший байт задержки ldi RаzrО , @ l ;младший байт задержки R suЬ : suЬi Raz r0 , 1 sbci Razrl , O brcc R suЬ . endm . def temp = r l б ; рабочая переменная . def RazrO = r17 ; разряды задержки . def Razrl = r 1 8 . def Counter = r 2 0 ; счетчик . org О ; необязательно , просто для ориентировки ; ============ Программ а ============ ldi temp , ObO O O O O l O O ; для второго разряда порта D out PORTD , temp ; подтягивающий резистор на всякий случай ldi temp, OЫl l l l l l l ; порт С все контакты на выход out DDRC , teпtp clr Counter ; очищаем счетчик Pincykle : ; цикл отслеживания кнопки sЬis PinD, 2 ; пропустить , если нажата rjmp Pincykle ; вернуть ся обратно , если не нажата ; кнопка нажата - пауза push_pin : ; кнопка нажата Delay 0 , $ 1 9 ; задержка 1 0 0 мкс с, N = $ 0 0 1 9 sЬic PinD , 2 ; пропустить , если по-прежнему нажата
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==