关于51单片机定时/计数器装入初值的问题

最近在学单片机生成pwm波形,在网上关于给定时/计数器装入初值有两种表示方法,一种类似于这样:TH0=(65535-100)%256;TL0=(65536-100)/256;另一种好像是用十六进制表示的,例如:TH0=0xff;TL0=0x9c ,我看不懂十六进制的这种表示方法,希望各位高手能帮忙解释一下,以及两种表示方法怎么转化,小弟在此谢过了!!

这个有什么看不懂得呢 第一种 是吧十进制化成十六机制的方法 第二种呢 就是单纯的十进制
这样跟你说吧 因为th0只有一个字节 那就只能放下8位2进制 于是第一种表示就是把一个大于一个字节小于两个字节的数据转化成两个字节高八位和第八位的分离形式
第二种就简单了 0x9c就是65536-100的十六进制表示啊
那高八位就是前两个十六进制数ff就装到th0中 低八位就是后两个十六进制数9c 装到th1中呗3

这有啥看不懂的啊
这个真的基础到不行了 没法再解释啊
至于转化吗
你去找c语言教程 16进制与十进制的转化 再好好学学
这个是绝对的基础啊
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-01-10
定时器工作原理:从TH和TL里的值开始向上计数直到溢出触发中断,在晶振12M,12T单片机的情况下,时钟周期为1MHz,执行一次加计数用1us,这样,从0记到两个寄存器的最大值65535就要用去65.536ms,这就是51单片机最大计数范围。此时,为了计出10ms的时间,那么就要更改TH和TL的值,使定时器不从0开始计,这个值,就是65536-10000=55536,即从55536开始向上计数到溢出刚好用去10ms。另外由于单片机寄存器是8位的,所以要把TH和TL组合起来用,TH放高8位,TL放低8位,于是有了TH0=(65536-10000)/256; TL0=(65536-10000)%256;至于TH0=0xff;和TL0=0x9c;其实是一样的,不同的是前面是个式子,后面是人工算出来了,明白?
(以上基于定时器工作方式1)
第2个回答  2011-01-10
实际上是一回事,前者对256取模和取余就是把十进制的数转化为十六进制的过程,256=2^8,TH0就是高八位,TL0是第八位,合起来就是一个完整的十六进制的数,装入十六进制的0x??也就是将取模和取余之后的值化成十六进制再写出来。
eg 0xf7=0b11110111=0d240 240/16=f,240%16=7
第3个回答  2011-01-10
用前面的方法即可。
前面的方法是设定一个算式,由编译系统算出初始值;
后面的方法是人工计算出初始值,再写入程序。

教材上,一般要讲的细致一些,都是讲人工计算,都是用后面的方法。
人工计算的方法,书上都有公式,和“65535-100)%256”雷同。

实用的时候,用前面的方法即可。

关于51单片机定时\/计数器装入初值的问题
这个有什么看不懂得呢 第一种 是吧十进制化成十六机制的方法 第二种呢 就是单纯的十进制 这样跟你说吧 因为th0只有一个字节 那就只能放下8位2进制 于是第一种表示就是把一个大于一个字节小于两个字节的数据转化成两个字节高八位和第八位的分离形式 第二种就简单了 0x9c就是65536-100的十六...

利用51单片机的定时器实现中断时,装初值先装高位还是先装低位对结果有...
我也遇到这样的情况,发现先装低位再装高位出来的定时和当初的设计是一样的,先装高位在装低位在给低位赋值时高位的初值会被改变的。

51定时器初值怎么算?
首先,51单片机是加一计数,到65536溢出,所以定时时间(经过的脉冲个数,如果一个脉冲是1us,刚好延时50ms是50000个脉冲)是65536减初值 ,初值又分高8位和低8 位,高8位的1代表256,因此高8位的数值所代表的数是256的整数倍,低位最大不超过255,所以一定是除以256之后的余数,用公式是这样:初值...

51单片机的定时器初值到底是TH0 = (65536-x) \/256;还是TH0 = (65535...
(65536-x) \/256是正确的 因既然要用定时器,定时时间不可能是0,所以 (65536-x) \/256结果不会是256 小于256的数都是可以装入的 对于TL0同样不会是256,因256的倍数除256余数是0 其实 不管是65535还65536对TH0写入的结果是一样的 但对于TL0(或整个计数器来说)理论上有一个脉冲的差别,若...

51单片机串口通信,定时器1,8位自动重装初值的求法
1 公式一的结果为TH1=TL1=-3 2 公式二结果为TH1=TL1=253 无论使用哪个参数,程序都可以正常运行,这就对了。因为这俩数 表面上看着不同 实际是一样的。公式二结果为TH1=TL1=253 为正数,公式一的结果为TH1=TL1=-3 为负数 在计算机中要用补码表示,应表示为FDH=253.呵呵 这俩个数...

51单片机定时\/计数器的问题 (代码)
TH0 = THC0; \/\/ 向TH0寄存器写入THC0常数,也就是0xEE TL0 = TLC0; \/\/ 向TL0寄存器写入TLC0常数,也就是0x00 \/\/ 以上完成定时器0在16位模式下的初值加载,也就是0xEE00 TR0 = 1; \/\/ 开启定时器0的运行。此语句之后Timer0计数器才开始累加 ET0 = 1; \/\/ 开启定时器0的中断。此...

8051单片机计数器初值计算问题
TMOD=0x20是使用T1作波特率发生器,初值自动加载,所以TH1=TL1, 每过(256-0xf3)=13个机器周期定时器就溢出一次,所以每s溢出1000000\/6.5次,由于PCON里面SMOD设置为1,表示波特率倍增,所以,T1每溢出16次就会传输一位数据,那么,每溢出1000000\/6.5\/16次发送一位数据位,所以波特率就是9615.4bps 公式...

51单片机 定时时间 和TMOD设定 的问题
1、工作方式1为16位的定时\/计数器,其分为两个8位的高、低位定时器(TH1、TL1)2、TL0溢出后,再往TH0进一位,即如果给定时器赋初值257,超过256后,往TH1进一位 其中 256=2^8 3、按题意,要求赋初值为2^16-2000,将它分配到两个定时\/计数器中,即为TL1=(65536-2000)%256; TH1=(...

单片机定时器装初值为什么对THX求模,对TLX求余
51单片机定时器 用好几种模式,你说的那种是16位的定时器,因为定时器为2个字节,所以最大值应该是65535 ,我们赋值时,就必须 进行对THX和TLX 赋值,因为THX为高8位 ,所以就要对256进行取模(取整) ,得到高8为的值。对256进行取余,得到低8位的值因为一个字节就是 256 ,就相当于 对15来...

51单片机各种位数定时器初值计算方法?
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 ...

相似回答