历史上的今天
返回首页

历史上的今天

今天是:2024年12月19日(星期四)

正在发生

2018年12月19日 | (C51学习四)外部中断和定时器中断

2018-12-19 来源:eefocus

1.什么是中断


中断就是指CPU正在执行一项任务A,然后突然停止任务A去执行任务B,执行完任务B再回来继续执行任务A的过程。


例如:你正在看电视,然后电话响了,你就停止看电视,跑去接电话,接完电话后由回来继续看电视。这个过程叫中断。


中断跟硬件有关。可以说是硬件来让单片机中断。


2.中断有什么用 


1.中断能让CPU同时执行多项任务,例如CPU在执行流水灯程序,就无法执行 按下按键时,蜂鸣器发声了。


2.当然上面的例子可以用软件轮询检擦案件是否按下来实现,但这样就消耗了CPU一部分资源来轮询检测 按键是否有按下了,所以中断的另一个优点就是


   节省CPU资源

3.双重功能的P3引脚



由最小系统板的原理图可知,P3.0~P3.7的引脚对应着RXD,TXD,INTO,INT1,T0,T1等,说明P3引脚既是 I/O口,由有别的功能,这个功能就是中断功能。


4.8051中断体系


8051的单片机有5个中断源,2个优先级


由上图可知,INT0是通过引脚P3.2,INI1时通过引脚P3.3,定时器T0和T1是分别通过引脚P3.4和P3.5的



中断源:INT0(外部中断0),INT1(外部中断1),T0(定时器0),T1(定时器1),RXD和TXD(同属串口中断)


中断相关的特殊寄存器:


(1)中断允许控制寄存器(IE)--------控制各中断的开放和屏蔽


(2)定时器/计数器控制寄存器(TCON)-------定时器和外部中断的控制


(3)串行口控制寄存器(SCON)-------串行中断的控制


(4)中断优先级控制寄存器(IP)-------设置各中断的优先级



各寄存器的控制范围如下图:

从上图可看出从中断源产生请求到请求进入CPU的过程:


以INT0为例,INT0产生中断源,经过TCON寄存器中的IT0为选择是下边沿触发的还是低电平触发的中断请求(当然IT0是程序人工设置的),当中断请求到达IE0的时候,


IE0会被硬件置1(当CPU响应此中断请求时,IE0被硬件置0),然后就到 IE寄存器的地方了,EX0是外部中断INT0的开关,而 EA 是所有中断的总开关,这都由 IE寄存器


控制,最后经过 IP寄存器 设置优先级,这个一般比较少用,默认的优先级为,INT0 > T0 > INT1 > T1 >串口中断。最后把中断请求传给CPU。


5.中断特寄存器


TCON寄存器

IE寄存器


EA:中断的总开关,EA=1才能允许中断传给CPU


ES:串行口中断开关


ET1:定时器1中断开关


EX1:外部中断1开关


ET0:定时器0中断开关


EX0:外部中断0开关


IP优先级寄存器(对应为设置成1说明优先级设置成高,8051只有高低两种优先级)


6.中断的优先级


8051只有高低两种优先级,默认下优先级从高到低:INT0 > T0 > INT1 > T1 > 串行中断。


1.高优先级的中断可以打断低优先级的中断。


2.正在响应的中断,不能被同级或者低级的中断打断。


3.同时发生几个中断,先响应优先级高的中断



7.中断服务程序的编写


中断服务程序就是中断发生后,CPU去执行的函数。


1.中断服务函数没有返回值


2.中断服务函数不能传入参数



例如:


void  函数名 (void)  interrupt  x  using  y


{




}


x 范围为0~4,分别代表5个中断源,例如外部中断INT0就是0,T0就是1,INT1就是2,T1就是3,串行中断就是4


y 的范围为0~3,分别表示4组工作寄存器,不写就用0. 不写也可以



8.外部中断实现代码



#include

sbit LED=P1^0;

void main()

{

IT0=0;  //中断触发方式为低电平触发,IT0=1则为下边沿触发

EX0=1;  //打开外部中断0

EA=1;    //打开中断总开关

while(1)

{

LED=1;   //在没有中断发生时,LED关闭

}

}

 

void INTERR(void) interrupt 0

{

LED=0;//有中断发生时,LED亮起

}

把开发板的P3.2用杜邦线接到GND上,就会触发中断,发现LED亮起来了。(为什么是P3.2?因为由最上面的原理图可知道INT0的引脚是P3.2)


9.定时器/计数器中断工作原理


