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

📄 a6_5.asm

📁 单片机汇编例程学习,大量的汇编例程
💻 ASM
字号:
;///////////////////////////////////////////
;本程序源代码由单片机培训网提供.
;单片机培训网,让更多人学习单片机更容易.
;第一网址----www.mcuedu.com
;第二网址----http://51_train.nease.net
;创办人------刘永忠
;热线电话----(0755)27529998
;email-------aa815@163.com
;程序难易等级--------稍难
;使用串行中断发送数据
;///////////////////////////////////////////
         org          00h               ;主程序起始地址
         jmp          start             ;跳至主程序
         org          obh               ;timer0中断起始地址
         jmp          tim0              ;跳至timer0中断子程序
start:   mov          tmod,#00000001b   ;设timer0在mode1
         mov          ie,#10000010b     ;中断使能
         setb         tr0               ;启动timer0
l1:      call         key               ;调用key,判断是否有键按下?
         clr          ea                ;中断屏蔽
         jb           f0,l1             ;没按则f0=1,有按则f0=0
         mov          a,22h             ;有按则将取码指针暂存地址的载入a
         rl           a                 ;乘2
         mov          dptr,#table
         movc         a,@a+dptr         ;至table取码,取t的值
         mov          th0,a             ;取到的高位字节存入th0
         mov          21h,a             ;取到的高位字节存入(21h)
         mov          a,22h             ;再载入取码指针值
         rl           a                 ;乘2
         inc          a                 ;加1
         movc         a,@a+dptr         ;至table1取相对的低位字节计数值
         mov          tl0,a             ;取到的低位字节存入tl0
         mov          20h,a             ;取到的低位字节存入(20h)
l2:      call         key               ;调到key判断有按否?
         setb         ea                ;中断使能
         jb           f0,l1             ;有按否?
         jmp          l2                ;有则跳至l2
key:     setb         f0                ;设f0=1
         mov          r3,#0f7h          ;扫描初值(p23=0)
         mov          r1,#00h           ;取码指针初值
l3:      mov          a,r3              ;载入扫描指针
         mov          p2,a              ;输出至p2,开始扫描(p23~p20)一行为0
         mov          a,p2              ;读入p2
         clr          c
         cpl          c                 ;令c=1
         mov          r5,#04h           ;检测p27~p24
l4:      rlc          a                 ;左移一位(p27~p24)
         jnc          keyin             ;检测行c=0,表示被按
         inc          r1                ;没按则取码指针加1
         djnz         r5,l4             ;4列检测完毕了?
         mov          a,r3              ;虹入扫描指针
         clr          c
         cpl          c                 ;c=1
         rrc          a                 ;扫描下一行,即下一行为0
         mov          r3,a              ;存回r3扫描指针寄存器
         jc           l3                ;c=0表示行扫描完毕
         ret
keyin:   mov          22h,r1            ;取码指针存入22h地址
         clr          f0                ;令f0=0
         ret
tim0:    push         acc               ;将a的值暂存于堆栈
         push         psw               ;将psw的值暂存于堆栈
         mov          tl0,20h           ;重设计数值
         mov          th0,21h
         cpl          p1.0              ;将p10位反相
         pop          psw               ;至堆栈取回psw的值
         pop          acc               ;至堆栈取回a的值
         reti                           ;返回主程序
table:
         dw           64021,64103,64260,64400 
         dw           64524,64580,64684,64777 
         dw           64820,64898,64968,65030
         dw           65058,65110,65157,65178
         end
         

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -