请问PIC12F508的没有溢出标志的TMR0怎么用?(急)

[复制链接]
4092|11
 楼主| 夜阑冰凌 发表于 2011-11-11 16:17 | 显示全部楼层 |阅读模式
PIC12F508的TMR0没有溢出标志,请问怎么使用TMR0实现精确定时?
比如我想实现4和3秒的定时,实现灯LED1亮3秒灭掉,接着LED2亮4秒灭掉,LED1再亮3秒,
使用TMR0定时,请哪位高手高手高高手花个几分钟时间用C语言写个使用TMR0定时的程序!

   不胜感激!!!
asspeed 发表于 2011-11-11 16:28 | 显示全部楼层
非常非常非常精确是不可能的....................................
wm20031015 发表于 2011-11-11 19:54 | 显示全部楼层
秒级没有问题,用循环实时查询寄存器
Light_David 发表于 2011-11-12 20:20 | 显示全部楼层
12F508這顆芯片算比較另類的了,整個芯片就幾個內核寄存器,方嚮寄存器和選項寄存器用兩個專用的指令來實現(沒辦法讀)弄個雞肋的T0確沒有溢出標識可以用,那還要它搞什麽?....真抓狂,呵呵:lol
xaq79 发表于 2011-11-12 22:43 | 显示全部楼层
动动脑子,其实很简单,
 楼主| 夜阑冰凌 发表于 2011-11-14 10:25 | 显示全部楼层
没有 高手帮忙具体写下吗?
xaq79 发表于 2011-11-14 10:38 | 显示全部楼层
在TMR0未溢出前,查询TMR0,根据TMR0值来判断时间,
yewuyi 发表于 2011-11-14 10:47 | 显示全部楼层
void main(void)
{
InitTMR0();
while(1){
           if(TMR0已经发生定时翻转){}
           else{}
           }
}
 楼主| 夜阑冰凌 发表于 2011-11-14 13:34 | 显示全部楼层
8# yewuyi
请问 怎么确定已经发生定时翻转?
   有人说是查询反转方式,但是我还是不明白具体该怎么写?请详加指导!!
yewuyi 发表于 2011-11-14 14:22 | 显示全部楼层
8# yewuyi  
请问 怎么确定已经发生定时翻转?
   有人说是查询反转方式,但是我还是不明白具体该怎么写?请详加指导!!
夜阑冰凌 发表于 2011-11-14 13:34


比较定时器当前值和上一次的值的大小,如果当前值大于等于上一次值,则说明没有反转,否则即为翻转
 楼主| 夜阑冰凌 发表于 2011-11-14 16:33 | 显示全部楼层
比较定时器当前值和上一次的值的大小,如果当前值大于等于上一次值,则说明没有反转,否则即为翻转
yewuyi 发表于 2011-11-14 14:22


void time0()
{
        if(TMR0 < timer)
        {
                ms += 0x4000;
        
        }
        else
        {
                tmr0=timer;
        }        
}
void time()
{
        if(ms>0xc350){ms-=0xc350;ms_50++;}
        if(ms_50>20){ms_50=0;s++;}
        if(s==3)
        {t1=1;}
        if(s>7){s=0;t2=1;}        
}
请问我这样写行吗? 定时器64分频,每次计满溢出用去64*256=16387=0x4000个指令周期,我让ms+=0x4000,如果ms>0xc350,说明过去50ms,ms_50>20,说明过去50*20=1秒,如果s=3 ,说明过去3秒,t1置1,s>7,t2置1,说明过去7秒,

请指点,我这样写有问题吗?
yewuyi 发表于 2011-11-14 20:35 | 显示全部楼层
不好意思,俺不喜欢看别人的代码,具体是否适用,自己可以动手实际演算一下。

另外,很多年前,俺也曾经在这个版面发过一个程序结构,那个帖子可能讲的更详细点,你自己翻翻看是否能找出来。

道理你应该已经明白,具体需要自己动手。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:天高任鸟飞 海阔凭鱼跃

1

主题

8

帖子

1

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