⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 a5_8.asm

📁 单片机汇编例程学习,大量的汇编例程
💻 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 + -