首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

中断方式独立按键(51汇编)

中断方式独立按键(51汇编)

org 0000h
ljmp start        

org 0013h
ljmp ext1        

org 0030h        
start:
mov r7,#0ffh                       
setb ea        ;cpu开放中断
setb ex1       ;允许外部中断1申请中断
setb it1        ;设置外部中断1触发方式为跳变触发
lcall play1      ;调用初始状态显示子程序
ajmp $         ;等待按键发出中断申请

ext1:  clr ea          ;进入中断,先关闭中断      
lcall play2  ;调用键识别子程序
pass:  setb ea        ;返回主程序之前先开中断
reti            ;中断返回指令,


play1:     mov a,#0C0H   ;让最右面的数码管显示0的子程序
mov p0,a                                                                                                                                                                                                                                                                                                                                                                                               
mov p2,0
ret

play2:     inc r7       ;查表求段码,然后送到P0口的子程序.
mov a,r7
mov dptr,#tab
movc a,@a+dptr
mov p0,a
mov p2,0
cjne a,#06fH,next;如果没有显示到最后一个数字0,就继续查表显示
    mov r7,#0ffh   ;否则,重新从表头开始显示   
next:      ret

del10ms:  mov r5,#10    ;延时10ms子程序
del1:     mov r4,#02h
del2:     mov r3,#0ffh
del3:     djnz r3,del3
djnz r4,del2
djnz r5,del1
ret
tab:     db 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f    ;存放0~9的段码表
end
返回列表