51之中断定时器蜂鸣器_第1页
51之中断定时器蜂鸣器_第2页
51之中断定时器蜂鸣器_第3页
51之中断定时器蜂鸣器_第4页
51之中断定时器蜂鸣器_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、本讲重点猱覽芽*戈第5讲口5.0中断5.1定时器口 5.2蜂鸣器53数码管口 54点阵中断理解中断概念:亘亘正在家中看书;突然电话怜响了,亘豆放F书本,去接电话;和来电话的人交谈i進址4i 15然后放下电话,回来継绞看 税2生詹中的蹦中ar现象豆豆主任务是看书,中断时接电话。电话是随机打来的,中断是随机产生 的;接完电话后,豆豆回去继续看书;再说电话,外部来了电话,电话处理 了这个信之后,电话自动铃响了,这说明电话这个设备处理了部分的信号, 符合 条件,产生了中断请求。而非豆豆让电话响的,或控制电话响的。在电话响之前, 豆豆根本没有处理电话接受到的任何信号, 中断的产生,是电话处理产生的。来电

2、话了,这个中断,会产生电话铃响,这个标志位5.0中断ft負芽科萝./巾斷的特点(1)中断是随机产生的I(2)中断之后,主程序是可恢复的,(引中断是由系統自动处理产生的;(4)每个中断一般都有对应的标志位./中断源*产生中訂的来源.有很參种"如:你正在看书时,电话(电 话铃响了),防耀门门铃响了),电热水壶(水焼幵时的报 警声)0电话、防益门、闹钟、电热水壶等都是中断源,电话 铃响、门铃响、水烧幵报警声等都是中斷请求(标志位)O/中断嵌套和优先级处理:巨豆在看书时,电话响了,懣后豆豆去接电话:接电话时,门铃乂响了,豆豆先把电话放下,去幵门。幵完门后,豆豆继 绞去接电话,接完电话后,豆豆

3、继缜去看书&门和电话是两个 中断源,如果同时发生了中斷请衣 先去幵门,然后接电话:I或者接电话时门铃响了,先开门,然后继纹接电话。豆豆也就是通过电话铃响(标志位),才知道有了个中断;也就是通过电话 铃响(标志位),知道这个中断是电话。如果是门的话,那通过门铃响了,就知 道有个中断产生了,也知道这个中断是门了。我们把能够产生中断的设备称为信号源。在单片机里面,产生中断的可能是 单片机内部的模块,也可能是单片机10 口外部输入的信号。中断响应过程:5,0中断離症芽科芳7#中断的响应过程:豆豆依靠耳朵听到了电话铃响,检测到了相应的中断请求 (中断标志位)0这时豆豆就要响应这个中断;(1)保护

4、现场:进入中断之前.先记性现在看到书的第几贝 了,或把要看的下一页写在旁边的纸上,记下来。(2)中断响应,保护现场之后,如果是电话铃响了,我们就 要去放电话的地方,接电话:如果是门铃响了.我们就要去门 那里,幵门。也就杲说不一样的中断,我们就要在不一样的地 点进行处理。一般而言,毎个中断的地点是固定的I豆豆也知 道地点在哪里,然后就执行栩应的处理操作了即中断掇务) 丿巾断的服务程序:电话铃响后,豆豆去接电话,这就是对电话这个中断进行的 服务操作欄门铃响后,豆豆去开门,这就是对门这个中断进行 的月勝搦作。每个中断服务程仔如何操作,是由程存负編程乘 实现的°5,0 中断理解“中斷”的概念

5、那胖单片机正在执行主程序; 突然某中断源发生中断请求 里片机保护现场,谨行中断响 应彳单片机继缮执行主程序。单片机执行中断服务程序; 执行完服务程序之后,中断返 回;单片机的”中断"过程Cpu正常执行主程序时,突然一个时间点,中断源检测出符合中断条件的信 号,向CPU发生中断请求。CPU#到这种中断请求之后,进行中断响应,执行该 中断的中断服务程序。然后,中断返回,CPU继续执行主程序。中断的作用:5,0中断中断的作用丁 CPU与外部设备井行工作:/能够处理特殊情况;/实现实时处理效果;/实现多道程序分时并行执行1*独立按键和外部中断按键,就是一个很明显的对比。检测独立按键时,我 们