1.由最上面的最小系统原理图可以看出,定时器T0和T1分别对应的引脚是P3.4和P3.5


2.定时器/计数器 的计数脉冲来源可以有两个,一个是芯片内部晶振振荡器输出脉冲12分频后的脉冲,一个是从外部接入的外部脉冲



3.TLx和THx寄存器,x=0,1。


以TL0和TH0为例,TL0和TH0 都是8位寄存器(8051的寄存器都是8位),所以TL0和TH0形成高八位和低八位寄存器,用于计数,一共16位。


2^16=65536,所以 TL0和TH0加一起最大能计数的值是0~65536,一共65536.


4.定时器/计数器的两个寄存器:TCON和TMOD,其中TCON用于开启定时器/计数器中断,TMOD用于设置定时器/计数器的工作方式(TCON上面 已经说过了)


TMOD寄存器:

(由图:低八位为定时器T0,高八位为定时器T1)


GATE:门控制。


当GATE=1:INTx引脚为高电平且TRx 要同时为1,定时器Tx才启动。


当GATE=0:只要TRx =1,定时器Tx就启动,不用理会INTx引脚的电平高低。



C/T:决定是使用 定时功能,还是 计数功能


当C/T=0:定时功能。加1计数器对芯片晶振12分频的脉冲计数,一个脉冲过来,就加一,直到 TFx 加满了溢出。(TFx在TCON寄存器中)

当C/T=1:计数功能。加1计数器对来自输入引脚T0(P3.4)或T1(P3.5)的外部脉冲进行计数,一个脉冲加一,直到TFx加满溢出。




M1和M0:工作方式选择位



M0 M1 工作方式 功能说明

0 0 方式0 13位定时器/计数器,最大计数为2^13 = 8192

0 1 方式1 16位定时器/计数器,最大计数为2^16 = 65536

1 0 方式2 自动重载8位定时器/计数器,最大计数为 2^8 = 256

1 1 方式3 T0分为2个独立的8位独立计数器,T1停止工作



10.定时器/计数器定时数值的计算


例:我要定时10ms。晶振频率是12M,工作模式在方式1


f = 12M/12 =1M   (因为要12分频),也就是说 1秒 1000000个机器周期,10ms有10000个机器周期。


65536 - 10000 = 55536 ,意思是 计数器从65536 一直减到 55536 所用的时间就是10ms。


55536的十六进制是0xD8F0


所以设置 TH0 = 0XD8,TL0=0XF0


下面给出代码


或者直接下载一个C51定时器计算器:


11.定时器/计数器代码



#include

sbit LED0=P1^0;

unsigned char i;

 

void main()

{

TMOD=0X01;  //设置使用定时器0,16位的定时/计数寄存器

TL0=0xD8;    //低八位赋初值

TH0=0XF0;    //高八位赋初值

ET0=1;          //开启定时器0中断

TR0=1;         //运行定时器0

EA=1;          //开启中断总开关

while(1);

}

 

void Delay(void) interrupt 1 using 0

{

i++;

TR0=0;           //进入中断函数时,关闭定时器

TL0=0XD8;    //重新赋初值

TH0=0XF0;

if(i==20)        //因为10ms一次处罚看不出明显结果,所以让20次触发才让灯变一次

{

LED0=~LED0;

}

TR0=1;     //重新开启定时器

}

推荐阅读

史海拾趣

振华(CEC)公司的发展小趣事

随着企业规模的不断扩大和市场竞争的加剧,振华意识到单纯的自我发展已经难以满足企业的长远发展需求。因此,公司开始积极探索并购与资源整合的道路。通过并购具有技术优势和市场潜力的企业,振华不仅获得了更多的技术资源和市场份额,还实现了产业链的延伸和拓展。同时,公司还注重内部资源的整合和优化,提高资源的利用效率和管理水平。

Antenna Factor公司的发展小趣事

为了进一步扩大市场份额,Antenna Factor公司积极寻求与各行各业的合作伙伴建立合作关系。他们与多家通信设备制造商、电信运营商以及互联网企业签订了战略合作协议,共同推动无线通信技术的发展和应用。这些合作不仅为公司带来了更多的商业机会,也提升了其在行业中的影响力。

Custom Mmic Design Services Inc公司的发展小趣事

Custom Mmic Design Services Inc(以下简称CMDS)在成立的初期,就致力于开发高性能的微波单片集成电路(MMIC)。当时,市场上对于高频、低功耗的MMIC需求日益增长,但现有产品往往难以满足特定应用的性能要求。CMDS团队通过深入研究,成功开发出了一款新型MMIC,其性能在行业内处于领先地位,迅速获得了客户的认可。这一技术突破不仅为CMDS带来了可观的订单,也使其在微波集成电路领域确立了领先地位。

