




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1秒表计时秒表计时2秒表通常有6位数字,前两位数字代表分钟,中间两位代表秒钟,最后两位则是更小的计时单位1/100秒。当计时启动后,1/100秒位的两位数字在1秒内飞快的由00增加到99。秒表内部的电路需要有较高的精度才能准确地以1/100秒为间隔更新显示数字。虽说如此,这个任务对于单片机来说却是小菜一碟。7.1 定时与计数定时与计数7.1.1 什么是定时?什么是定时?3设定加热一只鸡的时间为15分钟(900s),启动后微波炉开始倒计时,并在显示屏上显示剩余时间。图示当前剩余时间为5分45秒(345s)。单片机只需要每过1s 更新一次显示时间,当更新显示900次(900s)后就让微波炉停止加热
2、即可。所以定时过程可视为单片机计算单位时间(可以是1s、1ms、1s)的个数,当计时完成后,把单位时间乘以个数就得到了定时的时间长度。7.1.2 什么是计数?什么是计数?4计数就是计算事件的发生次数。霍尔开关每当车轮转过一圈时磁铁接近一次霍尔开关,于是就会输出一个脉冲。如果把这个脉冲输入单片机,单片机可以在每次脉冲到来时计一个数,假设60秒内单片机的计数值为n,于是车轮每转过一圈的时间,即脉冲的周期为:60Tn如果车轮的半径为r,于是车轮的周长为C=2r,得自行车的行驶速度为:226060CrrnVTn7.1.3 单片机的单片机的Timer5AT89S51单片机有两个TimerTimer 0和
3、Timer 1。当Timer工作于定时功能下时,模拟开关打到T位置上,Timer计数电路计算的是单位时间脉冲。单位时间脉冲的周期与单片机的机器周期相等,如果晶振的频率是12MHz,则1个机器周期=1s,于是单位时间脉冲的周期为1s。也就是说,晶振频率=12MHz,Timer计数电路每过1s计数值增加1。所以,在定时结束时Timer计数电路的计数值乘以1s就能知道流逝了多少时间,从而起到定时的功能。7.1.3 单片机的单片机的Timer6如果图中模拟开关打到C位置上,进入Timer计数电路的则是外部事件脉冲。这样Timer计数电路的计数值就是外部事件脉冲的个数,这也就是单片机Timer的计数功能
4、。7.2 与与Timer有关的寄存器有关的寄存器7.2.1 Timer实现的延时实现的延时7感受Timer的作延时用。如果晶振频率为12MHz,则程序实现50ms的延时。7.2.2 Timer模式控制寄存器模式控制寄存器TMOD8TMOD是“timer mode”的缩写,用于设置Timer的工作模式。TMOD在特殊功能寄存器的地址89H上,如图11-5所示。7.2.2 Timer模式控制寄存器模式控制寄存器TMOD9AT89S51单片机有两个TimerTimer 0和Timer 1,它们的工作模式由TMOD中的对应位来分别设置。TMOD的长度为1个字节(8位),高4位和低4位分别控制Timer
5、 1和Timer 0。其中由M11、M01控制Timer 1的工作模式,M10、M00控制Timer 0的工作模式。举个例子,我们想令Timer 0工作在定时器的模式0下(软件启动),而Timer 1工作在计数器的模式1下(软件启动),则设置Timer的指令为“MOV TMOD, #01010000B”。7.2.3 Timer寄存器寄存器10Timer寄存器里保存的是计数值,当Timer启动后每过一个机器周期(定时模式)或输入一个外部事件脉冲(计数模式),计数值会自动增加1。通过计数值我们可知道Timer启动之后流逝了多少时间(定时模式)或收到多少个外部事件脉冲。AT89S51单片机有两个Ti
6、mer,它们有各自的Timer寄存器,且每个Timer寄存器由高位字节寄存器THx和低位字节寄存器TLx组成。即Timer 0寄存器由TH0和TL0组成,Timer 1寄存器由TH1和TL1组成。这4个寄存器位于特殊功能寄存器的8AH8DH上。7.2.3 Timer寄存器寄存器11Timer寄存器TL0、TH0、TL1、TH1可以像累加器A一样进行数据的装载和读取。假如需要向Timer 0寄存器载入计数初始值B35AH,可通过指令“MOV TL0, #5AH”和“MOV TH0, #0B3H”实现。另外,指令“MOV R2, TH1”则把Timer 1寄存器的高位字节TH1的值读到工作寄存器R
7、2中。7.2.4 Timer控制寄存器控制寄存器TCON12TCON是“timer control”的缩写,用于控制Timer的启动或停止,并指示Timer是否溢出。TCON在特殊功能寄存器的地址88H上。TCON的高4位的名称及功能描述:7.2.4 Timer控制寄存器控制寄存器TCON13TCON寄存器中,TFx是溢出标志位,当Timer寄存器计数达最大值之后再增加1时产生溢出,TFx位被硬件置1。于是可通过指令“JBC TFx, rel”或“JB TFx, rel”来判断TFx位是否为1,从而判断定时/计数是否完成。另外,TCON寄存器的TRx位控制Timer启动或关闭。7.2.5 Ti
8、mer用作定时用作定时/计数器小结计数器小结14AT89S51单片机中提供了2个通用的16位 Timer,分别为Timer 0和Timer 1,它们可以被独立配置成定时或计数器并工作于不同模式下。当作为定时器时,Timer将在设定好的时间下工作并在计时完成后产生溢出。当作为计数器时,Timer将计算输入T0或T1管脚的脉冲个数,当计数达到预设的值时Timer同样可以产生溢出。7.3 Timer的工作模式的工作模式17.3.1模式模式1的特点的特点15工作模式1下的Timer是一个16位的定时器或计数器,Timer寄存器TLx和THx共16位全部用来装计数值。当指令“SETB TRx”启动Tim
9、er x后,Timer寄存器将从计数初始值开始,每过一个机器周期计数值增加1,直到FFFFH再增加1溢出时完成一次计数过程。同时溢出标志TFx被硬件置1,可通过检测TFx标志位来了解计数是否完成。当计数完成后,使用指令“CLR TRx”和“CLR TFx”来关闭Timer。如果需要循环Timer的定时或计数过程,Timer寄存器TLx和THx中必须再次装载原来的计数初始值。7.3.2模式模式1的设置的设置16TMOD、Timer寄存器、TCON等寄存器中相关控制、标志位的操作实例:让P1.0口输出频率为100Hz方波信号(占空比为50%的矩形波)。7.3.2模式模式1的设置的设置17设置Tim
10、er的工作模式。程序中使用的是Timer 0(当然也可以使用Timer 1),所以通过指令“MOV TMOD, #01H”向Timer模式控制寄存器TMOD中装载01H,即0000 0001B。GATE0=0说明使用软件控制启动或关闭,C/T0#=0使Timer 0作定时器使用,M10=0和M00=1则令Timer 0工作于模式1下。7.3.2模式模式1的设置的设置18往Timer寄存器(TL0和TH0)载入计数初始值。两条MOV指令使TL0和TH0中分别装载78H和0ECH,即计数的初始值为EC78H。如果启动Timer后,从EC78H到Timer溢出需要经过1388H个机器周期(10000
11、H-EC78H=1388H),也就是5000个机器周期。如果晶振频率为12MHz,机器周期为1s。于是完成一次Timer计时需要5000s。7.3.2模式模式1的设置的设置19启动Timer。指令“SETBTR0”使TR0=1以启动Timer 0。启动之后,Timer寄存器中的计数值会自动地每过1个机器周期增加1。如图11-9所示,Timer寄存器从计数初始值EC78H计数到FFFFH。7.3.2模式模式1的设置的设置20检测Timer溢出标志(TF0)。当Timer寄存器中的计数值增加到FFFFH后再增加1,计数值变成0000H,并产生Timer溢出,这使得TF0=1,于是指令“JNBTF0
12、, CHECK”循环检测TF0位,从而等待Timer计数完成。关闭Timer。Timer完成计数后,用指令“CLRTR0”将TR0位清0以关闭定时器。如果不用指令关闭Timer,Timer寄存器中的计数值还会继续以机器周期为周期进行增加1的操作。7.3.2模式模式1的设置的设置21清0溢出标志(TF0)。将Timer溢出标志TF0清0,以便下次检测标志位的操作得以正常进行(步骤)。重新装载计数初始值。如果需要再次使用Timer进行同样的定时操作,则指令“JMPLOAD”带回到步骤重新装载计数初始值并重新开始新一轮的计数过程。因为程序11-2在不断变换P1.0口状态(指令“CPLP1.0”)并进
13、行5000s的延时,于是就形成了频率100Hz的方波信号。7.3.3模式模式1的计数初始值的计数初始值22如果我们知道晶振频率 ,可根据以下的公式计算出模式1下Timer作定时器的定时时长:定时时长t的单位为s, 为晶振频率,单位是MHz。FFFF是Timer寄存器的最大计数值,为十六进制数。MMLL表示Timer寄存器中装载的计数初始值,其中MM是高位THx的数值,LL是低位TLx的数值,MMLL也是十六进制数。Val 的意思是将(FFFF-MMLL+1)的计算结果转换成十进制,再与机器周期 相乘即可得到定时器的定时时长t。12FFFFMMLL+1(MHz)ctValf()cf7.3.4设计
14、模式设计模式1的计数初始值的计数初始值23假如要设计一个方波发生器,要求从P1.0口输出频率f=2kHz的方波,即P1.0口输出高、低电平持续时间分别为250s 。如何确定计数初始值?250s即Timer作定时器的定时时长t,计数初始值设计步骤为:将定时时长t除以 。用65536减去步骤得到的数。用科学计算器把步骤的得数转换成十六进制形式MMLL,如果转换结果100H,则MM=00。12(MHz)cf7.3.4设计模式设计模式1的计数初始值的计数初始值24最后得计数初始值:THx=MM,TLx=LL。根据以上的步骤,设计计数初始值。假设晶振频率=12MHz,定时时长t=250s,则有:250s
15、 /1s=25065536 250=6528665286(十进制)=FF06H(十六进制)THx=FF,TLx=067.3.4设计模式设计模式1的计数初始值的计数初始值25“MOVTMOD, #10H”向TMOD中装入的是10H,设置Timer 1作定时器,模式1下。Timer寄存器TL1和TH1载入计数初始值FF06H, “SETB TR1”启动Timer 1。“CHECK”段用指令“JNB TF1, CHECK”来检测Timer定时是否完成,检测过程花去的时间就是定时时长250s,在此过程中P1.0口保持着高电平或低电平。当Timer定时完成,指令“CLR TR1”关闭Timer。7.4
16、Timer的工作模式的工作模式07.4.1模式模式0的特点的特点26模式0下Timer寄存器只有13位,计数值的高8位装入THx中,TLx的低5位装入的是剩下的5位计数值。13位Timer寄存器的最大计数范围是1FFFH,模式0下,当Timer启动后,Timer寄存器将从计数初始值开始,每过一个机器周期计数值增加1,直到1FFFH再增加1就会溢出,相应的TFx位就会被硬件置1,完成一次计数过程。这与模式1下计数至FFFFH相比,模式0的单次最大定时时长较短。7.4.2设计模式设计模式0的计数初始值的计数初始值27模式0下的Timer设置过程与模式1下相同,只是Timer模式控制寄存器TMOD中
17、的M1x和M0 x位均为0。计数初始值的设计:将定时时长t除以 。用8192减去步骤得到的数。用科学计算器把步骤的得数转换成13位二进制数M N3 N2 N1 N0 P3 P2 P1 P0 Q3 Q2 Q1 Q0,高位如果是空的用0补上,依次填入THx的8位和TLx的低5位中,TLx的高3位用0代替。12(MHz)cf7.4.2设计模式设计模式0的计数初始值的计数初始值28最后得计数初始值:THx=M N3 N2 N1 N0 P3 P2 P1(二进制),TLx=0 0 0 P0 Q3 Q2 Q1 Q0(二进制)。根据以上的步骤,晶振频率 =12MHz,定时时长500s,则有:500s /1s=
18、5008192-500=76927692(十进制)=1111000001100(二进制),1 1 1 1 0 0 0 0 0 1 1 0 0 M N3 N2 N1 N0 P3 P2 P1 P0 Q3 Q2 Q1 Q0 7.4.2设计模式设计模式0的计数初始值的计数初始值29THx=11110000B=F0H,TLx=00001100B=0CH。7.5 Timer的工作模式的工作模式27.5.1模式模式2的特点的特点30工作模式2下的Timer是一个具有自动重新载入功能的8位定时器或计数器,Timer寄存器只由TLx充当。模式2下的Timer还具有自动重新载入计数初始值的功能。在初始化Timer
19、时,计数初始值同时装载到Timer寄存器THx和TLx中,当完成一次计数后Timer溢出之时,TLx会自动从THx中复制原来保存的计数初始值,而不需要再次用MOV指令向Timer寄存器载入计数初始值。这时只要把标志位TFx清0,Timer就可以再次启动重复计数过程了。7.5.1模式模式2的特点的特点31比如,TLx和THx中都载入了计数初始值3FH,当Timer启动后,只有TLx中的计数值会随机器周期增加,直到Timer溢出后,标志位TFx=1,THx中的计数初始值被自动载入TLx中。这样在新一轮的计数一开始,TLx中已经有了初始值3FH。7.5.2模式模式2的设置的设置327.5.3设计模式
20、设计模式2的计数初始值的计数初始值33在模式2下Timer作定时器的计数初始值只有8位,同时载入TLx和THx中。将定时时长t除以 。用256减去步骤得到的数。用科学计算器把步骤中的得数转换成十六进制形式TT。最后得计数初始值:THx=TLx=TT。假设某单片机系统的晶振频率=12MHz,定时时长t=50s,根据以上步骤可以设计计数初始值:50s /1s=50256 50=206206(十进制)=CEH(十六进制)THx=CE,TLx=CE12(MHz)cf7.6 Timer的工作模式的工作模式37.6.1模式模式3的特点的特点34模式3,Timer 0寄存器TL0和TH0变成两个独立的8位T
21、imer寄存器。也就是说,Timer 0变成了两个独立的8位Timer,但不具备自动重新装载计数初始值的特性。以TL0为Timer寄存器的Timer使用TMOD寄存器和TCON寄存器中原来与Timer 0有关的控制位和标志位,设置的方法与前面相同。而以TH0为Timer寄存器的Timer使用原来Timer 1的溢出标志位TF1和启动/关闭控制位TR1,但不能用作计数器使用。7.6.2模式模式3的设置的设置35利用Timer 0工作在模式3下衍生出来的两个分别以TH0和TL0为Timer寄存器的8位Timer作为延时子程序的基础,单片机P1.0口输出周期T=300s、占空比为1/3的矩形波。7.
22、6.2模式模式3的设置的设置367.6.2模式模式3的设置的设置377.6.3设计模式设计模式3的计数初始值的计数初始值38在模式3下两个独立的Timer寄存器只有8位,其计数初始值的计算方法相同。将定时时长t除以 。用256减去步骤得到的数。用科学计算器把步骤中的得数转换成十六进制形式TT。最后得计数初始值:TH0或TL0=TT。假设某单片机系统的晶振频率 =12MHz,定时时长t=150s,根据以上步骤可以设计计数初始值:150s /1s=150256 150=106106(十进制)=6AH(十六进制)TH0或TL0=6AH12(MHz)cf7.7 计数器计数器7.7.1计数器的应用计数器
23、的应用397.7.2计数器的设置计数器的设置40在Timer模式控制寄存器TMOD的C/Tx#位用于设置Timer用作定时器或计数器,当C/Tx#=1时,对应的Timer用作计数器。Timer 0和Timer 1可以被配置成两个独立的计数器,分别对输入单片机T0端(14管脚)和T1端(15管脚)的脉冲进行计数。Timer作计数器使用时,Timer寄存器THx和TLx的计数值记录的是输入单片机的脉冲的个数。7.7.2计数器的设置计数器的设置41例子:设计为每按下4次按钮开关S1, P0口上的8支发光二极管就会做BCD码加1的变化。7.7.2计数器的设置计数器的设置42“MOVTMOD,#0000
24、0110B”设置Timer 0作计数器,模式2。MOV指令向TH0、TL0装入计数初始值(256-4),这样当T0端输入4个脉冲后,TL0中的计数值就会溢出从而完成一次计数过程。7.7.2计数器的设置计数器的设置43启动计数器后,循环等待按下按钮开关4次,Timer 0溢出TH0中保存的计数初始值自动装入TL0中为新一轮计数准备,之后跳到“LOOP_2”段,两条CLR指令关闭计数器和清0标志位后,P0口的数据进行了BCD码的加1操作。之后又循环到“LOOP”段,重新启动计数器。7.7.4计数器的计数初始值设定计数器的计数初始值设定44Timer作计数器时,计数初始值的设定比较简单。模式2中,因
25、为TL0和TH0都载入相同的初始值,所以只要把8位Timer的最大计数值减去所要计数的数值即可(256-4)。模式3与此相似,只不过模式3中只有Timer 0可用。如果在模式1,为16位的计数器,需要计数的数值为n(十进制),则计数初始值为65536-n(十进制)。转换成十六进制后高位字节装入THx,低位字节载入TLx即可。更方便的是,汇编语言中可以使用“HIGH”和“LOW”来完成这个转换与表示,假如计数值为35,则可使用以下两条指令来装入计数初始值:7.7.4计数器的计数初始值设定计数器的计数初始值设定45在模式0则为13位的计数器,如果需要计数的数值为n,则THx中将装入(8192-n)
26、/32,而TLx中装入(8192-n)MOD32。假如计数值为35,则可以使用以下两条指令来装入计数初始值:7.7.5各种模式下的计数器各种模式下的计数器46制药厂装药丸生产线控制电路的一部分,用于检测漏斗颈通过药丸的红外传感器的输出信号进入单稳态多谐振荡器SN54121,经过SN54121的过滤后,计数脉冲送入单片机的T0端。假设每个药瓶装20粒药丸,程序11-9程序11-12展示了Timer在4种模式下实现同一功能的软件设计,今后有需要时可直接参考这几个程序。7.7.6计数脉冲的要求计数脉冲的要求47Timer作计数器时,实际上是在计算计数脉冲下降沿的个数,或者说在计数脉冲的电平由高跳低时
27、Timer寄存器中的计数值增加1,假如原来TL0=33,计数脉冲来到后每次下降沿使TL0增加1。7.7.6计数脉冲的要求计数脉冲的要求48单片机检测下降沿需要一定的时间。所以外部事件发生的最高频率fe应小于晶振频率/24。假设晶振频率=12MHz,则输入T0或T1口的计数脉冲的最高频率fe应小于500kHz。另外,确保脉冲在跳变之前至少被采样一次,则该电平至少要保持一个机器周期,假设使用12MHz的晶振,计数脉冲的电平信号在跳变之前至少应保持1s。7.7.7 TMOD寄存器的门控位寄存器的门控位49当Timer模式控制寄存器TMOD中GATEx位=0时,Timer的启动/关闭由软件控制,指令“
28、SETB TRx”启动Timer x,而指令“CLR TRx”实施关闭。如果当GATEx位=1时,并同时使TCON寄存器的TRx=1即可通过外部信号(通过单片机的/INTx端)对Timer x实施启动与关闭,当/INTx =1时启动而/INTx =0关闭。此所谓硬件启动/关闭Timer。 /INTx 端代表的是 /INT0(12管脚,控制Timer 0)或/INT1(13管脚,控制Timer 1)。7.8 看门狗看门狗7.8.1什么是看门狗什么是看门狗50看门狗(watchdog)是单片机系统中一种强制单片机复位的技术,实现这种技术依靠的是看门狗定时器,它具有以下两个特征:看门狗定时器必须在一
29、定时间内由软件对其进行刷新,如若不然,当看门狗定时器溢出时就会导致单片机复位。当看门狗定时器启动之后,程序是没有办法让它停止的,只有程序定时对其进行刷新防止溢出,或者等到看门狗定时器溢出时使单片机复位。7.8.2单片机的内置看门狗单片机的内置看门狗51AT89S51单片机内部已经集成了一个14位的看门狗定时器,控制这个看门狗定时器的寄存器是WDTRST。当单片机上电复位时,默认看门狗功能被禁止。要想启动看门狗功能,需要把立即数1EH和0E1H按顺序写入WDTRST寄存器中。7.8.2单片机的内置看门狗单片机的内置看门狗52当看门狗启动后,其14位定时器的计数值每过1个机器周期自动增加1,直到当看门狗溢出时,它会使单片机的RST端(9管脚)电平被拉高从而促成单片机的复位。当看门狗被启动后,程序是无法将其关闭的,而只有当单片机通过RST端重新复位或看门狗自己溢出导致单片机复位时看门狗才会关闭。通过向WDTRST寄存器顺序写入立即数1EH和0E1H序列后,看门狗启动,为了防止看门狗溢
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论