前行者 发表于 2024-12-29 23:25:41

用定时器T11定时不准怎么解决

如题,下面是代码,


void main()
{
        P_SW2 |= 0x80;                //使能访问XFR寄存器
        WTST = 0;                        //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
       EAXFR = 1;                       //扩展寄存器(XFR)访问使能
       CKCON = 0;                         //提高访问XRAM速度
       
        //**********    配置I/O口状态,I/O口必须先配置好以后才能使用
        P0M1 = 0x00;   P0M0 = 0x00;   //设置为准双向口
       P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
      P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
       P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
       P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
       P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
       P6M1 = 0x00;   P6M0 = 0x00;   //设置为准双向口
       P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口
       
        time11_Init();
        P2 = 0x0f;


       
        while(1)
        {
                if(a>=1000)
                {
                        a=0;
                        P2=~P2;
                }
        }
}

void time11_Init()                //T11定时器只有16位自动重装模式,定时1毫秒
{
        T11CR = 0x10;                //1T模式
        T11PS = 0x00;                        //预分频:不分频
        T11H = (65536-(MAIN_Fosc/1000))/256;        //       
        T11L = (65536-(MAIN_Fosc/1000))%256;        //       
        T11CR |= 0x82;               
        EA = 1;                                //打开总中断

}

void time11() interrupt 13                // T11定时器入口为13
{
        a++;
}


请教大神们,

soma 发表于 2024-12-30 00:40:41

重定向定时器11的中断的汇编指令写了吧。

前行者 发表于 2024-12-30 08:51:05

soma 发表于 2024-12-30 00:40
重定向定时器11的中断的汇编指令写了吧。

写了,重定向不写,定时器不工作,现在定时器工作,但是定时不准

_奶咖君_ 发表于 2024-12-30 09:05:27

不准,,适合你预期的差多少。。如果使用内部晶振,,差个1% 千分之几都是正常的,,,如果是差距很大再检查一下是否是下载设置系统频率有问题,,因为我看你用到了 这个MAIN_Fosc宏定义。。

前行者 发表于 2024-12-30 09:45:52

原因找到了,就是在下载的时候,把下载软件中的设置成与单片机运行的频率一致,现在不明白为什么我在系统中选择的是系统时钟,
在下载软件上面还要设置IRC的频率呢

前行者 发表于 2024-12-30 09:48:20

_奶咖君_ 发表于 2024-12-30 09:05
不准,,适合你预期的差多少。。如果使用内部晶振,,差个1% 千分之几都是正常的,,,如果是差距很大再检 ...

谢谢,我把下载软件设置程序允许时的IRC频率那里改成单片机允许的频率就正常了

科学妞妞 发表于 2024-12-30 09:54:40

页: [1]
查看完整版本: 用定时器T11定时不准怎么解决