打印

定时器的时间不准

[复制链接]
1534|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
可可球|  楼主 | 2015-10-14 14:18 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 可可球 于 2015-10-14 14:23 编辑

最近用C8051做了块板子,发现延时不准确,不知道什么原因,求助大神们采用的是外部晶掁22.1184MHZ,二分频,应该是11.0592MHz
#include<c8051f020.h>

#define uint unsigned int         //数据类型的宏定义
#define uchar unsigned char

void delay_ms(uint);
void delay_us(uint);

void main()
{
           uint i;
           WDTCN = 0xde;
           WDTCN = 0xad; // 禁止内部看门狗
           XBR2  = 0x40;                                /*使能交叉开关*/
           P2MDOUT  =0xff;
           P74OUT |= 0xf3;
           OSCXCN = 0x77;      // start external oscillator with 22.1184MHz crystal,
                                                          //启用外部晶掁,晶掁22.1184MHZ,二分频,SYSCLK定义为11.0592                                 
           for (i=0; i < 256; i++)       // XTLVLD blanking interval (>1ms)   
           while (!(OSCXCN & 0x80))      // Wait for crystal osc. to settle      
           OSCICN = 0x88;                 // select external oscillator as SYSCLK     
           while(1)
                {
                        delay_us(10);
                        P2=0xff;
                        delay_us(10);
                        P2=0x00;
                }

}

//***********************************************************************
//      延时子程序us
//***********************************************************************
void delay_us(uint us)
{
        uchar k=us;
        while(k--);

}
//***********************************************************************
//      延时子程序ms
//***********************************************************************
void  delay_ms(uint ms)
{
    uchar i,j;
        for(i=0;i<ms;i++)
        {
                for(j=0;j<10;j++)
                delay_us(150);
        }
}以下是主函数里的
while(1)
                {
                        delay_us(10);
                        P2=0xff;
                        delay_us(10);
                        P2=0x00;
                }
在 delay_us()函数给不同的值时,示波器测得的波形
发现delay_us(1)的时候,波形是2.6us,delay_us(10)是8.24us

1us.jpg (3.49 MB )

1us.jpg

10us.jpg (3.51 MB )

10us.jpg

500us.jpg (3.4 MB )

500us.jpg

相关帖子

沙发
m503022388| | 2015-10-14 14:39 | 只看该作者
楼主。。第二根测量线呢?示波器好像不能默认从中间开始测时间把?还是这种示波器能直接测电平持续时间?

使用特权

评论回复
板凳
xyz549040622| | 2015-10-14 16:44 | 只看该作者
delay延时不准很正常。本来就是个大概延时。用定时器就好多了。

使用特权

评论回复
地板
dirtwillfly| | 2015-10-14 17:20 | 只看该作者
不准是正常的,晶振频率都会有误差,更何况是软件延时。
只要差的不是太多就可以了。
想要准确一些,可以使用定时器。

使用特权

评论回复
5
wh6ic| | 2015-10-14 22:07 | 只看该作者
还有更离谱的事情楼主没有发现吗?高电平是2.6uS,低电平是多少?

使用特权

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

本版积分规则

97

主题

675

帖子

1

粉丝