我用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的晶振 还是说晶振误差了。。。。。。 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.
BTW, the first is adding one operator to that statement.
内部晶振,你还想怎样 millwood0 发表于 2014-5-24 01:37
BTW, the first is adding one operator to that statement.
那个是我习惯性的写法 谢谢 我就想弄明白这个是 定时器的问题还是我程序的问题。。。。。 gliet_su 发表于 2014-5-24 10:45
内部晶振,你还想怎样
文档说内部4M是出厂校正过得 不可能差这么多吧 那个是我习惯性的写法
You don't seem to be able to think.
Try this:
TMR1L+=(65536-500)%256;
And think about why it works.
页:
[1]