51åçæºå®æ¶å¨åå¼è®¡ç®ï¼
void mainï¼voidï¼
{
s1=1;
TMOD=0x01; //使ç¨å®æ¶å¨T0ç模å¼1
TH0=ï¼65536-46083ï¼/256; //å®æ¶å¨T0çé«8ä½è®¾ç½®åå¼
TL0=ï¼65536-46083ï¼%256; //å®æ¶å¨T0çä½8ä½è®¾ç½®åå¼
å½æ°åè½ï¼å®æ¶å¨T0çä¸ææå¡å½æ°
void Time0ï¼void ï¼ interrupt 1 using 0 //å®æ¶å¨T0çä¸æç¼å·ä¸º1ï¼ä½¿ç¨ç¬¬1ç»å·¥ä½å¯åå¨
{
count++; //æ¯äº§ç1次ä¸æï¼ä¸æ累计次æ°å 1
ifï¼count==20ï¼ //å¦æä¸æ次æ°è®¡æ»¡20次
count=0; //ä¸æ累计次æ°æ¸ 0
s++; //ç§å 1
å®æ¶å¨åå¼ 46083 æ¯æä¹è®¡ç®åºæ¥çï¼ ä¸è¬æ们å¦ç¨ AT892051çè¯ å®æ¶50MS å°±æ¯ TH0=ï¼65536-50000ï¼/256ã使ç¨ç12Mæ¶ä½ ï¼20次为1Sã
使ç¨è¯´æ
以12Mæ¶æ¯ä¸ºä¾ï¼æ¯ç§éå¯ä»¥æ§è¡1000000次æºå¨å¨æ个æºå¨å¨æãèT æ¯æ¬¡æº¢åºæå¤65536 个æºå¨å¨æãæ们尽éåºè¯¥è®©æº¢åºä¸æç次æ°æå°ï¼å¦50msï¼ï¼è¿æ ·å¯¹ä¸»ç¨åºçå¹²æ°ä¹å°±æå°ã
å¼åçæ¶åå¯è½ä¼æ ¹æ®éè¦æ´æ¢ä¸åé¢ççæ¶æ¯ï¼æ¯å¦c51åçæºï¼ç¨11.0592Mçæ¶æ¯ï¼å¾éå产ç串å£æ¶éï¼è12Mæ¶æ¯å¾æ¹ä¾¿è®¡ç®å®æ¶å¨çæ¶é´ï¼ï¼ä½¿ç¨ææ¥å¼æ¯è¾æ¹ä¾¿ã
对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ã
å®æ¶5msï¼è®¡ç®è®¡æ¶å¨åå¼ M = 2^K-X*Fosc/12 12MHzãæ¹å¼0ï¼ K=13ï¼X=5msï¼Fosc=12MHz å M = 2^13 - 5*10^ï¼-3ï¼*12*10^6/12= 3192 = 0x0C78ã
THx = 0CHï¼TLx = 78Hï¼æ¹å¼1ï¼ K=16ï¼X=5msï¼Fosc=12MHz å M = 2^16 - 5*10^ï¼-3ï¼*12*10^6/12= 60536 = 0xEC78ã
THx = ECHï¼TLx = 78Hï¼50ms 12MHz THx = 3CHï¼TLx = B0Hï¼10ms THx = D8Hï¼TLx = F0Hã
请问大侠这个式子是怎么来的啊?我刚开始学习单片机,自学呢,看起来比较困难,但是还想搞清楚原委。谢谢大侠赐教,比如11.0592M的晶振想延时26毫秒该怎么设置呢?
追答定时器启动后,会从你的初值开始加数,一个机器周期加一次,加到65535(工作方式一)之后,溢出。12M晶振的51单片机一个机器周期是1微妙。而11.0592M晶振相应的就是(12/11.0592)微秒。想让定时器26ms溢出,需要加多少个数呢?答案是:
n = 26ms/(12/11.0592us); 65535 - n 得到的数为它的初值,定时器启动后,从该初值开始加,加到65535溢出,正好26ms.
具体的设置就是TH1 = (65536 - (11.0592/12)*26000) / 256;
TL1 = (65536 - (11.0592/12)*26000) % 256;
原谅小弟迂腐,为什么后边取模256(和取于256呢)?
追答提交回答的时候居然说我回答的东西有不适合发表的内容,只能截图咯。去我的百度空间看
参考资料:http://hi.baidu.com/%CC%EC%CC%EC%DE%C8%CF%EB/album/item/c7536c1fb4a21ee286d6b6fc.html#
追问我想加你好友可以吗?我的qq849121196(昵称大爱无疆),望能够成为好友!
追答加啦
本回答被提问者采纳51定时器初值怎么算?
首先,51单片机是加一计数,到65536溢出,所以定时时间(经过的脉冲个数,如果一个脉冲是1us,刚好延时50ms是50000个脉冲)是65536减初值 ,初值又分高8位和低8 位,高8位的1代表256,因此高8位的数值所代表的数是256的整数倍,低位最大不超过255,所以一定是除以256之后的余数,用公式是这样:初值...
51定时器初值计算有什么简便算法吗?
51单片机定时器初值计算:void main(void){ s1=1;TMOD=0x01; \/\/使用定时器T0的模式1 TH0=(65536-46083)\/256; \/\/定时器T0的高8位设置初值 TL0=(65536-46083)%256; \/\/定时器T0的低8位设置初值 函数功能:定时器T0的中断服务函数 void Time0(void ) interrupt 1 using 0 \/\/定时器T0...
51单片机定时初值是多少?
1、系统晶振频率是12M,则机器周期=12\/12=1us;2、定时1ms=1*1000=1000us;3、工作在方式0下:最大计数值是2^13=8192;4、定时初值=8192-(1*1000)=7192;5、换算成十六进制数为:定时初值=1C18H。定时器中断是由单片机中的定时器溢出而申请的中断。51单片机中有两个定时器T0和T1。定时\/计...
怎么计算51单片机定时器TH0和TL0的初值,比如我要让定时器20ms溢出一次...
最简单的计算方法就是 TH0=(65536-20000)\/256; TL0=(65536-20000)%256; 20000=20ms 如果1ms就是1000 想弄多少弄多少。。。
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....
51单片机串口通信定时器初值怎么计算?公式和计算原理是什么?
T1,使用定时方式2,其初始值,和晶振频率、波特率、SMOD的关系式如下:T1初值 = 256 - fosc * (SMOD + 1) \/ (384 * 波特率)--我不明白波特率跟这个定时器的关系。麻烦你详细一点!这个关系,是由硬件决定的,只有搞微电子的,才能弄明白。软件人员,编程的时候,会用这个公式即可,也没有...
关于单片机定时器的求算,怎么算出来的
51单片机定时器是“溢出”计时的,所以计算方法是:(假设定时X毫秒(这里设定在溢出范围内),晶振频率是F兆赫兹),那么计算公式是:初值=65536-(X*1000)*(F\/12)
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 ...
单片机定时器初值怎么算?
4、定时初值=8192-(1*1000)=7192;5、换算成十六进制数为:定时初值=1C18H。定时器中断是由单片机中的定时器溢出引起的中断,51单片机中有两个定时器t0和t1。定时/计数器t0和t1由两个8位专用寄存器组成,即定时/计数器t0由th0和tl0组成,t1由th1和tl1组成。此外,还有两个8位特殊功能...
51单片机串口通信定时器初值怎么计算啊?公式和计算原理麻烦说一下...
T1初值 = 256 - fosc * (SMOD + 1) \/ (384 * 波特率)--我不明白波特率跟这个定时器的关系。麻烦你详细一点!这个关系,是由硬件决定的,只有搞微电子的,才能弄明白。软件人员,编程的时候,会用这个公式即可,也没有必要弄明白这个。基本上,也没有几个人,能够弄明白集成电路内部,究竟是...