同一个程序换一片单片机定时时间不一样什么问题

[复制链接]
104|14
 楼主 | 2020-2-9 12:25 | 显示全部楼层 |阅读模式
PIC12F508同一个程序,换一片单片机定时时间不一样什么问题。

使用特权

评论回复
| 2020-2-9 12:33 | 显示全部楼层

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
 楼主 | 2020-2-9 12:36 | 显示全部楼层
是不是哪里配置不对。程序应该额米有问题吧。
#include<pic.h>
__CONFIG(0X00A);
#define uchar unsigned char
#define uint unsigned int
#define LED GP2
#define Key GP1
volatile uchar Flag,Flag1,Flag2;
volatile uint Count=0,sum=0;
void Delay_ms(uchar a)
{
        uint i,j;
        for(i=0;i<a;i++)
                for(j=0;j<1000;j++);
}

void Register_Init()     // 配置定时器
{
        TMR0 = 0X00;         // 4m ,64分频,T0 =255-50ms/((4/4*64)us/1000)
}
void GPIO_Port_Init()    //配置I/O口
{
        TRIS =0X02 ;  //GP2S 输出,GP1输入;
}
void main()
{
        Delay_ms(5000);
        LED = 1;
    GPIO_Port_Init();
        OPTION = 0X16;        
        Register_Init();
    Flag1 = 0;
        Flag = 0;
        while(1)
        {   
                if(Key==0)
                     {
                                   Flag = 1;
                            }
            if(TMR0 >= 0XEA)         // 查询是否到达时间
                {
                        OPTION = 0X16;
                        TMR0 = 0X00;         // 定时器初值,定时10MS
                        if(Flag ==1)
                        {                                 
                                switch (Flag1)
                                {
                                        case 0: LED = 0;Count++;
                                                        if(Count==18930)
                                                        {
                                                                Count=0;
                                                                Flag1 = 1;
                                                                LED = 1;                        
                                                        } break;
                                        case 1: Count++;
                                                        if(Count==469)
                                                        {
                                                                Count=0;
                                                                Flag = 0;
                                                                Flag1 = 0;
                                                        } break;

                                default :  break;
                                }                                         
                          }                                                                                
             }
    }        
}

使用特权

评论回复
| 2020-2-9 12:39 | 显示全部楼层
如果差别不大,那就是正常的。

使用特权

评论回复
 楼主 | 2020-2-9 12:42 | 显示全部楼层
10分钟差别有20秒那么多哦

使用特权

评论回复
| 2020-2-9 12:48 | 显示全部楼层
那是有点大

使用特权

评论回复
| 2020-2-9 12:54 | 显示全部楼层
20/(10*60)=0.033

使用特权

评论回复
 楼主 | 2020-2-9 12:56 | 显示全部楼层
我用示波器看了,一个指令差0.04us,10分钟就是600000000us,600000000*0.04=24000000uS=24S,相差的时间大概就是这么多。datasheet上面说晶振有正负百分之1误差

使用特权

评论回复
| 2020-2-9 12:59 | 显示全部楼层

if(TMR0 >= 0XEA)         // 查询是否到达时间

这个是10MS吗,我看不出来是怎么来的

使用特权

评论回复
 楼主 | 2020-2-9 13:03 | 显示全部楼层
不是10MS,程序改过了,不过重点不是这个10MS.而是同一款单片机,运行的时间不一样

使用特权

评论回复
| 2020-2-9 13:07 | 显示全部楼层
要达到1%精度是要把工厂的校准数据写到OSCCAL寄存器的,没看到你的软件哪里有写校准数据。

使用特权

评论回复
| 2020-2-9 13:13 | 显示全部楼层
晶振的问题吧

使用特权

评论回复
| 2020-2-9 13:16 | 显示全部楼层
你拿 这种精度的定时器,做这么长的定时积累的误差当然大了。

使用特权

评论回复
| 2020-2-9 13:18 | 显示全部楼层
不行的话外置一个RTC 芯片不过估计成本不行,你看下能提高晶振的精度不。

使用特权

评论回复
 楼主 | 2020-2-9 13:21 | 显示全部楼层

哦,那我就知道怎么回事了,多谢大家

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表