📄 hwasm.asm
字号:
;版权所有 中国自动化资讯网(www.zidh.com) 逸飞(在您网上的用户名:xfyyf)
;编程思路:P3.2上的INT0中断每次有下降沿时则为一个数据数,
;并开通中断INT0延时800us后开始计数,一位位接收到来的数据
;当四个数据接收并之后则判断为哪个键按下!
nobbuf equ 20h
nob1 equ 31h;存放红外的四个码
nob2 equ 32h
nob3 equ 33h
nobb equ 34h;红外码1个字节8位的计数器
nobw equ 35h;红外码字节的计数器
nobdip equ 40h
keysign bit 21h.0;按键标志位
org 0000h
ajmp reset
org 0003h
ljmp int00
org 000bh
ljmp intT0
org 0040h
reset:
mov r1,#05
mov r0,#nob1
qn:
mov @r0,#00
inc r0
djnz r1,qn
mov tmod,#01h
setb ea
setb it0
setb ex0
start:
call delay
jnb keysign,nopresskey
clr P3.3
call delay
call delay
call delay
clr keysign
setb P3.3
nopresskey:
setb ex0
ajmp start
;********************************************************************
; 中断0子程序
;********************************************************************
int00:
push acc
push psw
clr ex0
setb et0
mov th0,#0fdh
mov tl0,#1eh
mov r1,#05
mov r0,#nob1
qn2:
mov @r0,#00
inc r0
djnz r1,qn2
mov nobbuf,#00h
mov r0,#nob1
setb tr0
pop psw
pop acc
reti
;********************************************************************
; 中断T0子程序
;********************************************************************
intT0:
push acc
push psw
mov th0,#0fdH ;设定时值为800us
mov tl0,#1eh
mov a,nobw
cjne a,#03h,nextw ;判断是否已接收4个字节,没有则转字节中位的接收
mov nobw,#00h ;已达4位则字节计数器清零,以下判断是哪个键按下
clr tr0;关闭中断
clr et0
mov a,nob2
cjne a,#55h,noaj
mov a,nob3
cjne a,#0abh,key2
cpl p1.0
setb keysign
noaj:
Ljmp T0out
key2:
mov a,nob3
cjne a,#0ach,key3
cpl p1.1
setb keysign
Ljmp T0out
key3:
mov a,nob3
cjne a,#0adh,key4
cpl p1.2
setb keysign
Ljmp T0out
key4:
mov a,nob3
cjne a,#0b3h,key5
cpl p1.3
setb keysign
Ljmp T0out
key5:
mov a,nob3
cjne a,#0b4h,key6
cpl p1.4
setb keysign
Ljmp T0out
key6:
mov a,nob3
cjne a,#0b5h,key7
cpl p1.5
setb keysign
Ljmp T0out
key7:
mov a,nob3
cjne a,#0cbh,key8
cpl p1.6
setb keysign
Ljmp T0out
key8:
mov a,nob3
cjne a,#0aah,T0out
cpl p1.7
setb keysign
Ljmp T0out
nextw:
mov a,nobb
cjne a,#08h,nextb ;判断是否已接收8位,没有则转其它位的接收
mov nobb,#00h
mov a,nobw
inc a
mov nobw,a;已接收8位则转下一个字节
mov @r0,nobbuf
inc r0
ajmp T0out
nextb:
mov a,nobb
inc a
mov nobb,a
clr c
mov c,P3.2
mov a,nobbuf
rlc a
mov nobbuf,a
ajmp T0out
T0out:
pop psw
pop acc
reti
;********************************************************************
; 延时子程序600ms
;********************************************************************
delay:
mov r6,#120
del1:
mov r7,#250
djnz r7,$
djnz r6,del1
ret
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -