📄 key.a51
字号:
public WaitKey
;------------------------------------------
PIN_6221 equ p3.7
;------------------------------------------
?DT?WaitKey?KeyAsm segment data overlayable
rseg ?DT?WaitKey?KeyAsm
caryKeyBuf: ds 4
;------------------------------------------
KeyAsmCodeSeg segment code
rseg KeyAsmCodeSeg
WaitKey:
begin:
mov p3, #0ffH
WaitLoop:
jnb p3.2, KeyDown
jnb p3.3, KeyDown
jnb p3.4, KeyDown
jnb p3.5, KeyDown
jb PIN_6221, RemoteDeviceKeyDown
sjmp WaitLoop
KeyDown:
mov r7, #0
ret
RemoteDeviceKeyDown:
mov r6, #10
sb:
lcall ys1 ;调用882微秒延时子程序
jb PIN_6221, begin ;延时882微秒后判断PIN_6221脚是否出现高电平如果有就退出解码程序
djnz r6, sb ;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序
;以上完成对遥控信号的9000微秒的初始低电平信号的识别。
jnb PIN_6221, $ ;等待高电平避开9毫秒低电平引导脉冲
lcall ys2 ;延时4.74毫秒避开4.5毫秒的结果码
mov r1, #caryKeyBuf
mov r2, #4
pp:
mov r3, #8
jjjj:
jnb PIN_6221, $ ;等待地址码第一位的高电平信号
lcall ys1 ;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
mov c, PIN_6221 ;将PIN_6221引脚此时的电平状态0或1存入c中
jnc uuu ;如果为0就跳转到uuu
jb PIN_6221, $ ;如果为1就等待高电平信号结束
uuu:
mov a, @r1 ;将r1中地址的给a
rrc a ;将c中的值0或1移入a中的最低位
mov @r1,a ;将a中的数暂时存放在r1中
djnz r3, jjjj ;接收地址码的高8位
inc r1 ;对r1中的值加1,换成下一个ram
djnz r2, pp ;接收完16位地址码和8位数据码和8位数据反码
;以下对代码是否正确和定义进行识别
mov a, caryKeyBuf;比较高8位地址码
xrl a, #00000000b ;判断1ah的值是否等于00000000,相等的话a为0
jnz begin;如果不相等说明解码失败退出解码程序
mov a, caryKeyBuf + 1;比较低8位地址
xrl a, #11111111b ;再判断高8位地址是否正确
jnz begin;如果不相等说明解码失败退出解码程序
lcall ys3
mov a, caryKeyBuf + 2 ;比较数据码和数据反码是否正确?
cpl a
xrl a, caryKeyBuf + 3 ;将1ch的值取反后和1dh比较 不同则无效丢弃,核对数据是否准确
jnz begin;如果不相等说明解码失败退出解码程序
lcall ys3
;判断在118毫秒内是否有连发码
aa:
mov r1, #25
xx:
lcall ys2
jnb PIN_6221, hh; 跳转到判断连发代码是否正确的程序段
djnz r1, xx
mov r7, caryKeyBuf + 2
ret
;连发码判断程序段-----------
hh:
mov r6,#4
s:
lcall ys1 ;调用882微秒延时子程序
jb PIN_6221, begin ;延时882微秒后判断PIN_6221脚是否出现高电平如果有就退出解码程序
djnz r6, s ;重复4次,目的是确认连发码的低电平信号波形
jnb PIN_6221, $ ;等待高电平
sjmp aa
ys1:
mov r4, #20 ;延时子程序1,精确延时882微秒
d1:
mov r5, #20
djnz r5, $
djnz r4, d1
ret
ys2:
mov r4, #10 ;延时子程序2,精确延时4740微秒
d2:
mov r5, #235
djnz r5, $
djnz r4, d2
ret
ys3:
mov r4, #2 ;延时程序3,精确延时1000微秒
d3:
mov r5, #248
djnz r5, $
djnz r4, d3
ret
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -