定时器定时1秒.doc_第1页
定时器定时1秒.doc_第2页
定时器定时1秒.doc_第3页
全文预览已结束

下载本文档

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

文档简介

晶振 6MHz ,每机周 2 us T0 定时100ms ,计数5次,即可实现 500ms 定时。计数值为 50000次。#include<reg51.h>unsigned char cont; /*声明cont*/main()while(1) /*无限循环*/P1=0x01; /*p10亮*/TMOD=0x01;TH0=-50000/256; /*设置初值*/TL0=-50000%256;EA=1; ET0=1;TR0=1;void int0() interrupt 1TH0=-50000/256;TL0=-50000%256;cont+;if(cont=5) /*每次100ms 到了5次500msP1左移一位*/P1=P1<<1;下面一段文字是对8051单片机定时器初值的计算描述,希望对你有所帮助,对于你的提问,根据下面文字的说明,可以得到初值为:FE0CH(65536-500)定时器/计数器可用软件随时随地起动和关闭,起动时它就自动加“1”记数,一直记到满,即全为“1”,若不停止,计数值从全“1”变为全“0”,同时将计数溢出位置“1”并向CPU发出定时器溢出中断申请。对于各种不同的工作方式最大的定时时间和计数数不同。这里在使用中就会出现两个问题:一是要产生比定时器最大的定时时间还要小的时间和计数器最大计数次数还要小的计数次数怎么办?二是要产生比定时器最大的定时时间还要大的时间和计数器最大计数次数还要大的计数次数怎么办?解决以上第一个问题只要给定时器/计数器一个非零初值,开定时器/计数器时,定时器/计数器不从0开始,而是从初值开始,这样就可得到比定时器/计数器最大的定时时间和计数次数还要小的时间和计数次数,解决第二个问题就要用到循环程序了,循环几次就相当于乘几。例如要产生1秒的定时你可先用定时器产生50MS的定时,再循环20次就行了,因为1S=1000MS,也可用其它的组合。有时也可采用中断来实现。由上可见,解决问题的基本出路在于初值的计算,下面就来具体讨论计数器的初值计算和最大值的计算。我们把计数器从初值开始作加1计数到计满为全1所需要的计数值设定为C和计数初值设定为D,由此便可得到如下的计算通式: D=M-C (1)式中,M为计数器模值,该值和计数器工作方式有关。在方式0时M为213;在方式1时M为216;在方式2和方式3时M为28。3、定时器初值的计算在定时器模式下,计数器由单片机脉冲经12分频后计数。因此,定时器定时时间T的计算公式为:T=(TMTC)12/fOSC (s) (2)式中TM为计数器从初值开始作加1计数到计满为全1所需要的时间,TM为模值,和定时器的工作方式有关;fOSC是单片机晶体振荡器的频率,TC为定时器的定时初值。在式(2)中,若设TC=0,则定时器定时时间为最大(初值为0,计数从全0到全1,溢出后又为全0)。由于M的值和定时器工作方式有关,因此不同工作方式下定时器的最大定时时间也不一样。例如:若设单片机主脉冲晶体振荡器频率fOSC为12MHz,则最大定时时间为:方式0时 TMmax=2131S=8.192ms方式1时 TMmax=216 1s=65.536ms方式2和3时 TMmax=28 1s=0.256ms 例1、设 方式0工作时,定时时间为1ms,时钟振荡频率为6MHz,解: 将数据代入公式(2)得: (213TC)12/6 S =1ms=1000S TC=213-500=7692化成二进制数为TC=11110000 01100根据13位定时器/计数器特性,高8位F0H送至TH0低5位0CH送TL0,一般的高三位置“”,可用下列指令实现。MOV TL0,#0CH; 5位送TL0寄存器MOV TH0,#0F0H; 位送T0寄存器 例2若单片机时钟频率fOSC为12MHz,请计算定时2ms所需的定时器初值。 解:由于定时器工作在方式2和方式3下时的最大定时时间只有0.256ms,因此要想获得2ms的定时时间定时器必须工作在方式0或方式1。 若采用方式0,则根据式(2)可得定时器初值为: TC=213-2MS/1s=6129用计算机附件中的计算器可将6129转换为十六进制数为1830H注意:这不是定时器工作在方式0时的初值,因定时器工作在方式0时是13位,高字节8位,低字节5位,所以还要进行适当的变换,因为1830H 可写成 0001 1000 0011 0000按13位重新组合成00011000001 10000 这组数就可拼成 1100 0001 0001 0000这样就得到定时器工作在方式0时的初值C110H即:TH0应装C1H;TL0应装10H(高三位为0)。 若采取方式1,则有:TC=216-2MS/1s=63536=F830H 即:TH0应装F8H;TL0应装30H。例3、设T1作定时器,以方式1工作,定时时间为10MS;T0作计数器,以方式2工作,外界发生一次事件即溢出。解:T1的时间常数为: (216-TC)2s=10ms TC=EC78H 初始化程序: MOV TMOD,#16H ;T1定时方式1,T0计数方式2,即置TMOD寄存器的内容为00010110 MOV TL0,#0FFH ;T0时间常数送TL0 MOV TH0,#0FFH ;T0时间常数送TH0 MOV TL1,#78H ;T1时间常数(低8位)送TL1 MOV TH1,#0ECH ;T1时间常数(高8位)送TH1 SETB TR0 ;置TR0为1允许T0启动计数SETB TR1 ;置TR1为1允许T1启动计数例4 设定时器T0,以方式1工作,试编写一个延时1秒的子程序。解:若主频频率为6MHZ可求得T0的最大定时时间为: TMmax=216 2s=131.072ms我们就用定时器获得100ms的定时时间再加10次循环得到1秒的延时,可算得100ms定时的定时初值:(216-TC)2s=100ms=100000sTC=216-50000=15536TC=3CB0H 程序如下

温馨提示

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

评论

0/150

提交评论