6、需要在主程序里面,重复的检测10 口。而有了外部中断按键,我们就不用反 复的检测扫描10 口了,因为当按键按下去的时候,单片机会产生一个中断告诉 CPU有了中断,定时器可以计定时器的数,CPU可以做CPU的工作。当定时器完 成工作之后,会通过中断告诉 CPU然后再由CPU来处理。同样,像电源掉电、 硬件故障等突发情况,都可以通过中断的方式,告诉 CPU我们的很多系统都要求实时性。“想象一下,一个机床正在飞速运转,这时 有人的手被卷进去了,然后你迅速地通过电脑给单片机发一串指令。如果你的单 片机系统不能实时地处理这个指令,而是每隔一定的时间,去查询下有指令进来了没,那可能指令进来的时候,你的查询

7、时间还没到,所以单片机没执行指令, 直到查询时间到了,这时再去处理,人的手已经掉下来了罢了。”我们知道,电脑是可以同时打开很多个软件的(实时多任务),就是因为有 定时器中断的存在,才实现了这一效果。每隔一定的时间,产生一个中断,然后 CPU就跳转到另一个软件中,执行另一个软件的操作。这就是80C51内核,也就是大家手里51单片机的中断系统结构框图。5.0 中断 8OC51的中斷系统结构pffftrtiWFF.iIE.I1逼I41* <4i.iTFlTi艸Ml驚MC幻的中斷有2个优先级别t高、低优先级能二级中断議套)。 当多个中断同时发主时,先响应高优先级别的,再响应低优先级别. 如果优先

8、级别拒同.则按岡自然优先级来响应中断。最左边是中断源,中间这些开关是中断的各种设置寄存器。51的中断有2个优先级别,用来将每个中断进行分级,如果多个中断同时发生 的话,先处理高级的,再处理低级的中断。(不管它的自然优先级是怎么样的) 如果优先级别相同的中断,就按照自然优先级(也就是系统默认的优先级)来响 应中断。由此,51单片机能够在低级中断里面再嵌套一个高级中断。中断源:5.0中断廉豆芽科芳中断源(8Q5L有斤固定的中断爲8052又增加了Tim巳2) 丿序号皿外諒审験INT由PM2 口引入,低电平或下降沿触发;#序号仏定时器说曙TO中断由TO的计数寄存器THO TLD的值左溢出回0时触友;/

9、序号2:外部中断1rm,由P33 口引入'低电平或下降沿触发;/序号3:定时器说J;器口中断由T1的计数寄呑器ITO TL1的值在溢出回0时触发:丿序号鸟串口中断RLTI串行口中断越串行口在完成1帧字符的接收(RIV发送(TI)时触发: 丿序号勺定时器计数器T2中断(T2S52单片机特有的) 由T1的计数寄存器TmiL2的值在溢出回0时触发;各中断源的自然优先承INTO > TO > INTI > T1 > RI/TI > T251单片机共有5个固定的中断源,分别是外部中断 0、定时器T0中断、外部中 断1、定时器T1中断,串口中断RI/TI。外部中断0,

10、是由IO 口 P3.2输入的信号来产生的,如果外部给 P3.2 个低电 平(电平触发)或下降沿(边沿触发)信号,则单片机就会产生一个外部中断0的信号。-外部中断触发方式: 再有就是,定时器从初值计数到最大值时,定时器会溢出,这是就会产生一个定 时器中断。还有就是,当电脑通过串口给单片机的串口引脚发送一个字符的时候,当单片机的串口模块,接收完了这个字符,就会产生一个中断。串口模块发送完一个字符之后, 也会产生一个中断。每个中断源的自然优先级各中斷源的自然优先级:INTO > TO > INTI > T1 > RI/TI > T21诽JI.1rvI TT111趙件查询

11、nV'I'Rpt刚才讲了,51单片机的中断系统能够通过寄存器设置来决定开启或关断某个中断源,这个 寄存器就是IE。中断允许寄存器IE寄存器IE用来设定各个中斯源的打开或关闭,可位寻址。1茁!-I1 -E:&ETZES-ET1ETO二 FAEACABA9AB我们知道,寄存器就是我们编程序的时候,可以操作了。也就意味着,我们可以通过编程, 来选择开或关哪个中断源了。必须同时满足:1. 总中断EA是开启的2. 中断源开关是开启的中断源才会向 CPU发出中断请求,IE寄存器,是可以位寻址的,也就是说,我们可以通过 sbit,定义它的每个位,并进行位操作,像10 口一样,置1,或

12、清0。还有一个寄存器IP,用来,设置各个中断的优先级别。54中断廉豆普科存匚中断优先级寄存器ip寄存器ip用来设定各个中断源的优先级别.1 HIT ".CtflV - jl >D i fl 1 T> 片前也p t:1 nn !,« .J; »fli .I.Tlri XInl f)rir * lu.!附】灯苗忙IEfl I: 1 I I: '< :. i m i CTlr' i- h .Vi'R _ r 柠 1-."斗 if*接下来,我们就来分析一下,中断的响应过程:5.0中断JS氮芽种芳A中断响应过程一一中断谙求

13、1个机黑周崩=6个状态周期,J个状态周期二2个振荡周期(节拍) “外部m断源采样=对于外部中断0和外部中断X当它们被设为为脉冲魏发方式,贝I CPU在每个机器的S5P2MBf0(第§狀态周期第2节拍)对INTO(或 ;TNT1)采样,当检测到前一周期为高电平、后一周期为低电平时, 由硬件使TCON的圧风回庖置1,采样置位过程由硬件自动完成。“内部中断源置位三80C51中断标志位都集中到TCONDSCON>gii中°定时中断和 串行申斷的中断请求由于都发生在芯片的内部,定时中断可以直 骨去晝位TCONJ TFDfTFl行中断亓心塚士置位SCONfejRI和 TIo内中断

14、不存在采样问題,置位过程是由硬件自动完成。【注意】只有在寄存器IE也 各中断源开关和总中断开裁打开 了.才会置位相应的中断标志位。首先是中断源发出中断请求 ;一般有两种情况:yi.如果是单片机外部输入的信号,那么我们需要对10 口进行采样,判断是否符合中断 条件,然后把该中断相应的中断标志位置1。注意:此采样置位的过程是由硬件自动完成的,而非我们编写程序来实现。如果是单片机内部的某些模块,如定时器模块,串口模块,他们可以通过单片机内部的硬件电路,在满足中断条件时,直接将他们对应的中断标志位置1。1. 夕卜部中断0和外部中断1的控制位和标志位,储存在寄存器TCON的低四位2. 定时器0和定时器1

15、的控制位和标志位,储存在寄存器TCON的高四位。3. 串口的控制位和标志位,储存在寄存器SCO N中。当某中断源判断中断条件成立时,就会将对应的中断标志位置位,也就向CPU进行了 "中断请求”,此过程由硬件自动完成。CPU就是通过查询这些中断标志位,来判断是否由中断产生,以及产生的是什么样的中断。中断源发送完中断请求(即将中断标志位置位)之后,CPU是如何知道这1中断请求的呢?CPU的中断标志位查询。5.0中断IS豆芽苦彩八中断响应过程中断标志位查询1个机器周期=6个狀态周期,1个状态周期=2个振蕩周期一(节柏L 在每个机器周期的S6状态周期,都会由cpu自动查询TCOMnSCON中

16、各中断标志位的状态以确走是否发生呻断请求U 此查恂过程.按黑中断忧先级别对各标志位进行查询,即先查恂 高优先级别后査询低优先级别竹同级别的中断按照经自然优先级" 进行查询.如臬查询到有标志位为"lw ,则表明有中断谙求发生, 则CPU则一般会在下1个机器周期的S瞅态 送行中断响应。以下斟申情况不会尺时响应中断“CPU正在处理一个同级或更高级别的中断请求勺/现行的机器周期不是当前正执行指令的最后一个周期。y当前正行的指令是返回批令(RHTI)或访间IP、圧寄存器的指令,则CPU至少再执行一集指令才应审肌【注意】每个机器周期都会重复it行中断标志位查询,且此作 由硬件自动完成,

17、程序员只需设置相应的中断寄存器即可”我们知道,每1-4个机器周期,单片机就会执行一条指令。 1个机器周期,包括 6个状态周 期。在这些状态周期中,可能某个状态周期完成了取指令、取数据等操作。在每个机器周期的第6个状态周期S6, CPU就会自动查询寄存器 TCON和 SCON中的各中断标志位来确定是 否发生了 “中断请求”,哪个中断源发生了请求。如寄存器TCON中,TCON7F1TR1ITOTROIE1PJfcJllEFBESDac8BtriIED|BAS9BS1:f|T1«l帥 i0疋11屮虧1:V!T1i| 地0:('. T1 ,r 't TO P tl?rlblT

18、OH】斷|iiTfi IB il 啣k停"TO沖数.EE攏屮Mi舉驻中険籾牝,铤牝送中诺标评“戏遇克.-雄皈倒的対刁位載提LIMTO h 厉;时触叼o:irnD-iUL T 旳 xiipxfjim中樹o'- ihnD'l p:i: IMT1>->« III tk HbjWE电叩时越刎 i:fwri屮同0: A IMH屮斷外黑中腫TF1, TFO分别是定时器1和定时器0的中断标志位IE1和IE0就是外部中断1和外部中断0的中断标志位寄存器SCON中!?F 9E 9D 0?3A 班 站位 ift 址StTJN SMuSMl SM2 RFZNjTBa

19、RBfl T1 j R字节地址捕H即衍工 *r=tW»(lf00.方式(*|U9h -1tTA2iihlfX3巾成1和方或5的莠乩妫侑村证位fti討趴跌此图五.串行端口短倒寄屛器SCONTI和RI就是串口模块,分别是发送完1个字符数据的中断标志位,接收完 1个字符数据的中断标志位。CPU会在每个机器周期的 S6状态时,按照中断优先级别对各标志位进行查询。 然后到下个机器周期的 S6状态,再决定要不要中断响应。有以下3种情况比较特殊:1. CPU目前正在处理一个同级或更高级别的中断请求。注意,我们前面讲过,当一个中断,正在被响应时,只有更高级别的中断请求,才可以 达到该响应过程,让 C

20、PU去响应此更高级别的中断请求,低级别的,或同级别的都不能实 现中断嵌套,所以,CPU正在处理一个同级或更高级别的中断请求,执行中断服务程序时, 是不能响应其他中断的。2. 我们知道,我们用 C语言编的程序,会被 Keil编译成各种各样的指令,然后单片机执行这些指令。单片机指令,有单周期的,也有双周期的,还有四周期的。当CPU决定是否进行中断响应时,发现现在所处的机器周期, 并不是当前执行指令的最后一个机器周期, 那它同样不会进行中断响应。3. 还有就是如果执行的指令是 RET,或访问寄存器IE IP的指令,即使已经是指令的最后 一个机器周期了, CPU也会至少再执行一条指令才会响应中断。因为

21、这些指令是跟中断 有关的。所以,操作这些指令时可能会对中断源进行一些操作。【注意】每个机器周期都会重复进行中断标志位査询.且此动作 由硬件自动完成,程序员只需设置相应的中断寄存器即可口以上就是CPU如何查询中断标志位的。5,0中断様铉芽哺就=中断响应过程一一中断响应“从中断请求鴛牛至|車&的中断响应,大概需尊m8个机器用期。中断响应LCALLffi令:PUSH PCj LIMP PG第一个PC是主程序的下一条指令所在的地址.压入堆栈保存起來; 第二个PC是中断入地址跡转到中断入口地址执行指令。扎【1旳地rplfi 咛;IHTO0TSii 出OOOBH1IhfTlO>13H2Hii

22、 .113尬II屮IS0023H4TZMoasan5中断向里表I注意】< IEO TTO > IE1、TF1中断的怖志位 *在中断响应以后,拷入中断般努 程序之甬!田磚件自动清除。于RITI串口中断的标志位,在中断响 应之启,不会由硬件唐瞧*雪要杠 中断朋劳理库中,遊行软件若除cpu对某中断的真正响应,需要38个机器周期。首先,查询到标志位之后,需要等到下一个机器周期才能决定是否响应中断。这就耗去了一个机器周期,进行中断响应,CPU执行LCALL指令,需要2个机器周期,接下来才是对中断进行相应的操作了,这是3个机器周期。如果决定是否响应中断的那个周期是RETI指令的第一个机器周期,

23、RETI需要两个机器周期,则需要再执行一条指令。如果再执行的指令是乘除指令,也就是四周期指令,则需要4个机器周期;如果再执行的指令是乘除指令,也就是四周期指令,则需要4个机器周期;然后再执行LCALL这就是8个机器周期了,当然,如果发生中断请求时,是在某个处理某个中断响应的话, 那就要看中断响应里面的中断服务程序做哪些工作了。所以,中断服务程序里面的时间 不应该太长,否则会影响其他中断的响应。所谓中断响应,就是执行LCALL指令。这条指令,主要实现两个功能第1个是把目前主程序将要执行的下一条指令所在的地址,压入堆栈保存起来。以便从中断返回时,恢复主程序第2个是把中断源对应的入口地址交给CPU,

24、 CPU就会执行这些入口地址处存储的指令。这些地址是固定的,每个中断源都对应一个入口地址,在这些入口地址处可以存放一些指令, 来处理中断。中断响应之后,某些中断标志位,就会自动被清除,是硬件自动完成的但是RI/TI中断标志位,必须我们在程序里面,把这两个位清零才行我们也可以通过查询 RI/TI来判断是接收串口数据产生的中断还是发送串口数据产生的中断。回顾一下:stepl :中断请求由中断源硬件自动完成,我们不用管。step2 : CPU在每个机器周期里面查询中断标志位 有硬件自动完成,我们不用管。step3 :中断响应在判断符合中断响应的条件,进行中断响应时,调用LCALL指令。由硬件自动完成

25、,我们不用管。这时,CPU的程序指针PC,指向的是中断源的入口地址,那么接下来,就会执行中 断源入口地址存放的指令了。5.0 中断QnDOOSNI I心MfC中断响应过程一一中断服务程序【注意】"中断入处的空间太小了.往往往 中断入地址处,放一条跡转指令 .跳转到宣正的申断服务程序所在 的地址"/每款单片机,中斷入口地址是固定 的。/巾断服务程序的地址不确定,编译 器会自动将坤断服务程序的地址H 添加到*断入口地址里面存储的跳 转指令中。addressl是主程序的一条指令所在地址,此时进行了中断响应,PC就会指向中断源入口地址,假设发生了外部中断0,是对外部中断0进行的中断

26、响应,PC就会指向0X0003H,中斯源I0003H 一0TBST-11NT1aoiH2T11 ; 1'aoiBH3nil PPWiC023H4'T2用岀002BH5rh 匚我们可以看一下此地址存放了什么代码?我们发现两个中断源入口地址之间的存储空间是很有限的。 所以,往往我们会在此入口处放一条跳转指令。把中断服务程序放在其他的地方,然后从中断入口处执行指令跳转过去。这是我们的程序在 ROM 里面的存放方式 大家可以看到中断服务程序被放在了 address2 处了 那么我们就要在中断入口处放一条跳转到 address2 的指令 或许,大家比较郁闷,大家写中断的时候,并没有体会到

27、这个过程 那是因为 KEil 帮你完成了这一切 你在程序里面只要加上这个关键字Keil 就知道,这是外部中断 0 的服务程序了、Keil 会自动把此段代码的地址存储在中断入口那里问题:#include <reg52.h>sbit Ledl = P1A0;sbit Led2 = PU1;sbit Led3 = P1A2;sbit Key = P3A2;unsigned char t;void Delay100ms()/12.000MHzunsigned char i, j;i = 195;j = 138;dowhile ( -j) ; while (-i);void main()EA

28、=1; / 中断允许EX0=1; / 开外部中断 0IT0=0; / 低电平触发外部中断Led1 = 1;Led2=1;while(1)Led仁!Led1;让LED闪烁一下void int0() interrupt 0/ 电平触发Delay100ms();XDL郭浩2014-2-13 22:01:19如果 P3.2 经一根杜邦线连到低电平XDLr郭浩2014-2-13 22:01:28 那会有什么现象XDLr郭浩2014-2-13 22:01:40大家试一下,然后分析一下为什么会这样定时器/计数器5-1走时器/计数器棒負芹科产=理解定时器/计数器”的概念生活现象-Y水忿在水龙头下水龙头没关紧水

29、一滴 滴地滴入盆中,每次水滴的丈小都是相同的,一个盆子里 最多 g65536?| 水。计如 根据盆子里"最初的水滴数"和“最终的水滴数"-我们就可以知道滴入了多少水滴,从而实现计数功能。 定时如果滴入两个水滴的时间间隔是固定的,已知的, 那我们就可以用它来定时。(如古代的计时器水漏) 最大计数量 一个水盆是有一定容量的,滴一段时间之后 或滴了很多滴之后,水盆总会满的,达到最犬的水滴数。 溢岀.水滴持续落下,最终有一谪水会让水盆装满,最后 滴水滴满后,就发生了溢岀。与单片机略有不同) 初值二如果水盆里一开始有65526滴水,那么再滴5000 ,水盆就满7 开始水盆里

30、有的永滴蛻就是初值。生迂中的我圭时.计ST坝象溢出,是定时器/计数器的一种普遍现象,由于单片机内部结构的设置,单片机溢出之 后,数会变为o而非最大计数量,这一点与这个水盆是不同的。为何要有初值?定时器常用到初值, 初值设置好了之后, 我们就可以设定经过多长时间会发生溢出, 出时,定时器/计数器就会向cpu发出中断请求。定时器/计数器 一般都要用到它的中断,51有T0和T1,52多了个T2。5-1走时器/计数器林豆芹科萝=单片机定时器/计数器"内部结构4 51单片机有两个15位可编程的定时器/计数器即TO和 T1,可以低为计数器r定时器.波特率发生器 凸2单片 机多了一个T2) 

31、76;由寄存器TMOD和TCON进行设置控制寸/定时器/卄数器的实质是16位的加i计数器由两个8位的 寄存器组成高3位TH1 (TH0),低8位TL1 tTLO),THx TLx就是这两个8位加1计数器的寄存器,我们可以用软件对该寄存器进行读写。 工作原理(以16位定时器/计数器为例)单片机定时器/计数器"工作原理加1计数器.在计数脉冲的作用下,每输人1个脉神计数器 就会加4 即把THO (TH1)和TLO (TL1)计数寄存器组 成一个16位的数,每来1个脉冲.此数就加”:当加到此数为65535,即THO (TH1)和TLO (TL1)寄存 器的毎位都対1时,再来1个脉神,计数器就

32、会溢岀,溢岀使 计数寄存器的值变为了0,并由硬件把TFO (TF1)置1,向 CPU发出中断请求(中断源和中断总开关祓允许时)° 1LDTW 1FDWil W1? Mcih&m r- sTHO、TL0这两个计数寄存器组合成一个16位的二进制数,TH0存放的是高8位、TL0存放的是低8位。每来1个脉冲,TL0会加1 一次。TL0加满之后,就会像 TH0进一位,直 至TH0也加到最大值。此时,整个二进制的16位全部是1,对应的十进制数是 65535 (单片机从0开始计数),此时,如果再来一个计数脉冲,TH0,TL0都会溢出,两个都变成 0。这点不难理解:65535的二进制数位:1

33、111111111111111,16个1,如果你再给它加 1 的话,他就会变成 10000000000000000,1个1加16个0 了,而单片机这两个寄存器最多 存16个位,所以第一个被进上去的位,就会被舍弃,这就是溢出后的结果。溢出之后,由硬件把定时器T0的中断标志位TF0置1。此时如果定时器中断开关和中断总开关都在寄存器IE里面被允许了,就会向 CPU发出中断请求,产生中断,告诉CPU,它定时/计数到溢出了。根据初值,就可以判断,力口1计数器总共计了多少数。单片机“定时器/计数器”概念:5.1走时器/计数器編竄芽科»单片机”定时器/计数器"相关概念N分频器;每输人N个

34、时钟脉冲就输出1个脉冲的模块° 计数脉神来源:(1)定时器:系统时钟振荡器的12分频; 计数器-引脚输入的外部脉冲信号(TO引脚为P3.4, T1引脚为P3.5),最高频率为时钟振荡周期的1/24. 最大计数值(溢岀値)=由计数寄存器的位数来决定7可选 择不同的模式来确定计数器的位数*计数器由2个8位寄存器 组成,可配置成组合的16位计数器.或组合的13位计数器, 或两个独立的8位计数誥。溢岀值为2人NJ, N为位数。 初值:在定时器幵始每个周期的定时/计数时-计数寄存誥 THO (TH1)和TLO(TL1)披麻的值就杲初值。如果被配貫 为自动重装的定时器,则可以在溢岀时由硬件自动把

35、初值赋 如 非自动童装时,则需要在中断皴务程序中软件赋初值“计数脉冲来源决定了这个加1计数器是用作定时器还是计数器。系统时钟振荡器一般由晶振产生振荡信号,也就是单片机最小系统的那个晶振。 如果晶振为12MHz, TLO 7M0 TTQ则系统时钟振荡器就会产生 12MHz的脉冲信号,经过12分频,就产生了 1Mhz的脉冲 信号,此时两个脉冲信号之间的时间间隔是固定的已知的,便可以把这个加1计数器当成定时器来用了。如果计数脉冲是从外部引脚输入的,则当成计数器来用了。 因为单片机是在每个机器周期才会检测一次10 口的电平状态,当第一次检测到高电平,第二次检测到低电平时,就认 为外部输入了一个脉冲信号

36、,所以,最快也要两个机器周期才能检测到1个脉冲信号,故,外部脉冲信号的最高频率为时钟振荡周期的1/24。定时器由THx和TLx独立使用或组合而成,可以作为两个独立的8位计数器,可以把THx作为高8位,TLx作为低8位,组成一个16位的计数器,也可以把 THx作为高8位,把 TLx的低5位作为低5位,组成1个13位的计数器。所以,他的最大计数值跟他的位数有 关。又因为单片机从零开始计数,所以,计数器的最大计数值为22-1。当THx和TLx组合的数等于2AN-1时,再来1个计数脉冲,计数器就会溢出。THx和TLx只是8位的加1计数器,所以他在每个脉冲输入时, 只会把他的值进行加 1, 所以,我们可

37、以先给这两个计数寄存器赋一个值,即初值,那么定时器就会在这个初值上开始加1。有自动重装的,由硬件电路实现,无需软件操作;非自动重装的,则需要用软件 进行赋值来重装。(配上页ppt)5A走时器/计数器滋負芽商"定时器/计数器”工作方式寄存器RMODTMODffi来确定定时器的工作方式及功能选择.不龍位寻址. 在单片机复位时各位全部被清6?IJT1GATE LlPM TO GATE t |: MiHl MV<N)mKI ,1;' |L&u Hjti14k0FSjYTiiLHSHSlZIKMZGATE 般我们把它赋 0,如果赋1的话,则必须是在INT脚,也就是外部中断

38、引脚为高 电平的时候,定时器/计数器才会正常工作。 C/T,这个位相当于开关,来控制定时器计数脉 冲来源。为0时,系统会把计数脉冲来源切换到系统时钟振荡器经12分频器后的输出;置为1,系统会把计数脉冲来源切换到T0引脚处。而M1M0则用来配置定时器的工作模式,后面我们会挨个介绍它的各个工作模式。5,1走时器/计数器編竄芽科办、'隹时器/计数器”工作状态控制寄存器TCONTCON用来控制定时器的启动*停止,标志定时器溢出和中 断情机$可以位寻址,在单片机复位时各位全部被清0.TCOMTF1TRITFOTR0履 1CPE0叮h“OFBESOSCffiM»fiflTCO N是用来控

39、制定时器的启动、停止的。在这里,我们强调一下,只要有计数脉冲信号,定时器一旦被启动,就会一直定时数。即使是在 CPU响应中断,执行中断服务程序时,定时器依然在正常计数,除非,定时 器被停止了。 定时器和CPU是两个独立的模块,正常运行时,是并行的,互不干扰。接上文,我们来看一下定时器的几种工作模式:工作模式0 :51嗣器/计数器"仔'隹时器/计数器再工作模式0由TL0ffft5S和TH0的全部B位共同构成一个13包的定时跆计刼器;定时器/计数器启动后定时期计数际冲吓数加到TLO上从预先设墨的初值开抬 累加7当TLCttS后向TH0进寄存器计裔溢出:St出时,危时器丿计埶器H件

40、会自动地艳位的富存署值着中斷様记TFO碱覆 件自sijgi;向cpu岌出中断请求(中撕开关打开时),cpu执行中斷麻劳程库, TFOffi件自动莆进行相关换作(如嘉錐续,需要软件更新对寄存器賦初值)«-1亍 <!'.DO iB4 Pft-Pg _ nowaTFOf«lragiRpiTL0的低5位每计满一次,就会向 TH0进一次位,TL0的高3位完全不起任何作用 了,也不会加1 了。这样就构成了一个13位的定时器/计数器,初值需要软件重装。工作模式1 :TLO和THO会组成1个16位的定时器/计数器。5-1走时器/计数器痒竄芹科乡匚'隹时器/计数器”工作

41、模式1由TLO的全部吕竝和THD的全番8位共同构成一个"检的左时器/计数器;定时器N+数器启动后走时或计救脉冲个数加到TLO上(从播先设畫的初值开贻 累加;当TLCi+ffi后向THD进彳西直到:US悝寄存盅计鬲镒出;镒出时,左时器/计数器融件会自动地把1合位的春徉器值看6中断标记TFQ械砸 件自shSi;向ctu发出中tfi青求(咔斷开关杠开时;cpuft行中断腫务程帛, TFOlta#自动青D,进行相关燥作(如需维缜,件重朝对寄存器赋初值)同样,我们可以中断服务程序里面,做我们定时想做的事情,如果需要一直定时, 则需要软件重装初值。工作模式2 :5-1定时器/计数器"定

42、时器/计数器”工作模式2由TLO的全38构成一个8位9110自动璽装的定时器计数器质蛊的初值存储 住寄存器THO*、定时器/计数叢肓动后走时戒计埶脉冲个數加更1TL0上,儿倾先设舌的机值开始 累加;亶到W位寄存器TLO计彌爲出。釜出后中斷请求的过程与複式0、对目同。 该模式走时器溢出后,由碇件自动将THO的值赋给丁LO,进行自动重装初 值,无雪软件重装初值。TWTM 啊片f nTROINTi-此时TL0会作为一个初值自动重装的定时器/计数器,而TH0则会存放预置的初值。*为什么要由硬件自动重装呢?我们知道从中断源发出中断请求到CPU响应中断,是需要 38个机器周期的。而再到执行中断服务程序,又

43、要几个机器周期,等于说溢出后,TLO为00000000,而到你在中断服务程序里面软件重装初值时, TL0可能已经加到00000008 (实际是00001000) 了,这时,定时器每个周期记的数,不是100,而是100+8。所以,在中断服务程序里面软件重装初值,会导致定时器的计数存在一定的误差。而自动重装初值的模式下,一旦TL0计满溢出,使得定时器中断标志位TF0置1,则会由硬件自动把 TH0的值装入TL0,然后继续定时/计数。此时,不需要进入中断服务程 序进行软件重装初值,就由硬件完成了上述过程5.1走时器/计数器 工作模式3 (T0有,T1木有):"'定时器/计数器&quo

44、t;工作模云3仅it用TO,因为T1没有模式弘由TL0的全部嘔THCI的全部好僅构咸两牛 独豈的超隹圭时器/计数器。定时器计数器启动后,定时或计數脉冲數加到TLO上从孤先设置的初值开始 累加;克到呂位寄存21TL0计藕莖団。同栏,加到THO上,从预先设畫的初值开 抽累加;盲到貂立寄存器TWH+蒜溢出。益出后申断清求的泄程与模式0、対目同, 如需继续定时"+数,初值需聲在中断腮号程序中重装初值亠此时,T0会被分成两个独立 8位定时器/计数器来用,且 TH0会占用T1的TR1、TF1, 不会占用T1的TMOD。此时T1已经不能再工作于普通的中断方式了, 只能是作为波特 率发生器,把溢出的

45、信号送给串口DDD7TLO中斷S»求拴制高电T- f 1述GATE据荷GATEIN'Rii时:汀il垃需我们来总结一下,“定时器/计数器”的使用流程:5,1走时器/计数器"定时器/计数器”的使用流程1.设叠定时器/计数器的工作模式寄存器TMOD, 2x装入预置数到THO (TH1) JDTLO (TL1)中, 如杲是独立的两个8位计数寄存器,THx=Tbc=256-N; 如果星组合的,1>1)(=(2"11氓"2人门6 TLx=C2n-nt)%2nO;n为组合形成的总位数,N为定时/计数初数,nO为TL冥的位数。3. 如巢使用中断方式,则壽要在寄存器IE中开定时器/计数 器的中斷和中断总开关匚4. 在TCON寄存器中启动定时誥/计数g:TRO/TRl = l;5. 如果使用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论