当前位置:首页 > 公众号精选 > 电源系统设计
[导读]从定时器开始说中断什么叫中断?这个对于刚进入MCU界的人来说是一个难以了解的问题,因为我第一次学单片机的时候就不完全不了解什么叫中断。后来慢慢来知道原来中断是单片机运行到一半突然飞到某个地方运行某些东西运行后又飞回来而已。后来学着学着就了解到中断的意义了,不过对于第一次接触单片机...

定时器开始说中断什么叫中断?这个对于刚进入MCU界的人来说是一个难以了解的问题,因为我第一次学单片机的时候就不完全不了解什么叫中断。后来慢慢来知道原来中断是单片机运行到一半突然飞到某个地方运行某些东西运行后又飞回来而已。

后来学着学着就了解到中断的意义了,不过对于第一次接触单片机的人来说,还是很难解说的清楚的。
所以这里我做个比喻吧。假设你客厅的电话来电时,有铃声和闪光提示,而你在房间看书,那么有电话来的时候,你听到铃声,然后放下手上的书,并用书签记录你的页数,再出去听电话。听完后,回到房间,从书签标记的位置继续看你的书。
OK,分析上面的几个动作,电话响并被你听到,那是中断来了;你用书签标记位置,那是现场保护;听电话,就是执行中断咯;听完电话,你要从你刚才标记的地方继续看书,那就是中断执行完毕后回到原中断处继续执行程序。这个就是中断的过程了。

假设没有了中断的话,你会如何?你会用扫描法:电话不会响铃了,只有闪光,但你必须在房间看书,那你只能每看几段,就跑出去看看是否有电话到,如果没有,就跑回去看书,如果有了,那你就听电话吧。很明显,扫描法效率非常低,因为你每看一会书就得花时间看看电话的闪光以判断是否有电话的到来,这样你看书的效率就大大减低了。而且扫描法还有个最大的缺点,就是中断丢失,试想如果你扫描的间隔过大(就是看很久书才去看一下电话),那你极有可能丢了几个重要的来电。
其实上面的比喻,正能很好地表现中断的作用——其实中断就是为了处理突发事件。
对于单片机来说,突发的事情实在太多了,例如用户对单片机输入数据,按键,那都是单片机本身无法估计的事情。外来数据的突然进入,也属于突发事件。这些外部来的突发信号,一般就由单片机的外部中断来处理。外部中断其实就是一个管脚的状态改变引起的中断,在之后会说。
这里先介绍定时器和定时器中断:在测量控制系统中,常常需要实时时钟,以实现定时控制、定时测量或定时中断等。也常需要计数器以实现对外部事件的计数。MCS-51单片机中有两个(增强型有三个)十六位的定时计数器T0,T1,简称定时器0和定时器1,两者均为可编程定时计数器。
——以上P话抄自《单片微型计算机与接口技术》94页第一段-_-#!!!!!
其实你问清楚什么叫定时器,我真的不知道用什么言语来说。刚学的时候,听过这样一句话“定时器是单片机上的宝贵资源”,当时不了解,为什么这个资源是宝贵的呢??后来才慢慢知道定时器的伟大所在。当然这个是需要一定的时间来领悟的咯,在这里你还是踏踏实实地往下看吧:)
一开始我就说了,看本教材的时候你手上需要至少一本单片机的基础书,什么书随便买本就是了,反正现在的单片机书啊,都是你抄我我抄你的了,都一个样,最重要的还是例子吧。拿起你的书看看单片机的中断寄存器和定时器寄存器吧,咱们要开始写程序咯,时间是不等人D~~~~
单片机方式0是13位的,从来就没用过,有16位不用你用13位?真浪费也~~~
然后是计算装入值,16位啊,就是16位2进制,2的16次方,就是65536了。16位定时器就是从某个所谓的装入值开始自加,加到65536就计满,如果你允许定时器中断,那就有中断来临。所以16位方式装入值的计算很简单:65536-你要计算的脉冲数=装入值
但我们一般是要定时时间的,而不是单单计多少个脉冲,所以你要计算的脉冲数要转化为时间,跟你说,一个脉冲的时间就是一个机器周期,51的机器周期就是12/晶振值。
如果你的晶振是12M那么这样一除就是1US咯。1US整数,算什么都好算,所以你现在知道为什么这么多12M,24M的晶振买了吧,都是为51准备的咯。

#i nclude "reg51.h"void initTimer(void){TMOD=0x1;TH0=0xd8;TL0=0xf0;}void timer0(void) interrupt 1{TH0=0xd8;TL0=0xf0;//add your code here.}void main(void){initTimer();TR0=1;ET0=1;EA=1;while(1);}
上面的代码是12M晶振下定时10000US的程序,也就是10MS发生一次中断。initTimer()是初始化函数,设置定时值和中断的。
10000US在12M晶振下就是100000个机器周期了,65536-100000=55536=D8F0(十六进制),所以上面就是TH0=0xd8;TL0=0xf0;void timer0(void) interrupt 1就是定时器0中断函数,我们不需要理会汇编的中断先,只需要知道当中断来临的时候,程序就自动跳到timer0(void)这个函数运行了,运行完后就会回到原来中断处继续执行原先的程序。
interrupt是C51中的关键字,后面跟有interrupt的函数都是中断函数,那么对应哪个中断呢?请大家参考:一开始为大家介绍的 Keil Software –Cx51 编译器用户手册 中文完整版,(名字太长了,以后叫KEIL手册)的第125页。
中断号 中断地址

