中易网

80c51单片机定时器t0工作于方式1定时时间1ms当晶振为6mhz时求计数初值为多少

答案:2  悬赏:10  
解决时间 2021-10-18 20:36
80c51单片机定时器t0工作于方式1定时时间1ms当晶振为6mhz时求计数初值为多少
最佳答案
下面一段文字是对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=(TM—TC)12/fOSC  (µs)                 (2)
式中TM为计数器从初值开始作加1计数到计满为全1所需要的时间,
TM为模值,和定时器的工作方式有关;fOSC是单片机晶体振荡器的频率,TC为定时器的定时初值。
在式(2)中,若设TC=0,则定时器定时时间为最大(初值为0,计数从全0到全1,溢出后又为全0)。由于M的值和定时器工作方式有关,因此不同工作方式下定时器的最大定时时间也不一样。例如:若设单片机主脉冲晶体振荡器频率fOSC为12MHz,则最大定时时间为:
方式0时         TMmax=213×1µS=8.192ms
方式1时         TMmax=216 ×1µs=65.536ms
方式2和3时     TMmax=28 ×1µs=0.256ms
   例1、设  方式0工作时,定时时间为1ms,时钟振荡频率为6MHz,
解:  将数据代入公式(2)得:
      (213—TC)12/6 µS =1ms=1000µS
             TC=213-500=7692
化成二进制数为TC=1111   0    0000    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)可得定时器初值为:
                          TC=213-2MS/1µs=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/1µs=63536=F830H
   即:TH0应装F8H;TL0应装30H。
例3、设T1作定时器,以方式1工作,定时时间为10MS;T0作计数器,以方式2工作,外界发生一次事件即溢出。
解:T1的时间常数为:
                     (216-TC)×2µs=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 ×2µs=131.072ms
我们就用定时器获得100ms的定时时间再加10次循环得到1秒的延时,可算得100ms定时的定时初值:
(216-TC)×2µs=100ms=100000µs
TC=216-50000=15536
TC=3CB0H
  程序如下:
ORG  0000H
     MOV  TMOD,#01H
     MOV  R7,#10
TIME: MOV  TL0,#0B0H
     MOV  TH0,#3CH
     SETB TR1
LOOP1:JBC TF0,LOOP2
     JMP LOOP1
LOOP2:DJNZ R7,TIME
     RET
     END
全部回答
晶振 6MHz ,每机周 2 us  T0 定时100ms ,计数5次,即可实现 500ms 定时。 计数值为 50000次。 #include<reg51.h> unsigned char cont;     main() { while(1)               { P1=0x01;               TMOD=0x01; TH0=-50000/256;       TL0=-50000%256; EA=1;                 ET0=1; TR0=1; } } void int0() interrupt 1 { TH0=-50000/256; TL0=-50000%256; cont++; if(cont==5)         P1=P1<<1; } 以调试通过。 努力啊!
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
天花装饰价格是多少左右
结节性甲状腺肿
已婚女人婚外恋三年男的要分手女人不甘心付出
手机来电iphone无铃声如何解决?
希尔顿曾经堂艺术馆地址好找么,我有些事要过
谁有兰舍硅藻泥介绍?
珍珠版有飞叶风暴的精灵
花都狮岭镇有汽车站吗?怎么去广州?
聊城相框机械哪里有卖
防盗门长沙去哪买质量好?
为什么男人不能打女人屁股(大人除外)
鹤城区怀化风尚网络(金海路)这个地址怎么能查
丰田花冠 发动机码在哪?
金属屋面防水做法有哪些?
银行卡可以网上注销吗?
推荐资讯
听说红木家具耐用,还能保值增值呢,可这青岛
请问一下如何清洁手机屏幕
怎样理解“安得广厦千万间,大庇天下汉室俱欢
正畸牙套上面最后一颗牙齿的固定的东西脱落了
怎样发布临沂二手叉车信息
天津哪有培训正规月嫂的地方,能发证的那种
重庆到贵州遵义曲阳县多少公里
郑和下西洋的消极影响
美的不锈钢电水壶怎么样?
不锈钢液化气灶和玻璃钢液化气灶那种实用
泊头职业学院
三星打印复印一体机报价多少钱
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?