打印
[PIC®/AVR®/dsPIC®产品]

51单片机的定时器定时为何不精准?

[复制链接]
472|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lvsezhidu|  楼主 | 2025-4-17 10:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
   因测试示波器需要,用51单片机产生方波,为了精准,决定用定时器,结果波形未达到要求,不知为何?代码如下:
#include <reg51.h>                        //51单片机头文件
#define LED P0

#define  T0_CNT   1    //定时时间1us,12MHZ晶振
// =========主程序==========================
void main(void)
{           
   TMOD = 0x02;                                     //T0模式2,定时
   //IE = 0x82;                                     //使能T0中断
   EA = 1; ET0 = 1;                                 //使能T0中断
         TH0 = 256-T0_CNT ;      //载入定时初值
   TL0 = 256-T0_CNT ;      //载入定时初值
   TR0 = 1;                                             //启动T0
   while(1);                                           //等待中断
}
//======== T0中断=========================
void T0_zd (void) interrupt 1          //中断编号1
{       
           LED = ~LED;      //   
}
  Proteus 8.6软件仿真,结果是高低电平各10us的方波,把T0_CNT一直增加到10,结果都是一样,怀疑是  Proteus仿真软件的问题,下载到单片机里用示波器检测,结果仍是如此。把T0_CNT一直增加到11,则产生低电平10us,高电平12us的矩形波,下载到单片机里用示波器检测也是如此;把T0_CNT一直增加到12,则产生周期为24us的方波,下载到单片机里用示波器检测也是如此;把T0_CNT一直增加到13,则产生12us+14us的矩形波,下载到单片机里用示波器检测基本是周期24us方波;把T0_CNT一直增加到14,则产生接近周期28us的方波,高低电平持续时间略有差异,下载到单片机里用示波器检测也是如此;把T0_CNT一直增加到15,则产生接近周期30us的方波,高低电平持续时间略有差异,下载到单片机里用示波器检测也是如此;把T0_CNT一直增加到16,则产生接近周期32us的方波,高低电平持续时间基本相同,下载到单片机里用示波器检测也是如此;把T0_CNT一直增加到19,则产生接近周期38us的方波,高低电平持续时间还是有差异,下载到单片机里用示波器检测也是如此;把T0_CNT一直增加到20,则产生接近周期40us的方波,高低电平持续时间相同,下载到单片机里用示波器检测也是如此;T0_CNT大于20,则是稳定的方波,开发板单片机型号STC89C52RD,看来51单片机的定时器也不是很准确,不知何故?请高手解答一下。

使用特权

评论回复
沙发
稳稳の幸福| | 2025-4-17 16:17 | 只看该作者
可以用定时器做,定时器中断实现翻转输出。

使用特权

评论回复
板凳
coody| | 2025-4-17 22:23 | 只看该作者
定时器是一个数字外设,本身不会导致误差,其精度跟你的主频一样的。
你应该使用STC这种51,定时器能自动取反IO高速输出的,不需要中断,因为进出中断需要时间。

使用特权

评论回复
地板
丙丁先生| | 2025-4-18 10:47 | 只看该作者
ai89c51u有示波器例程啊。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

22

帖子

0

粉丝