开始 发表于 2014-5-24 00:51:02

我用PIC12F675 定时器1 定时的误差随定定时的时间成对比

#include"main.h"

uchar tt;
__CONFIG(0x3184);

void delayms(uint num)
{
        uint x,y;
        for(x=num;x>0;x--)
                for(y=108;y>0;y--);
}
void init(void)
{
        OPTION = 0x00;                                   //T0不分频,内部定时器,A口上拉使能 时钟
        CMCON=0Xff;                                          //关比较器
        ADON = 0;                                       //A/D转换关闭
        ANSEL=0;                                               //设置成数据口
        TRISIO=0x08;                                           //GPIO4 配置为输入引脚(三态) 0为输出,1为输入
        WPU=0X08;                                                //上啦寄存器        0为禁止上啦,1为上啦
        GPIO = 0xCf;                                           //I/O口拉高
               
    PIE1=0X01;                                                //使能溢出中断
    TMR1H=0;
    TMR1L=0;
    T1CON=0X01;                                           //TIMER1使能
    TMR1IF=0;                                                //TMR1 溢出中断标志位
    PEIE=1;                                                        //外设中断使能位
    TMR1IE=1;                                                //TMR1 溢出中断使能位
    GIE=1;                                                        //开全局中断
}

void main ()
{
        uint i;
        init();
    while(1)
        {
               
//                i=((((uint)TMR1H)<<8)+TMR1L);
//                if(i>=100)
//                {
//                        i=0;
//                        TMR1H=0;
//                    TMR1L=0;
//                    GPIO5=!GPIO5;
//                }
                NOP();
        }
       
       
}
void interrupt time1(void)
{
    if(INTF==1)
    {
       INTF=0;
                  //计数器加1
    }   
        if(TMR1IF==1)        //这样才可以判断中断;
    {
               TMR1H=(65536-500)/256;
            TMR1L=(65536-500)%256;   
           TMR1IF=0;
           GPIO5=!GPIO5;
    }
   
}


有谁知道这是怎么回事不我用的是内部4M的晶振 还是说晶振误差了。。。。。。

millwood0 发表于 2014-5-24 01:36:46

                TMR1H=(65536-500)/256;
            TMR1L=(65536-500)%256;   

When the execution runs to this point, what do you think is the value of TMR1L?

有谁知道这是怎么回事不

You have no idea about how timers work.

millwood0 发表于 2014-5-24 01:37:21

BTW, the first is adding one operator to that statement.

gliet_su 发表于 2014-5-24 10:45:10

内部晶振,你还想怎样

开始 发表于 2014-5-24 22:35:47

millwood0 发表于 2014-5-24 01:37
BTW, the first is adding one operator to that statement.

那个是我习惯性的写法 谢谢 我就想弄明白这个是 定时器的问题还是我程序的问题。。。。。

开始 发表于 2014-5-24 22:37:31

gliet_su 发表于 2014-5-24 10:45
内部晶振,你还想怎样

文档说内部4M是出厂校正过得 不可能差这么多吧

millwood0 发表于 2014-5-25 05:54:44

那个是我习惯性的写法

You don't seem to be able to think.

Try this:

TMR1L+=(65536-500)%256;   

And think about why it works.

页: [1]
查看完整版本: 我用PIC12F675 定时器1 定时的误差随定定时的时间成对比