51单片机——中断系统、定时器、计数器工作原理

目录

一、中断系统

1.中断源种类

2.中断地址入口

3.中断请求标志

(1)TCON寄存器

   (2)SCON寄存器

4.中断控制

二、中断案例实操

1.单一外部中断

2.两个外中断

 3.中断嵌套

三、定时器计数控制led灯周期性亮灭

1.定时器工作原理

(1)原理

(2)工作方式寄存器 TMOD

(3)控制寄存器 TCON

2.用定时器控制led灯亮灭

(1)设置TMOD寄存器    

(2)计算定时器T0的计数初值      

(3)设置IE寄存器      

(4)启动和停止定时器T0    

四、采用计数器中断,使led灯闪烁

1.原理

2.使用计数器中断实例

(1)设置TMOD寄存器

(2)计算定时器T0的计数初值  

(3)设置IE寄存器    

五、keil中采用逻辑分析仪观察波形

六、代码优化

总结


一、中断系统

1.中断源种类

51的中断系统共有5个中断源:

外部中断0(INT0):由P3.2引脚输入的中断请求信号。
外部中断1(INT1):由P3.3引脚输入的中断请求信号。
定时器T0中断(T0):由定时器/计数器T0的定时、计数溢出产生的中断请求。
定时器T1中断(T0):由定时器/计数器T1的定时、计数溢出产生的中断请求。
串行口中断(ES):由串行数据发生完成(TI)或串行数据接收完成(RI)产生的中断请求。

2.中断地址入口

中断源 中断入口地址 中断序号
外部中断0 0003H 0
定时器T0 000BH 1
外部中断1 0013H 2
定时器T1 001BH 3
串行口中断ES 0023H

4

3.中断请求标志

(1)TCON寄存器

        TCON寄存器为定时器/计数器的控制寄存器,字节地址为88H,可位寻址。既包括定时器/计数器T0、T1溢出中断请求标志位TF0和TF1,也包括两个外部中断请求的标志位IE1与IE0,还包括两个外部中断请求源的中断触发方式选择位

TF0——定时器T0的溢出中断请求标志位。溢出时由硬件置1,即开始发送中断请求;单片机响应中断后,重新由硬件清0。
TR0——定时器/计数器0的启动控制。功能详见定时器知识。
IE0——外部中断0的中断请求标志位。触发中断时由硬件置1,即开始发送中断请求;单片机响应中断后,重新由硬件清0。
IT0——外部中断0的触发方式选择位。令它为1,则对应引脚为下降沿触发中断;令它为0,则对应引脚为低电平触发方式。
TF1、TR1,IE1、IT1则为定时器1、外部中断1的相关标志位,功能与上述相同。

   (2)SCON寄存器

        SCON寄存器 串行口控制寄存器,字节地址为98H,可位寻址。SCON的低二位锁存串口的发送中断和接收中断的中断请求标志TI和RI

TI——串行口发送完成中断请求标志位。串行口发送数据后,TI位被硬件置1;单片机响应串行口中断后,必须在服务程序中将TI手动清0。

RI——串行口接收完成中断请求标志位。串行口接收数据后,TI位被硬件置1;单片机响应串行口中断后,必须在服务程序中将TI手动清0

4.中断控制

EA——总中断允许控制位。用来开启或屏蔽所有的中断请求,令它为1,则开放中断请求,可以响应中断;令它为0,则屏蔽所有中断请求。
ES——串行口中断允许控制位。为1时开放串行口中断请求,为0时屏蔽。
ET1——定时器/计数器T1中断允许控制位。为1时开放TI的中断请求,为0时屏蔽。
EX1——外部中断1中断允许控制位。为1时开放外部中断1的中断请求,为0时屏蔽。
ET0、EX0则为T0、外部中断0的中断允许控制位。功能与上述相同。

二、中断案例实操

1.单一外部中断

 要求:在单片机P1口上接有8只LED。在外部中断0输入引脚(P3.2)接一只按钮开关K1。要求将外部中断0设置为电平触发。程序启动时,P1口上的8只LED全亮。每按一次按钮开关K1,使引脚接地,产生一个低电平触发的外中断请求,在中断服务程序中,让低4位的LED与高4位的LED交替闪烁5次。然后从中断返回,控制8只LED再次全亮。

代码如下:

#include <reg51.h>
  #define uchar  unsigned char
  void Delay(unsigned int i)	//延时函数Delay( ),i形式参数,不能赋初值
  {	
  	unsigned int j;
   	for(;i > 0;i--)		
   	for(j=0;j<333;j++)         //晶振为12MHz,j选择与晶振频率有关
   	{;}			   //空函数
  }
 
void  main( )			//主函数
  {	
  	EA=1;			//总中断允许
   	EX0=1;			//允许外部中断0中断
   	IT0=1;			//选择外部中断0为跳沿触发方式
  	while(1)		//循环	
{       P1=0;}			// P1口的8只LED全亮
  }

 void int0( )  interrupt 0  using 0  	//外中断0的中断服务函数
  {	
  	uchar  m;
  	EX0=0;			//禁止外部中断0中断
   	for(m=0;m<5;m++)	//交替闪烁5次
  	{
  	    P1=0x0f;		//低4位LED灭,高4位LED亮
        Delay(400) ;		//延时
   	P1=0xf0;		//高4位LED灭,低4位LED亮
   	Delay(400); 		//延时
   	EX0=1;			//中断返回前,打开外部中断0中断
  }

仿真效果图如下: 

一个中断

2.两个外中断

要求:在单片机P1口上接有8只LED。在外部中断0输入引脚(P3.2)接有一只按钮开关K1。在外部中断1输入引脚(P3.3)接有一只按钮开关K2。要求K1和K2都未按下时,P1口的8只LED呈流水灯显示,仅K1(P3.2)按下再

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值