购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.11 INT0中断计数

仿真电路中用3只分立式数码管显示按键计数值,不需要处理数码管动态刷新显示的问题。案例3.7已设计了按键计数功能,电路图3-11中的清零键与该例实现方式相同,但计数键则使用了新的外部中断技术。

图3-11 INT0中断计数电路

1.程序设计与调试

8051单片机共有5个中断源,包括两个外部中断(INT0、INT1),两个定时中断(TIMER0、TIMER1)及一个串口中断(Serial Port Interrupt)。如图3-12所示,各中断源的中断触发标志位保存于TCON寄存器(Timer/Counter Control Register),表3-1列出了该寄存器的所有位。

图3-12 8051单片机的中断源

表3-1 定时/计数控制寄存器TCON

中断使能寄存器IE(Interrupt Enable Register)如表3-2所示,最高位为中断许可位EA(Enable Interrupt),右边第0~4位为EX0,ET0,EX1,ET1,ES,分别独立使能或禁止INT0,INT1,TIMER0,TIMER1中断及串口中断,置1时使能,置0则禁止,最高位EA则用于一次性开启所有使能的中断或屏蔽所有中断。

表3-2 中断使能寄存器IE

本例仿真电路中,计数按键连接单片机P3.2引脚(INT0),主程序设置IE=0x81(即10000001),其他设置EA=1(开中断)、EX0=1(允许INT0中断)。IE=0x81可以用以下语句代替:

EA = 1; //开中断

EX0 = 1; //允许INT0中断

另外,由于IT0为TCON寄存器的最低位,设置IT0=1还可以写成:

TCON = 0x01; //即IT0 = 1;

主程序中所设置的IT0(Interrupt Trigger INT0),它是TCON寄存器中控制INT0中断方式的配置位,设置IT0=1将INT0的中断触发方式配置为下降沿触发,设置IT0=0则为低电平触发。本例设为下降沿触发可以使计数按键按下时,P3.2上由高到低的跳变将触发中断。如果按下后没有释放,中断则不会持续触发,只有在释放按键后再次按下时,才会因为又出现了高电平到低电平的跳变而再次触发中断,这样设置会使计数值仅在计数键每次重新按下时累加。

为了使计数按键能够稳定地进行操作,在实物电路上测试时注意添加消抖语句。计数键是通过中断触发来识别的,每次中断触发时即表示计数键按下,中断例程EX_INT0被自动调用,全局变量Count随之累加,INT0的中断号为0,中断函数用interrupt指明中断号0。

清零键由主程序中的while循环来轮询判断,它持续不断地查看P3.6引脚是否变为0,如果变为0则表示清零键按下。

2.实训要求

① 改用查询方式判断计数键,用中断方式控制清零键,实现相同的运行效果。

② 将计数键连接P3.3,编写INT1中断子程序实现计数。 TNNfehnRr59q+OLFvOFBiTepn1WfetOQiV215yKWlUshRn/12h34FWGV/JRb+dEg

3.源程序代码
点击中间区域
呼出菜单
上一章
目录
下一章
×