0 0003H1 000BH2 0013H3 001BH4 0023H5 002BH6 0033H7 003BH8 0043H9 004BH10 0053H11 005BH12 0063H13 006BH14 0073H15 007BH16 0083H17 008BH18 0093H19 009BH20 00A3H21 00ABH22 00B3H23 00BBH24 00C3H25 00CBH26 00D3H27 00DBH28 00E3H29 00EBH30 00F3H31 00FBH
看到了吧,中断号就是对应中断进入地址的,至于什么是中断进入地址?那就是发生某个中断的时候单片机自动跳进的一个地址段了.
对于定时器0来说,就是000BH,所以对应中断号1。其他中断地址看看书就知道了。由上面的表可以看出,KEILC支持32个中断,不过到现在为止,我还没看到过有51单片机有32个中断的:)
好了,进入调试实践中了,把上面的代码敲进去吧,又或者直接下载我这个编译好的工程:timer0
进入工程后,你需要设置点东西:Debug Information是调试信息,你选择这个东西,才可以在C语言上进行仿真(不管是软还是硬仿真),否则你的仿真环境是汇编的!
软仿真设置:Go till main()就是在仿真的时候直接跳到MAIN函数上。如果没有选,那就由0地址开始运行。这里说个概念,在C51中,mian()函数并不代表0地址的,要知道,keilc在一开始的时候是需要经过比较多的初始化,例如清空RAM内容,设置堆栈等东西,这些都是不需要你做的,你的用户程序也不包括这些,做完这些初始化后,KEIL才自动跳到你的mian进行处理.
软件仿真是可以选晶振的,我们选的12M。下面的这些东西你就按图中的来选吧,具体内容以后再说。
如果编译成功的话,那么我们就开始第一次的软件仿真咯:上面的是已经进入仿真状态的了,因为我们选择了Debug Information所以可以在C下面调试,也因为选择了Go till main()我们可以看到一开始就有个箭头指着main()的第一句话。而程序旁深色的东东,也就是我圈着的东西,就是有效代码段,程序只会在那里跑,也就是那个黄色箭头只会在那个区域跑。
END
来源:EDN电子技术设计版权归原作者所有,如有侵权,请联系删除。
电源系统设计

扫描二维码,关注更多精彩内容

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

Holtek新推出BS67F2432具备触控按键、高精准度HIRC与LCD驱动器Flash MCU。主要特色为内建高精准度4MHz HIRC振荡电路、8路触控按键及最大支持4COM×15SEG LCD驱动器。适用于触控接...

关键字: MCU LCD驱动器 定时器

Holtek持续扩展Touch A/D Flash MCU产品,新增系列成员BS86C12CA,延续优良抗干扰特性,提供丰富的定时器资源并支持LXT振荡器。引脚与BS86C08C及BS86D12C相容,具高性价比,适合需...

关键字: MCU LXT振荡器 定时器

采用MCU(微控制器单元)模块实现定时器的设计是通过利用MCU内部的定时器/计数器资源来实现的。定时器是MCU中的一个重要功能模块,它可以在特定的时间间隔内执行特定的操作,如产生中断、更新定时器值、触发其他设备等。

关键字: mcu模块 定时器

单片机的外设是指与单片机核心处理部分相连的附加硬件模块,它们能够扩展单片机的功能和能力。这些外设包括各种模块和接口,用于处理特定的任务或实现特定的功能。

关键字: 单片机 定时器

PIC单片机是基于RISC系统结构的单片机,最初的设计是支持PDP(编程数据处理器)计算机。大量的操作可以用来控制外围设备。PIC单片机比微控制器具有更快的程序执行能力。它是由微芯片技术公司于1889年发明的,是一种8位...

关键字: PIC单片机 定时器 中断

外部输入、输出继电器、内部继电器、定时器、计数器等器件的接点可多次重复使用,无需用复杂的程序结构来减少接点的使用次数。

关键字: plc编程 定时器 计数器

单片机可以通过“定时/计数模式选择位C/T”令定时/计数器工作于定时或计数模式下,也可通过“工作方式选择位M1M0”设定其工作方式。C/T和M1M0等与定时/计数器有关的位在寄存器TCON或TMOD中,见表4-8和表4-...

关键字: 寄存器 计数器 定时器

在家电产品和工业应用系统中,定时和计数是两种常用的功能,如:微波炉加热计时和流水线上产品数目统计等。MCS-51单片机内部集成的两个可编程定时/计数器T0和T1使用灵活、方便,在仪器仪表等工业产品中应用广泛。

关键字: 计数器 定时器 单片机

TMOD 的地址是 89H ,它不能位寻址 ,它里面的内容被称为方式字,设置时一次写入,其各位的定义如图 6.2 所示。高 4 位用于定时器 T1 ,低 4 位用于定时器 T0 。

关键字: 定时器 计数器 单片机

单片机定时器其实跟我们平时常说的计数器,是同一个电子元件,只不过计数器记录的是单片机外部情况,所接收的也是外部脉冲,而定时器则是由单片机自身提供的一个非常稳定的计数器,这个稳定的计数器就是单片机上连接的晶振部件。

关键字: 定时器 计数器 单片机
关闭
关闭