Everspin Technologies公司的发展小趣事

Everspin一直致力于MRAM技术的创新和发展。其中,自旋转移力矩MRAM(STT-MRAM)是该公司的重要技术之一。Everspin在平面内和垂直磁隧道结(MTJ)STT-MRAM位单元的开发方面取得了显著成果,并积累了超过600项有效专利和应用的知识产权组合。这些技术的创新和专利的积累,使得Everspin在MRAM市场中保持了领先地位。

Hirosugi-Keiki公司的发展小趣事

在寻求更广泛的市场应用和技术合作方面,Everspin与Quicklogic Corporation签订了分包协议。根据协议,Quicklogic将其部分开发服务分包给Everspin,共同推进战略辐射加固现场可编程门阵列原型项目的开发。这一合作不仅展示了Everspin在电子行业中的技术实力和市场影响力,也为其未来的发展开辟了新的道路。

以上五个故事概述了Everspin Technologies公司在电子行业中发展起来的关键历程和成就。这些故事展示了Everspin在MRAM技术领域的领先地位、创新能力和市场应用方面的成功。

Astema公司的发展小趣事

Astema公司自创立之初,就专注于研发创新的电子技术。公司投入大量资源于研发部门,不断推出具有竞争力的新产品。其中,一款具有高效能、低功耗特点的芯片产品,在市场上获得了巨大成功,为公司带来了可观的收入。这一成功促使Astema在行业内建立了良好的声誉,吸引了更多的客户和合作伙伴。

问答坊 | AI 解惑

labview教材 (word格式)

labview教材 (word格式) …

查看全部问答>

扫频仪校正问题,请高手解答!

BT3C扫频仪校正扫频信号时,得不到矩形的波形。相应的设置为:全扫,频标50M,衰减为0,观测到的扫频信号中间有个突起的波峰,两边有一些小突起,然后最边上有一小段平线。 按理应该看到的是基本是一个矩形,可是为什么得不到呢?应该如何调整,还 ...…

查看全部问答>

了解一下AATI 原厂的手机产品应用框图!

AnalogicTech offers a complete portfolio of products for smartphones and other handheld equipment to fully optimize available energy, minimize losses, and prolong battery life.   For Li-ion polymer batteries, linear & ...…

查看全部问答>

高速串行接口的编码技术(8B10B)

高速串行接口的编码技术(8B10B)…

查看全部问答>

LED驱动电源设计考量--teleda

LED由于环保、寿命长、光电效率高等众多优点,近年来在各行业应用得以快速发展,LED的驱动电源成了关注热点,理论上,LED的使用寿命在10万小时以上,但在实际应用过程中,由于驱动电源的设计及驱动方式选择不当,使LED极易损坏.随着LED的应用日益广泛,LED ...…

查看全部问答>

windows mobile 6中MessageBox.Show()调用的参数问题!

我用的是windows mobile 6的系统,但是调用MessageBox这个函数却无法使用后面两个参数即:MessageBoxButtons,MessageBoxIcon. 程序中也无法包含System.Windows.Forms.MessageButtons..这个命名空间。 但是我的系统里其他的程序(windows mobile ...…

查看全部问答>

高分求教驱动问题(如牵涉到技术核心可以有偿付款)

大家好,我最近在帮一个朋友写一鼠标过滤驱动,需要拦截鼠标的按键,以及按下按键时候的鼠标坐标。这样才可以把鼠标的所有动作给回放出来。 现在碰到的问题是,如何在不需要应用程序作为辅助的情况下面,直接在驱动程序中就得到鼠标的坐标。(现在 ...…

查看全部问答>

关于win CE用CAB打包问题

我用CAB打包后,出的错误Log文件的内容是 “Error: Section [SourceDisksFiles] - file D:\\Program Files\\HelloCE\\HelloCE\\bin\\Debug\\HelloCE.exe cannot have a drive or pathname” 请问是什么原因?谢谢…

查看全部问答>

如何构建一个IRP命令使U盘弹出?

如何构建一个IRP命令使U盘弹出? 我想在U盘已经插入电脑上的情况下,构建一个IRP命令将U盘弹出,但不知道怎么做? 向大家请教…

查看全部问答>

pda设备号

请问各位大侠,我用vc2005做的windows mobile 下的软件,想做个简单的加密,请问该如何获得设备的一个唯一的号呢?…

查看全部问答>