单片机学习之十一:中断方式按键
mov p2,#01h;
ret
play2: inc r7 ;查表求段码,然后送到P0口的子程序,大家很熟了
mov a,r7
mov dptr,#tab
movc a,@a+dptr
mov p0,a
mov p2,#01h
cjne a,#48h,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 0ebh,52h,62h,0e1h,64h,44h,0eah,40h,60h,48h ;存放0~9的段码表
end
相信通过上面的详细注释,大家基本上已经看懂这个程序了。下面我就几个小问题再给大家作一些解释。
5、注释
1、先看(1)语句,我们发现程序开始的时候,在地址为0000h的地方,放了一条跳转指令。主程序是从程序存储器中0030h的地方开始存放的,为什么要把前面的空间空出来呢?这是因为前面的空间我们是有用处的。
由于不同类型的中断,具有不同的中断入口地址。CPU在响应中断的时候,会根据中断源的类别,转到相应的入口去执行中断服务程序。外部中断1的入口地址是0013h(其余4个中断的入口地址大家可以查阅相关资料),那么cpu在响应了外部中断1后,会自动的到这个地址来,从这个地址开始往下执行程序。所以我们要把前面的一段空出来,以免覆盖这个地址。
2、再看看(2)语句,它在中断1的入口处放了一个跳转指令,所以,cpu在响应外部中断后,会到这个入口处往下执行程序。于是CPU就会从这里转去中断服务程序。大家可能会说,为什么要跳转,直接从这里开始存放中断服务程序 不就可以了嘛。
由于我们很难预料中断服务程序的长度,所以我们就拿不准主程序应该从什么单元开始存放。这样就容易造成整个程序的结构混乱。
所以还是采用上面的方法吧,看起来结构清楚规范,容易理解。
3、(3)语句的意思是设置外部中断1为跳变方式触发。大家可能觉得,当K0按下的时候,INT1上会出现一个低电平,为什么不能采用电平方式触发呢?解释如下:当我们选外部中断为电平方式触发的时候,当INT1输入低电平的时候,cpu响应中断。在中断返回之前,INT1必须回到高电平,否则就会第二次产生中断。所以,如果我们按下按键的时间较长,就会产生多次的中断,导致程序混乱。所以我们在这里要采用边沿方式触发。
顺便说说it1,它是外部中断触发方式控制位,为1的时候选择跳变方式触发,为0的时候选择电平方式触发。那么它在哪里呢?
it1是tcon寄存器其中的一位,tcon和我们知道的psw,ie一样,也是一个特殊功能寄存器。位置当然也在特殊功能寄存器区啦。
TCON是定时器/计数器(T0,T1)的控制寄存器,关于它的应用我们以后通过例子详细说明。它的各位的功能说明如下:
TF1:定时器/计数器(T1)的溢出中断标志,当T1产生溢出试,由硬件置1,CPU响应中断后,由硬件置0;TF0类似。(以后通过试验详细说明)
TR1:置1时启动定时/计数器,置0时停止定时/计数器;TR0类似。(以后通过试验详细说明)
IE1:外部中断1请求标志。当它置一的时候,请求中断。
IT1:外部中断1触发方式控制位。如果IT1是1,则外部中断为跳变方式触发,否则,为电平方式触发。选择何种方式触发,视程序的具体情况来定。
IE0:外部中断0请求标志,含义同IE1。
IT0:外部中断0触发方式控制位,含义同IT1。
4、语句(4)是中断返回指令,功能和子程序返回指令ret相类似,通常被安排在中断服务程序的最后。CPU执行完这条指令后,从原来被中断处开始,重新执行被中断的程序。
现在大家对中断的基本概念和简单的编程处理方法有所了解了把,下面一个试验“按键控制跑马灯”,在这个试验里面,我们要了解关于中断现场保护的问题。
单片机中断方式按 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)