📄 a5_8.asm
字号:
;///////////////////////////////////////////
;本程序源代码由单片机培训网提供.
;单片机培训网,让更多人学习单片机更容易.
;第一网址----www.mcuedu.com
;第二网址----http://51_train.nease.net
;创办人------刘永忠
;热线电话----(0755)27529998
;email-------aa815@163.com
;程序难易等级--------稍难
;8051与TNC全多工无线串行通信
;///////////////////////////////////////////
org 00h
jmp start
start: mov sp,#60h ;设置堆栈
mov scon,#50h ;uart工作在mode1
mov tmod,#20h ;timer1工作在mode2
mov th1,#0e6h ;波特率为1200
setb tr1 ;启动timer1
scan0: mov r3,#0f7h ;键盘扫描初始值
scan: jb ri,uart ;是否有接收tnc的数据
mov r1,#00h ;table取码指针
scan1: mov a,r3 ;输出行扫描
mov p1,a
mov a,p1
mov r4,a
setb c
mov r5,#04h ;扫描4列
l1: rlc a
jnc keyin ;c=0表有键按下
inc r1 ;c不等于0,未按则取码指针加1
djnz r5,l1 ;扫描下一列
mov a,r3 ;扫描下一行
setb c
rrc a
mov r3,a
jc scan1 ;4行扫描完?
jmp scan0
keyin: mov r7,#200 ;消除抖动
d2: mov r6,#248
djnz r6,$
djnz r7,d2
d3: mov a,p1 ;按键放开否?
xrl a,r4
jz d3
mov dptr,#table
movc a,@a+dptr
mov 20h,a ;暂存入ram(20h)
xrl a,#45h ;是否按"e"键
jz trans1 ;是则发送一串字码
mov a,20h ;将按键值ascii码发送给tnc
mov sbuf,a
cpl a
mov p2,a ;输出至p2显示
jmp scan0
uart: mov a,sbuf ;接收到tnc的数据,将sbuf载入acc
cpl a
mov p0,a ;输出至p0显示
clr ri ;清除ri
jmp scan
trans1: mov r0,#00h ;设定本机站号
mov r1,#09
call again
call delay
jmp trans2
trans2: mov r0,#09 ;设定呼叫站号
mov r1,#15
call again
call delay
jmp trans3
trans3: mov r0,#24 ;设定交谈模式
mov r1,#05
call again
call delay
jmp scan0
again: mov a,r0 ;至table1取码
mov dptr,#table1
movc a,@a+dptr
mov sbuf,a ;发送给tnc
cpl a
mov p2,a ;输出至p2显示
wait: jbc ti,ok ;发送完毕否?是则跳至ok并清除ti
jmp wait
ok: inc r0 ;取下一个码
djnz r1,again
ret
delay: mov r5,#200
d1: mov r6,#248
djnz r6,$
djnz r5,d1
ret
table: db 30h,31h,32h,33h ;0,1,2,3
db 34h,35h,36h,37h ;4,5,6,7
db 38h,39h,41h,42h ;8,9,a,b
db 43h,44h,45h,0dh ;c,d,e,entet
table1: db 4dh,59h,20h,42h ;mybu2fp
db 56h,32h,46h,50h,0dh
db 4dh,59h,43h,41h,4ch,4ch ;mycall bu2fp-1(enter)
db 20h,42h,56h,32h,46h,50h
db 2dh,31h,0dh
db 43h,4fh,4eh,56h,0dh ;conv(enter)
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -