📄 rx_demodulation.asm
字号:
;判断低电平时间是多少
;影响:
;******************************************************
low_pulse:
clr pulse_ti
low_n0:
jbc prot6,rx_dat
jmp low_n0
low_n1:
call del10us
inc pulse_ti ;脉冲低电平时间
jbs prot6,rx_dat
jmp low_n1
ret
;******************************************************
;判断脉冲时间
;判断脉冲时间是0.5mS还时1.5mS
;影响:
;******************************************************
det_pulse_ti:
mov a,@0x14 ;0x1e
sub a,pulse_ti
jbs status,c ;不够减时C置1,够减时清0
jmp detpu_exit ;小于300uS为无用信号
mov a,@0x3c ;0x46
sub a,pulse_ti
jbs status,c
jmp detpu_log1 ;小于700us为逻辑1
mov a,@0x6e ;0x78
sub a,pulse_ti
jbs status,c
jmp detpu_exit ;在700与1200uS之间为无用信号
mov a,@0xaa ;0xb4
sub a,pulse_ti
jbc status,c
jmp detpu_exit ;大于1800uS为无用信号
bc flag1,logic1
bs flag1,logic0 ;逻辑0有效
mov a,pulse_ti
mov 0x2d,a
bc flag,error
detpu_n0:
clr pulse_ti
ret
detpu_log1:
bs flag1,logic1 ;置1逻辑信号
bc flag1,logic0
mov a,pulse_ti
mov 0x2e,a
bc flag,error
jmp detpu_n0
detpu_exit:
bc flag1,logic1
bc flag1,logic0
bs flag,error
nop
ret
;******************************************************
;判断起始位脉冲时间
;判断脉冲时间是不是2.5mS
;影响:
;******************************************************
det_spulse:
mov a,@0xb4 ;b4
sub a,pulse_ti
jbs status,c ;不够减时C置1,够减时清0
jmp detsp_exit ;小于2mS为无用信号
mov a,@0xe6 ;dc
sub a,pulse_ti
jbc status,c
jmp detsp_exit
bs flag1,start_fl ;置起始位有效标志
mov a,pulse_ti
mov 0x2f,a
clr pulse_ti
nop
ret
detsp_exit:
clr pulse_ti
bc flag1,start_fl
nop
ret
;******************************************************
;计算校验码
;将地址与遥控信息码相加取最后8位
;影响:
;******************************************************
count_check:
mov a,add1
add a,add0
add a,rx_file
sub a,rx_check
jbs status,z ;等于零时置1
jmp couc_exit
bs flag,ck_right
nop
ret
couc_exit:
bc flag,ck_right
nop
ret
;******************************************************
;退出接收时清各相关寄存器
;需要退出接收时执行
;影响:
;******************************************************
exit_rx:
call clr_rxreg
mov a,@0x08 ;0x0c
mov rfr_ti,a
bc prot5,en_rx ;关闭接收
jmp main_sleep
;******************************************************
;清除接收数据寄存器
;清除接收临时寄存器
;影响:
;******************************************************
clr_rxreg:
clr flag1
clr rx_8bit
clr rx_data
clr add0 ;清除接收寄存器
clr add1
clr rx_file
clr rx_check
ret
;******************************************************
;延时子程序
;根据delh和dell中常数决定延时时间的长短
;影响:wdt
;延时时间=6+3*dell(uS) del_n0=5+3*delr(uS)
;******************************************************
delay:
mov a,dell
mov delr,a
del_n0:
djz delr
jmp del_n0
wdtc
ret
;******************************************************
;延时200mS
;作200mS延时
;影响:
;******************************************************
del200ms:
mov a,@0xc8 ;200mS
mov temp,a
mov a,@0xa1
mov dell,a
del2_n0:
call delay
call delay
call delay
call delay
djz temp
jmp del2_n0
ret
;******************************************************
;提示音子程序
;发2.0K40mS50%方波信号
;影响:
;******************************************************
buzzer:
mov a,@0xc8 ;40mS
mov temp,a
mov a,@0x94
mov dell,a
buz_n0:
bs prot5,buz
call delay
bc prot5,buz
call delay
djz temp
jmp buz_n0
ret
;******************************************************
;中断服务子程序
;LED模式40mS中断子程序
;影响:rf a save tmr0
;******************************************************
int_ser:
disi
clr rf
mov save,a
mov a,@0x63
mov tmr0,a
djz rfr_ti
jmp int_exit
jmp exit_rx
int_exit:
mov a,save
reti
;******************************************************
;睡眠设置子程序
;设置40mS WDT
;影响:cont,wdtcg
;******************************************************
int_sleep:
mov a,@0b00001001 ;睡眠40mS
contw
mov a,@0b10000000 ;使能WDT
iow wdtcg
slep ;睡眠40mS
nop
jmp main
;******************************************************
;定时中断设置子程序
;LED模式定时中断设置子程序
;影响:rf,tmr0,intcg,cont
;******************************************************
int_timer:
clr rf
mov a,@0x63 ;20mS中断设置
mov tmr0,a
mov a,@0x01
iow intcg
mov a,@0x07 ;分频比为256:1中断
contw
eni
ret
;******************************************************
;延时子程序
;延时10us
;影响:delr
;******************************************************
del10us:
mov a,@0x03
mov delr,a
del10u_n0:
djz delr
jmp del10u_n0
nop
ret
;***********************************
org 0x3ff
jmp main
end
;*******************************************************
;******************************************************
;特殊功能寄存器定义
;******************************************************
indf equ 0x00 ;间址寻址寄存器
tmr0 equ 0x01 ;定时器基数寄存器
pc equ 0x02 ;程序计数器
status equ 0x03 ;状态寄存器
fsr equ 0x04 ;间址寻址寄存器地址
prot5 equ 0x05 ;I/O口 P5
prot6 equ 0x06 ;I/O口 P6
rf equ 0x0f ;中断标志寄存器
;******************************************************
;控制寄存器定义 IOCB~IOCF
;******************************************************;
ioc5 equ 0x05 ;I/O口P5输入输出控制寄存器
ioc6 equ 0x06 ;I/O口P6输入输出控制寄存器
io6_pd equ 0x0b ;I/O口P6 P5下拉控制寄存器
io6_po equ 0x0c ;I/O口P6漏极开路控制寄存器
io6_ph equ 0x0d ;P6口上拉控制寄存器
wdtcg equ 0x0e ;Watch dog控制寄存器
intcg equ 0x0f ;中断屏蔽寄存器
;******************************************************
;状态寄存器位定义 (STATUS)
;******************************************************
c equ 0 ;进位位标志,加法进位时置一
dc equ 1 ;辅助进位标志,低四位进位置一
z equ 2 ;零标志位,运算结果为零时置一
p equ 3 ;低功耗位,WDTC或上电时置一,
;SLEEP时清零
t equ 4 ;溢出位,SLEEP WDTC或上电置一
;WDT溢出时清零
gp0 equ 5 ;通用读写位
gp1 equ 6 ;通用读写位
rst equ 7 ;复位类型位,引脚变从休眠唤醒置一
;其它清零
;******************************************************
;中断状态寄存器位定义 (RF)
;******************************************************
tcif equ 0 ;TCC溢出置一,需要软件清零
icif equ 1 ;P6口输入变化中断置一,软清零
exif equ 2 ;INT引脚下降沿置一,软清零
;******************************************************
;控制寄存器位定义 (CONT)
;******************************************************
psr0 equ 0 ;PSR2 PSR1 PSR0
psr1 equ 1 ;00(TCC 1:2 WDT 1:1)
psr2 equ 2 ;07(TCC 1:256 WDT 1:256)
pab equ 3 ;零分配给TCC,1分配给WDT
te equ 4 ;零表示TCC^时加1,一表示v时加1
ts equ 5 ;TCC源选择,0为内部指令,1为外部
;输入
inten equ 6 ;中断允许标志需由ENI置1,DISI清零
;******************************************************
;I/O下拉控制寄存器位定义 (io6_pd)
;******************************************************
pd50 equ 0 ;P50内部下拉,0为下拉,1为禁止
pd51 equ 1 ;P51内部下拉,0为下拉,1为禁止
pd52 equ 2 ;P52部下拉,0为下拉,1为禁止
pd60 equ 4 ;P60内部下拉,0为下拉,1为禁止
pd61 equ 5 ;P61部下拉,0为下拉,1为禁止
pd62 equ 6 ;P62内部下拉,0为下拉,1为禁止
;******************************************************
;I/O漏极开路控制寄存器位定义(io6_po)
;******************************************************
od60 equ 0 ;P6口漏极开路功能,0使能1禁止
od61 equ 1
od62 equ 2
od64 equ 4
od65 equ 5
od66 equ 6
od67 equ 7
;******************************************************
;I/O上拉控制寄存器位定义(io6_ph)
;******************************************************
ph60 equ 0 ;P6口上拉控制,0使能1禁止
ph61 equ 1
ph62 equ 2
ph64 equ 4
ph65 equ 5
ph66 equ 6
ph67 equ 7
;******************************************************
;WDT控制寄存器位定义(wdtcg)
;******************************************************
wdte equ 7 ;WDT使能控制,0为禁止1为使能
eis equ 6 ;P60引脚功能定义,0为P60 1为INT
;******************************************************
;中断屏蔽控制寄存器位定义(intcg)
;******************************************************
tcie equ 0 ;TCC中断控制位,1使能0禁止
icie equ 1 ;P6口电平变化中断,1使能0禁止
exie equ 2 ;外部中断控制位,1使能0X
;*********
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -