作者:王朋 李智 来源:单片机与嵌入式系统应用
MCS51单片机系列属于8位单片机,它是Intel公司继MCS48系列的成功设计之后,于1980年推出的产品。由于MCS51系列具有很强的片内功能和指令系统,因而使单片机的应用发生了一个飞跃,这个系列的产品也很快成为世界上第二代的标准控制器。51系列单片机有5个中断源,其中有2个是外部输入中断源INT0和INT1。可由中断控制寄存器TCON的IT1(TCON.2)和IT0(TCON.1)分别控制外部输入中断1和中断0的中断触发方式。若为0,则外部输入中断控制为电平触发方式;若为1,则控制为边沿触发方式。这里是下降沿触发中断。
1 问题的引出
几乎国内所有的单片机资料对单片机边沿触发中断的响应时刻方面的定义都是不明确的或者是错误的。例如文献[1]中关于边沿触发中断响应时刻的描述为“对于脉冲触发方式(即边沿触发方式)要检测两次电平,若前一次为高电平,后一次为低电平,则表示检测到了负跳变的有效中断请求信号”,但实际情况却并非如此。
我们知道,单片机外部输入的中断触发电平是TTL电平。对于TTL电平,TTL逻辑门输出高电平的允许范围为2.4~5 V,其标称值为3.6 V;输出低电平的允许范围为0~0.7 V,其标称值为0.3 V[2],在0.7 V与2.4 V之间的是非高非低的中间电平。
这样,在实际应用中,假设单片机外部中断引脚INT0输入一路由+5 V下降到0 V的下降沿信号,单片机在某个时钟周期采样INT0引脚得到2.4 V的高电平;而在下一个时钟周期到来进行采样时,由于实际的外部输入中断触发信号由高电平变为低电平往往需要一定的时间,因此,检测到的可能并非真正的低电平(小于0.7 V),而是处于低电平与高电平之间的某一中间电平,即0.7~2.4 V的某一电平。对于这种情况,单片机是否会依然置位中断触发标志从而引发中断呢?关于这一点,国内的绝大部分教材以及单片机生产商提供的器件资料都没有给予准确的定义,但在实际应用中这种情况确实会碰到。
以美国Analog公司生产的运算放大器芯片AD708为例,其转换速率(slew rate)为0.3 V/μs,在由AD708芯片组成的比较器电路中,其输出方波的下降沿由2.4 V下降到0.7 V,所需时间约为: (2.4 V-0.7 V)/0.3V·μs-1=4.67 μs。即需要约4.67 μs的过渡时间,下降沿才真正地由高电平下降为低电平,在实际应用电路中,这个下降时间往往可达10 μs以上。对于精密的测量系统,这么长的不确定时间是无法接受的,因此,有必要对单片机边沿中断触发时刻进行精确的测定。
2 测试波形的设计与分析
为了测定MCS51单片机下降沿触发的实际时刻,使用Agilent公司生产的型号为33250A的80 MHz函数/任意波形发生器(function/arbitrary waveform generator),产生出如图1所示的周期为20 ms的周期波形。
图1 周期为20 ms的周期波形
将该波形通过单片机的外部中断0输入,可以测出下降沿中断触发的实际时刻,下面对该波形进行具体分析。建立如图2所示的直角坐标。
图2 建立的直角坐标设
图2所示波形的周期为T,单片机在电压下降到y=y′时刻触发中断,t1′、t2′、t3′分别为前后周期的中断触发时刻,则有:
求得L1方程为:
求得L2方程为:
由图2所示的电路及式(1)、式(2)、式(3),可求得:
将以上波形由单片机外部中断0输入,选择边沿触发方式,通过中断服务程序测取T1或者T2的值,从而可求出中断发生时刻的电平值y′,即边沿触发中断的实际时刻。
在使用单片机对中断时刻进行测量时,使用两个计数器,均设为方式1(16位计数方式)。其中,第一个计数器用于记录从程序开始执行到第一个下降沿到来所经历的时间,第二个计数器用来记录程序开始执行到第二个下降沿到来所经历的时间,将两个计数器的计数值相减便可以得到两个下降沿之间的时间间隔。由前面的分析可知,该时间间隔可能有两种情况:一种是T1时间,即t1′与t2′之间的时间间隔;另一种是T2时间,即t2′与t3′之间的时间间隔。其中,T1+T2=T,T1时间要小于T2时间。通过测量得到T1或者T2时间,利用式(4)便可求得下降沿触发中断时刻的实际电平。
3 测试流程和相应的单片机程序
该单片机的中断服务程序流程如图3所示。
图3 中断服务程序流程
相应的中断服务程序为:
INCR1
MOVA,R1
CJNEA,#01H,SEC
CLRTR0
MOV20H,TL0
MOV21H,TH0
CLRIE0
RETI
SEC:CLRTR1
MOV22H,TL1
MOV23H,TH1
CLREX1
CLREX0
RETI
由于程序执行有一定的延时,在中断返回后,还需对两个计数器的输出值进行校正。本实验采用伟福公司生产的H51/L仿真器为单片机测量系统,测得T1值为6.514 ms,由式(4)可得:y′=0.729 V,即当y′约为0.73 V时,单片机下降沿触发中断。
4 结论
本文通过设计一简单的波形,对单片机的边沿触发中断响应时刻进行了准确的测量,从而纠正了国内单片机学习资料在边沿触发中断时刻方面的不明确定义,且最终结果经过了实验验证。
参考文献
[1] 梅丽凤,等.单片机原理及接口技术. 北京:清华大学出版社,2004.
[2] 曹汉房.数字电路与逻辑设计. 武汉:华中科技大学出版社,2004.
[3] 白驹衍,雷晓平. 单片计算机原理及其应用. 成都:电子科技大学出版社,1997.
王朋(硕士),主要研究方向为自动测试与系统;
李智(教授),主要研究方向为虚拟仪器与系统、自动测试总线与系统。