ПИсал такую програмулину. Чуствительно к кондерам и резистору. Тут для двух сенсоров.
list p=16f84
#include ‹p16f84.inc›
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
sb0 equ 1
sb1 equ 2
sb0_set equ b'11111011'
sb1_set equ b'11111101'
init_a equ b'11111100'
init_b equ b'11111001'
sensflag equ 0x0C ;0,1 ,бит - какой сенсор, 8 бит - нужно ли опрашивать сенсоры
led0 equ 0
led1 equ 1
s_del_hi equ 0x0D ;задержка для фиксации срабатывания сенсора, старший байт
s_del_lo equ 0x0E ;задержка для фиксации срабатывания сенсора, младший байт
initdelhi equ .160 ;старшое значение задержки
initdello equ .255 ;младшее значение задержки
org 0x100
clrf PORTA
clrf PORTB
bsf STATUS, RP0
movlw init_a
movwf PORTA
movlw init_b
movwf PORTB
bcf STATUS, RP0
clrf s_del_hi
clrf s_del_lo
bsf sensflag, 7
movlw initdello
movwf s_del_lo
main:
call need_read
btfss sensflag, 0
goto sb0_untouch
bsf PORTA, led0
goto check_sb1
sb0_untouch:
bcf PORTA, led0
check_sb1:
btfss sensflag, 1
goto sb1_untouch
bsf PORTA, led1
goto main
sb1_untouch:
bcf PORTA, led1
goto main
need_read:
btfss sensflag, 7 ;если нужно читать сенсор, вызываем процедуру
goto go_on ;и возвращаемся
call read_sensors
movlw initdelhi ;инициализируем переменные задержки
movwf s_del_hi
return
go_on: decfsz s_del_lo, f
return
decfsz s_del_hi, f
goto A1
movlw initdelhi
movwf s_del_hi
bsf sensflag, 7
return
A1: movlw initdello
movwf s_del_lo
return
read_sensors:
clrf sensflag
bsf STATUS, RP0
movlw sb0_set
movwf PORTB
bcf STATUS, RP0
bsf PORTB, sb1
btfss PORTB, sb0
bsf sensflag, 0 ;конец проверки первого сенсора
bsf STATUS, RP0 ;начало разрядки конденсатора
movlw init_b
movwf PORTB
bcf STATUS, RP0
bcf PORTB, sb0
bcf PORTB, sb1 ;конец разрядки
bsf STATUS, RP0 ;проверка второго сенсора
movlw sb1_set
movwf PORTB
bcf STATUS, RP0
bsf PORTB, sb0
btfss PORTB, sb1
bsf sensflag, 1 ;конец проверки второго сенсора
bsf STATUS, RP0 ;разрядка конденсатора
movlw init_b
movwf PORTB
bcf STATUS, RP0
bcf PORTB, sb1
bcf PORTB, sb0
btfsc sensflag, 0
goto senspress
bsf sensflag, 7
return
btfsc sensflag, 1
goto senspress
bsf sensflag, 7
return
senspress:
bcf sensflag, 7
return
end
|