足球比分直播

定时器定时1秒.doc

返回
定时器定时1秒.doc_第1页
第1页 / 共3页
定时器定时1秒.doc_第2页
第2页 / 共3页
定时器定时1秒.doc_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述:
晶振 6MHz ,每机周 2 us T0 定时 100ms ,计数 5 次,即可实现 500ms 定时。计数值为 50000 次。includereg51.hunsigned char cont; /*声明 cont*/main{while1 /*无限循环*/{P10 x01; /*p10 亮*/TMOD0 x01;TH0-50000/256; /*设置初值*/TL0-50000256;EA1; ET01;TR01;}}void int0 interrupt 1{TH0-50000/256;TL0-50000256;cont;ifcont5 /*每次 100ms 到了 5 次 500msP1 左移一位*/P1P11;}下面一段文字是对 8051 单片机定时器初值的计算描述,希望对你有所帮助,对于你的提问,根据下面文字的说明,可以得到初值为FE0CH65536-500定时器/计数器可用软件随时随地起动和关闭,起动时它就自动加“1”记数,一直记到满,即全为“1” ,若不停止,计数值从全“1”变为全“0” ,同时将计数溢出位置“1”并向 CPU 发出定时器溢出中断申请。对于各种不同的工作方式最大的定时时间和计数数不同。这里在使用中就会出现两个问题一是要产生比定时器最大的定时时间还要小的时间和计数器最大计数次数还要小的计数次数怎么办二是要产生比定时器最大的定时时间还要大的时间和计数器最大计数次数还要大的计数次数怎么办解决以上第一个问题只要给定时器/计数器一个非零初值,开定时器/计数器时,定时器/计数器不从 0 开始,而是从初值开始,这样就可得到比定时器/计数器最大的定时时间和计数次数还要小的时间和计数次数,解决第二个问题就要用到循环程序了,循环几次就相当于乘几。例如要产生 1 秒的定时你可先用定时器产生 50MS 的定时,再循环 20 次就行了,因为 1S1000MS,也可用其它的组合。有时也可采用中断来实现。由上可见,解决问题的基本出路在于初值的计算,下面就来具体讨论计数器的初值计算和最大值的计算。我们把计数器从初值开始作加 1 计数到计满为全 1 所需要的计数值设定为 C 和计数初值设定为 D,由此便可得到如下的计算通式DM-C (1)式中,M 为计数器模值,该值和计数器工作方式有关。在方式 0 时 M 为 213;在方式 1 时 M 为 216;在方式 2 和方式 3 时 M 为 28。3、定时器初值的计算在定时器模式下,计数器由单片机脉冲经 12 分频后计数。因此,定时器定时时间 T 的计算公式为T(TM TC)12/fOSC (μs ) (2)式中 TM 为计数器从初值开始作加 1 计数到计满为全 1 所需要的时间,TM 为模值,和定时器的工作方式有关;fOSC 是单片机晶体振荡器的频率,TC 为定时器的定时初值。在式(2)中,若设 TC0,则定时器定时时间为最大(初值为 0,计数从全 0 到全 1,溢出后又为全 0) 。由于 M 的值和定时器工作方式有关,因此不同工作方式下定时器的最大定时时间也不一样。例如若设单片机主脉冲晶体振荡器频率 fOSC 为 12MHz,则最大定时时间为方式 0 时 TMmax2131μS8.192ms方式 1 时 TMmax216 1μs65.536ms方式 2 和 3 时 TMmax28 1μs0.256ms例 1、设 方式 0 工作时,定时时间为 1ms,时钟振荡频率为 6MHz,解 将数据代入公式(2)得(213TC)12/6 μS 1ms1000μSTC213-5007692化成二进制数为 TC11110000 01100根据 13 位定时器/计数器特性,高 8 位 F0H 送至 TH0 低 5 位 0CH 送 TL0,一般TL0的高三位置“0” ,可用下列指令实现。MOV TL0,0CH; 5 位送 TL0 寄存器MOV TH0,0F0H; 8位送 TH0 寄存器例 2 若单片机时钟频率 fOSC 为 12MHz,请计算定时 2ms 所需的定时器初值。解由于定时器工作在方式 2 和方式 3 下时的最大定时时间只有 0.256ms,因此要想获得 2ms 的定时时间定时器必须工作在方式 0 或方式 1。若采用方式 0,则根据式(2)可得定时器初值为TC213-2MS/1μs6129用计算机附件中的计算器可将 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,则有TC216-2MS/1μs63536F830H 即TH0 应装 F8H;TL0 应装 30H。例 3、设 T1 作定时器,以方式 1 工作,定时时间为 10MS;T0 作计数器,以方式 2 工作,外界发生一次事件即溢出。解T1 的时间常数为(216-TC)2μs10msTCEC78H初始化程序MOV TMOD,16H ;T1 定时方式 1,T0 计数方式 2,即置 TMOD 寄存器的内容为 00010110MOV TL0,0FFH ;T0 时间常数送 TL0MOV TH0,0FFH ;T0 时间常数送 TH0MOV TL1,78H ;T1 时间常数(低 8 位)送 TL1MOV TH1,0ECH ;T1 时间常数(高 8 位)送 TH1SETB TR0 ;置 TR0 为 1 允许 T0 启动计数SETB TR1 ;置 TR1 为 1 允许 T1 启动计数例 4 设定时器 T0,以方式 1 工作,试编写一个延时 1 秒的子程序。解若主频频率为 6MHZ 可求得 T0 的最大定时时间为TMmax216 2μs131.072ms我们就用定时器获得 100ms 的定时时间再加 10 次循环得到 1 秒的延时,可算得 100ms 定时的定时初值(216-TC)2μs100ms100000μsTC216-5000015536TC3CB0H程序如下ORG 0000HMOV TMOD,01HMOV R7,10TIME MOV TL0,0B0HMOV TH0,3CHSETB TR1LOOP1JBC TF0,LOOP2JMP LOOP1LOOP2DJNZ R7,TIMERETEND
展开阅读全文
收藏
下载资源

加入会员免费下载





足球比分直播