80C51的中断系统 | 您所在的位置:网站首页 › if=1中断 › 80C51的中断系统 |
中断系统——80C51单片机学习笔记
中断的概念中断系统的结构中断请求标志1、TCON的中断标志2、SCON的中断标志位
80C51中断的控制中断允许控制——IE中断优先级控制——IP中断优先级的原则
80C51的定时/计数器一、定时/计数器的结构二、定时/计数器的工作原理三、定时/计数器的控制1、工作方式寄存器TMOD2、控制寄存器TCON
四、定时/计数器的工作方式1、方式O2、方式13、方式24、方式3
五、定时/计数器应用举例
补充说明中断响应的条件为:中断服务函数要与中断一一照应
本篇略长,请以目录为导航;这是我观看
郭天祥老师的单片机视频后的整体汇结;
中断的概念
CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生); CPU暂停中断当前的工作,转去处理事件B(中断响应和中断服务); 待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回); 这一过程称为—— 中断。 80C51的中断系统有5个中断源(8052有6个),2个优先级,可实现二级中断嵌套。
CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。 蔽是由中断允许寄存器IE控制的。 80C51单片机有两个中断优先级,即可实现二级中断服务嵌套。每个中断源的中断优先级都是由中断优先级寄存器IP中的相应位的状态来规定的。 需要注意: 80C52单片机有四个中断优先级,即可实现四级中断服务嵌套。每个中断源的中断优先级由中断优先级寄存器IP和IPH中的相应位的状态来规定的。 同一优先级中的中断申请不止一个时,则有中断优先权排队问题。同一优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,排列如下: 实现定时功能,比较方便的办法是利用单片机内部的定时/计数器。当然也可以采用下面三 种方法: 软件定时:软件定时不占用硬件资源,但占用了CPU时间,降低了CPU的利用率。采用时基电路定时:例如采用555电路,外接必要的元器件(电阻和电容),即可构成硬件定时电路。但在硬件连接好以后,定时值与定时范围不能由软件进行控制和修改,即不可编程。采用可编程芯片定时:这种定时芯片的定时值及定时范围很容易用软件来确定和修改,此种芯片定时功能强,使用灵活。在单片机的定时/计数器不够用时,可以考虑进行扩展。 一、定时/计数器的结构
加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来;一个是TO或T1引脚输入的外部脉冲源。每来一个脉冲计数器加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TFO或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。 ■设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。计数值N乘以机器周期Tcy就是定时时间t。 ■设置为计数器模式时,外部事件计数脉冲由TO或T1引脚输入到计数器。在每个机器周期的S5P2期间采样TO、T1引脚电平。当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1,更新的计数值在下一个机器周期的S3P1期间装入计数器。由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2us。 三、定时/计数器的控制80C51单片机定时/计数器的工作由两个特殊功能寄存器控制。TMOD用于设置其工作方式;TCON用于控制其启动和中断申请。 1、工作方式寄存器TMOD工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于TO,高四位用于T1。其格式如下: TCON的低4位用于控制外部中断,已在前面介绍。TCON的高4位用于控制定时/计数器的启动和中断申请。其格式如下: 方式0为13位计数,由TLO的低5位(高3位未用)和THO的8位组成。TLO的低5位溢出时向THO进位,TH0溢出时,置位TCON中的TFO标志,向CPU发出中断请求。 方式1的计数位数是16位,由TLO作为低8位、THO作为高8位,组成了16位加1计数器。 方式2为自动重装初值的8位计数方式。 方式3只适用于定时/计数器T0,定时器T1处于方式3时相当于TR1=0,停止计数。 以定时器0为例,核心代码如下: void Timer0Init() //定时器0初始化函数 { TMOD|=0x01; // 选择为定时器0模式,工作方式1,仅用TR0方式打开启动 TH0=(65536-1000)/256; // 给定时器赋初值,定时1ms TL0=(65536-1000)%256; // TH0高八位 TL0低八位 ET0=1;//打开定时器0中断允许 EA=1;//打开总中断 TR0=1;//打开定时器0 } void Time0() interrupt 1 //定时器0中断服务函数 { unsigned int x; //计数值 TH0=(65536-1000)/256;//重新装载初值 TL0=(65536-1000)%256; x++; if(x==1000)//1s { x=0; { //{定时器控制程序} } } } 补充说明 中断响应的条件为:1. 中断源有中断请求; 2. 此中断源的中断允许位为1; 3. CPU开中断(EA=1); 以上三条必须同时满足时,CPU才有可能响应中断。 中断服务函数要与中断一一照应外部中断0 —— interrupt 0 外部中断1 —— interrupt 2 定时/计数器0 —— interrupt 1 定时/计数器1 —— interrupt 3 串口中断 —— interrupt 4 |
CopyRight 2018-2019 实验室设备网 版权所有 |