⑴ 51单片机定时计数器四种工作方式哪种可以实现计数初值的自动加载
51单片机定时计数器四种工作方式中,方式2可以实现计数初值的自动加载。
解释分析:
16位的计数器只用了8位来计数,用TLx来进行计数,而THx用于保存初值,当TLx计满时则溢出,该方式的溢出状态一方面使TF变化,另一方面使TH的值再次置入TL,正所谓自动重置定时/计数器
自动装载初值,无需程序运行赋值,此方式更精确。
此时MAX值为28=256,设计数值为100。
初值为156=10011100B(0x9C)。
TH0=TL0=0x9C。
定时/计数器有如下一些用途:
(1)产生所需频率的脉冲,如产生频率1000,占空比1:1的脉冲波。
(2)在累加计数中的应用,计数器可在一段时间内记录信号A经整形后的脉冲个数。
(3)在频率测量中的应用,通过测量脉冲宽度或在一定时间内测量脉冲的个数,从而推算出脉冲的频率。
(4)定时/计数器在计时中的应用,定时/计数器可对时钟信号,如秒信号进行计数,也可用来倒计时,秒表计,时间循环等。
⑵ 51单片机各种位数定时器初值计算方法
对12MHz ,1个机器周期 1us ,12/fosc = 1us
。
方式0是13位定时器,最大时间间隔 = 2^13 = 8.192ms
方式1是16位定时器,最大时间间隔 = 2^16 = 65.536ms
方式2是8位定时器,最大时间间隔 = 2^8 = 0.256ms =256 us
方式3 仅适用于T0,此时T0分成两个8位计数器,T1停止计数
当选用定时器的方式1时,设机器周期为Tcy,定时器产生一次中断的时间为t,那么需要计数的个数N=t/Tcy,装入THX和TLX中的数分别为:
THX = (2^16 - N)/256 TLX = (2^16 -N )%256(此处的X为定时器0或定时器1)
公式为:(2^y - X)*Tcy = t
Tosc= 1/ fosc
一个机器周期 = 12个时钟周期 = 12/fosc
溢出速率 = 1 / 溢出时间
故:初值X = 2^y – t/Tcy
THX = 高八位
TLX = 低八位
注:
X:定时器初值
N:计数值
y:定时器工作方式
fosc:晶振频率
Tcy:机器周期,Tosc:时钟周期
Tcy = 1/Tosc
⑶ 51单片机定时器初值为什么可以是十进制数
对于51单片机而言,定时器初值本身最终必须是二进制数才会被识别。
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
之所以可以是十进制表述出来,这是由编译器决定的,也即是说keilc允许这样表示,编译时会自动转换为二进制。
⑷ 51单片机定时器初值公式中的256是什么
用方式1时,16位的初值要分解成高8位、低8位,分别存放到 TH0、TL0。
对256求模,也就是除以 256 得到的整数商,这就是高八位。
对256求余,也就是除以 256,得到的余数,这就是低八位。
楼主可以把一个二进制数,人工除以2、除以4、...除以16...,
看看商、余数,都是多少位,就知道 8 位数和 256 的关系了。
⑸ 51单片机定时器初值问题
肯定不行,你自己算一下,
由于计数器是向上计数的,定时5ms(假设1个脉冲1US,需5000个脉冲)
初值就是65536-5000,这样再来5000个脉冲,计数器值就成了65536,产生溢出,发生中断
因高8位(TH0)的每个1相当于256,所以它装入的应该是(65536-5000)/256
低8位(TL0)是(65536-5000)%256,也就是不足256的部分
⑹ 51单片机波特率计算公式和定时器初值
51单片机芯片的串口可以工作在几个不同的工作模式下,其工作模式的设置就是使用SCON 寄存器。它的各个位的具体定义如下:
SM0 SM1 SM2 REN TB8 RB8 TI RI
SM0、SM1 为串行口工作模式设置位,这样两位可以对应进行四种模式的设置。串行口工作模式设置。
波特率在使用串口做通讯时,一个很重要的参数就是波特率,只有上下位机的波特率一样时才可以进行正常通讯。波特率是指串行端口每秒内可以传输的波特位数。这里所指的波特率,如标准9600 不是每秒种可以传送9600个字节,而是指每秒可以传送9600 个二进位,而一个字节要8 个二进位,如用串口模式1 来传输那么加上起始位和停止位,每个数据字节就要占用10 个二进位,9600 波特率用模式1 传输时,每秒传输的字节数是9600÷10=960 字节。
51芯片的串口工作模式0的波特率是固定的,为fosc/12,以一个12M 的晶振来计算,那么它的波特率可以达到1M。模式2的波特率是固定在fosc/64 或fosc/32,具体用那一种就取决于PCON 寄存器中的SMOD位,如SMOD 为0,波特率为focs/64,SMOD 为1,波特率为focs/32。
模式1和模式3的波特率是可变的,取决于定时器1或2(52芯片)的溢出速率,就是说定时器1每溢出一次,串口发送一次数据。那么我们怎么去计算这两个模式的波特率设置时相关的寄存器的值呢?可以用以下的公式去计算。
上式中如设置了PCON寄存器中的SMOD位为1时就可以把波特率提升2倍。通常会使用定时器1工作在定时器工作模式2下,这时定时值中的TL1做为计数,TH1做为自动重装值,这个定时模式下,定时器溢出后,TH1的值会自动装载到TL1,再次开始计数,这样可以不用软件去干预,使得定时更准确。在这个定时模式2下定时器1溢出速率的计算公式如下:
溢出速率=(计数速率)/(256-TH1初值)
溢出速率=fosc/[12*(256-TH1初值)]
上式中的“计数速率”与所使用的晶体振荡器频率有关,在51 芯片中定时器启动后会在每一个机器周期使定时寄存器TH 的值增加一,一个机器周期等于十二个振荡周期,所以可以得知51芯片的计数速率为晶体振荡器频率的1/12,一个12M 的晶振用在51芯片上,那么51的计数速率就为1M。通常用11.0592M 晶体是为了得到标准的无误差的波特率,那么为何呢?计算一下就知道了。如我们要得到9600 的波特率,晶振为11.0592M 和12M,定时器1 为模式2,SMOD 设为1,分别看看那所要求的TH1 为何值。代入公式:
11.0592M
9600=(2÷32)×((11.0592M/12)/(256-TH1))
TH1=250
12M
9600=(2÷32)×((12M/12)/(256-TH1))
TH1≈249.49
上面的计算可以看出使用12M晶体的时候计算出来的TH1不为整数,而TH1的值只能取整数,这样它就会有一定的误差存在不能产生精确的9600 波特率。当然一定的误差是可以在使用中被接受的,就算使用11.0592M 的晶体振荡器也会因晶体本身所存在的误差使波特率产生误差,但晶体本身的误差对波特率的影响是十分之小的,可以忽略不计。
⑺ 51单片机定时器初值公式
1.简单说起,256表示一个8位分界点,对它求模得高位字节存在TH0中,求余得低位字节放在TL0中,拿十进制打比:15/10得十位1,15%10得个位数5
2.12Mhz时,单周期指令时间为12/fsoc=1us
方式1为16位定时/计数器
故定时1ms为:TH0=(2^16-1000)/2^8,
TL0=(2^16-1000)%256
当为11.0592MHz时,单周期指令时间为12/fsoc=12/11.0592us
由于采用方式0,为13为定时器,TH0高8位和TL0的低5位
故定时1ms为:
TH0=(2^13-1000/(12/11.0592))/2^5,
TL0=(2^16-1000/(12/11.0592))%2^5
这么晚了 写写不容易,多给些分以此鼓励俺
O(∩_∩)O~
⑻ 51单片机串口通信定时器初值怎么计算公式和计算原理是什么
串口通信方式1和方式3,要用T1来控制波特率。
T1,使用定时方式2,其初始值,和晶振频率、波特率、SMOD的关系式如下:
T1初值 = 256 - fosc * (SMOD + 1) / (384 * 波特率)
--我不明白波特率跟这个定时器的关系。麻烦你详细一点!
这个关系,是由硬件决定的,只有搞微电子的,才能弄明白。
软件人员,编程的时候,会用这个公式即可,也没有必要弄明白这个。
基本上,也没有几个人,能够弄明白集成电路内部,究竟是怎么处理的。
其它的很多人,好像是很明白,其实都是在瞎编理由,包括写书的那些人。
⑼ 求助,51单片机定时器初值设定问题
第一句就是将,(65536-5000)的高八位赋值给TH0
第二句就是将,(65536-5000)的低八位赋值给TL0
256就是2的8次方,一个数除以256相当于右移8位。MOD是求模的意思。