pIC16f876a红外ERROR程序
include <p16f876a.inc>
status equ 03h
rp0 equ 05h
z equ 02h
c equ 00h
pcl equ 02h
porta equ 05h
trISA equ 85h
portc equ 07h
trisc equ 87h
portb equ 06h
trisb equ 86h
;--------tmr0--------------
tmr0 equ 01h ; 4Mt=256(256-tmr0b)=50ms
option_reg equ 81h
iNTCon equ 0bh
t0if equ 02h
wtemp equ 19h
;-----------------------
ADDR EQU 20H ;写入地址寄存器
NUM EQU 21H ;写入值
REC EQU 22H ;读计数
WRC EQU 24H ;写计数
rec1 EQU 25H
count EQU 26H
;-------------------------
count1 EQU 27H
count2 EQU 28H
flag equ 30h
flag1 equ 31h
flag2 equ 32h
flag3 equ 33h
;
flag4 equ 34h
;===============================
org 00h
nop
goto start
org 04h
;
;=========中断服务子服务=======
serv
MOVwf wtemp
bcf intcon,t0if
btfsc flag4,0
goto delay3ms7
;
btfss flag4,3
goto www
decfsz count1
goto www ;250uS未到继续计脉冲数goto www
MOVlw 0x03
MOVwf count1
bsf flag4,2
goto www
;
delay3ms7
btfss flag4,4
goto www
decfsz count2
goto www ;3.7mS未到继续计脉冲数goto www
bsf flag4,1
MOVlw 0x0f
MOVwf count2
;
www MOVlw 0x0e ;250us
MOVwf tmr0
MOVf wtemp,0
retfie
;==================================
start
nop
bsf status,rp0
clrf trisc
MOVlw b’00000000’
MOVwf trisa
MOVlw b’00000101’
MOVwf trisb
MOVlw b’00000000’ ;1:1
MOVwf option_reg
bcf status,rp0
clrf flag4
;-----------
MOVlw 00h ;写入EEPROM初始地址从0开始
MOVwf ADDR
MOVwf rec1
MOVlw 0 ;//初始写入值
MOVwf NUM
MOVlw 30h ;间接寻址,读出值初始存放地址
MOVwf FSR
MOVlw 0100h ;//写入次数
MOVwf WRC
;
;============ 复位时将EEPROM全清除掉 ==============
clrf count
CC bsf STATUS,RP1
bsf STATUS,RP0
btfsc EECON1,WR
goto $-1
bcf STATUS,RP0
bcf STATUS,RP1
MOVf count,0
bsf STATUS,RP1
MOVwf EEADR
bcf STATUS,RP1