原创 C51定时器计算工具

2008-10-28 17:12 7314 5 6 分类: MCU/ 嵌入式

https://static.assets-stash.eet-china.com/album/old-resources/2008/10/28/5621eaf3-e26d-4a2e-a28b-cc74e2a07000.rarC51定时器计算工具


  〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
  〓 关于51定时器精确定时的研究 〓
  〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓



◆测试代码:
#include<reg52.h>


void main(void)
{
 TMOD = 0x01;  //定时器T0 工作方式1 16位定时


 TH0=0x3c;  //50ms 65536-50000us
 TL0=0xb0;


 ET0  = 1;  //允许定时器T0中断
 EA   = 1;  //开启总中断


断点: TR0 = 1;  //启动定时器,可以随便放置^_^ TMOD←→while(1)


 while(1);  //无限循环………………


}



void intsert0(void) interrupt 1 using 0  //T0中断服务程序
{
 TH0=0x3c;  //50ms 65536-50000us
 TL0=0xb0;  //软件重新装载!!!
 {
断点:  P0=0x00; //可以处理其他程序却不影响定时器计时工作!!!
  P1=0x00;
  P2=0x00;
  P3=0x00;
  …………        //代码随便写,处理时间不超过定时时间就OK啦!
 }
}



◆实验数据记录 
TH0/TL0=3cb0 T0 16-bit
0.000 397 00
0.050 406 00 0.050 009 00
0.100 412 00 0.050 006 00
0.150 418 00 0.050 006 00
0.200 424 00 0.050 006 00
   50 000+2+2+2=50 006


◆产生的汇编代码:
; FUNCTION main (BEGIN)
0000 758901            MOV     TMOD,#01H
0003 758C3C            MOV     TH0,#03CH
0006 758AB0            MOV     TL0,#0B0H
0009 D2A9              SETB    ET0
000B D2AF              SETB    EA
000D D28C              SETB    TR0  1'
000F         ?C0001:
000F 80FE              SJMP    ?C0001
             ; FUNCTION main (END)


             ; FUNCTION intsert0 (BEGIN)
0000 758C3C            MOV     TH0,#03CH 2'
0003 758AB0            MOV     TL0,#0B0H 2'
0006 758000            MOV     P0,#00H
0009 759000            MOV     P1,#00H
000C 75A000            MOV     P2,#00H
000F 75B000            MOV     P3,#00H
0012 32                RETI       2'
             ; FUNCTION intsert0 (END)


 


◆实验结论推测:
假设要定时的时间为: 50000us 即50ms
则定时器初始值为: 65536+6-50000=15542 (15542)d→(3cb6)h


 


◆推测论证:
TH0/TL0=3cb6 T0 16-bit
0.000 397 00
0.050 400 00  0.050 003 00
0.100 400 00 0.050 000 00
0.150 400 00 0.050 000 00
0.200 400 00 0.050 000 00  OK!推测正确!



◆实验总结:
 T0  工作方式1  16-bit定时器 fosc=12MHz
设要定时的时间为: T
则定时器初始值为: 65536+6-T
【即定时器初始值为:: 65542-T】


 


定时器初始值计算方法:
 TH = (2^n+6-T*fosc/12)/256 //(2^n+6-T*fosc/12)<<8
 TL = (2^n+6-T*fosc/12)%256 //(2^n+6-T*fosc/12)&0xff


若定时器工作方式为0 n=13 TH全8位;TL低5位,高3位为0,没有使用
若定时器工作方式为1 n=16
若定时器工作方式为2 n=8
若定时器工作方式为3 n=8


//以上内容仅供参考~


欢迎大家指正

文章评论1条评论)

登录后参与讨论

用户217401 2009-8-3 23:24

东东是不错,但不知哪里有问题,怎么按照这个计算公式给出的好像不符啊,再仔细看看先
相关推荐阅读
用户149863 2010-05-22 22:40
LCD简单菜单显示
LCD简单菜单显示显示器件为图形型LCD12864(主控芯片KS0108)什么都不带!包含以下文件:LCD菜单(测试)LCD菜单(简单)LCD菜单(界面)LCD菜单(遥控器)希望对大家有用^_^感兴趣...
用户149863 2010-05-22 14:33
LCD12864(KS0108)液晶演示程序
LCD12864(KS0108)液晶演示程序LCD12864(KS0108)液晶演示程序视频: LCD12864演示程序(什么都不带的液晶) 视频演示网址:http://v.youku.com/v_s...
用户149863 2009-10-22 18:27
AVR代码
AVR单片机程序代码集,给需要的朋友们参考呵呵,都是自己一边学一边写的,一个一个字符从键盘敲出来的^_^希望对大家有用:-)呵呵,编译软件为:  ICCAVR V6.31A版本一共七个压缩包,呵呵,分...
用户149863 2009-10-22 15:18
VGA相关资料
VGA相关资料呵呵^_^如果你想玩的就请下载,有很多东西,都是花了我好几个夜晚才搜到的都是网上的资料:-)有兴趣的可以做做哦 包含以下文件夹:├─VGA+2051│  │  共享-----国外优秀电子...
用户149863 2009-10-10 14:46
PS/2 键盘与单片机
程序打包PS/2 键盘与单片机接口用LCD1602显示调试成功所以拿出来给大家分享,希望对大家有用,呵呵^_^用PS/2键盘做系统输入部分蛮方便的哦!可以使用Backspace/Esc/Tab/Cap...
用户149863 2009-08-17 19:54
AVR端口操作宏定义,便于移植
AVR端口操作宏定义头文件(ICCAVRIO.H),便于移植(ICCAVR编译环境) 压缩包里面有网上的相关资料,把它看完,相信你会更加了解红宏定义的^_^还有头文件在ICCAVRIO.H在Inclu...
我要评论
1
5
关闭 站长推荐上一条 /2 下一条