Обучение : Программирование на Ассемблере для PIC


Пример 4. Отслеживание нажатия кнопки

Рассмотрим следующую программу, которая по нажатии кнопки будет включать индикатор, а после того как кнопка будет отпущена индикатор будет выключен.
 

            LIST        P=PIC16F84A
            __CONFIG    H3FF1

STATUS      EQU         H0003
TRISA       EQU         H0005
PORTA       EQU         H0005
TRISB       EQU         H0006
PORTB       EQU         H0006

            org         0           ; начало программы            
; подготовительные моменты
            bsf         STATUS,5    ; переход в Банк 1
            movlw       b00011111
            movwf       TRISA
            clrf        TRISB
            bcf         STATUS,5    ; переход назад в Банк 0
            clrf        PORTB       ; очистка порта
; отслеживание нажатия кнопки
m1          btfsc       PORTA,2     ; бит-проверка ножки RA2
            goto        m1
            movlw       .255
            movwf       PORTB
            clrf        PORTB
            goto        m1

            end                     ; конец программы

Далее текст прошивки:

:020000040000FA
:1000000083161F3085008601831286010519062894
:08001000FF308600860106287E
:02400E00F13F80
:00000001FF


На нашем макете имеется три кнопки. Физически они подключены к линиям RA2, RA3, RA4, которые  внешними подтягивающими резисторами соединены с плюсом питания (о подтягивающих резисторах см. "Теория и практика работы портов"). В нашей программе мы решили отслеживать кнопку на линии RA3.

В шапке программы появились описании регистров касающихся работы ножек порта А, а именно TRISA и PORTA.

В разделе подготовительных моментов мы указали для порта А работу всех ножек на вход (а их у нас 5 штук), записав число b00011111. Старшие три бита для регистров TRISA и PORTA не являются значащими и, следовательно, с таким же успехом можно записать число b11111111. Строго говоря, в данном примере в регистрах TRISA и PORTA нас интересует только второй бит, касающийся работы ножки RA2 и, следовательно, для определения направления работы ножки можно было бы использовать всего лишь одну команду bsf TRISA,2 .

Перед началом отслеживания кнопки мы очистили порт B и тем самым погасили все сегменты индикатора.

Нажатие кнопки мы отслеживаем с помощью команды btfsc PORTA,2 , которую мы называем командой бит-проверки. Если кнопка не нажата, то на RA2 присутствует высокий уровень сигнала за счет подтягивающего резистора и, соответственно этот факт приводит к выполнению следующей команды – переход по метке m1. В этом месте программа зацикливается до тех пор, пока не будет сделано нажатие на кнопку. После нажатия кнопки на RA2 устанавливается низкий уровень сигнала, что приводит к изменению хода программы, а именно к пропуску команды перехода по метке m1. Далее записывается число в порт, производится включение сегментов индикатора на 1 мкс. Затем порт очищается, индикатор выключается. Затем производится зацикливание.

Таким образом, пока нажата кнопка индикатор периодически включается и выключается. За счет высокой скорости работы МК (1 млн. операций в секунду) у нас создается впечатление что индикатор светится, а не мигает. Необходимо отметить, что индикатор светится не на полную яркость и объяснение этому простое – в выключенном состоянии он находится гораздо большее время. Звуковой излучатель на моей макетной плате вообще не подает признаков жизни.

Пример рассматриваемой программы специально упрощен, для того, чтобы вам было проще понять механизм работы. Такой подход пригоден для учебных целей, но на практике следует делать иначе.

Рассмотрим модифицированный фрагмент

 

; отслеживание нажатия кнопки
m1          clrf        PORTB
m2          btfsc       PORTA,2     ; бит-проверка ножки RA2
            goto        m1
            movlw       .255
            movwf       PORTB
            goto        m2

 

Сначала выполняется очистка порта B. Затем выполняется бит проверка: если кнопка не нажата – переход по метке m1 для очистки порта и дальнейшее зацикливание. Если кнопка нажата – пропускается переход по метке m1 и выполняется запись числа в порт B. Затем осуществляется переход на очередную бит-проверку и дальнейшее зацикливание.

Как видим, процедуры записи в порт и очистки порта у нас разнесены и не накладываются друг на друга, что приводит к полноценной работе ножек порта.


<<< назад далее >>>

Просмотров: 41035

 








 
 
 

В русском Интернете бестолку защищать свои права. Хотите использовать материалы - используйте,
но с письменного согласия авторов. В противном случае будут высланы соответствующие письма
в поисковые системы об ограничении индексации ваших сайтов. Не доводите до греха.