利用定时器0定时查询

[复制链接]
2582|8
 楼主| ksslx 发表于 2008-3-4 08:59 | 显示全部楼层 |阅读模式
void Timer0Interrupt(void) interrupt 1 using 1
{
    
    TF0  =0;//-------------------------Clear the flag of timer0
    TH0=(T0InitBuf&0xFF00)>>8;//-------get the THO
    TL0=T0InitBuf&0x00FF;//------------get the TL0
    
    if(DelayCnt<250)
       DelayCnt++;
    else 
         DelayCnt=0;
    if(DelayCnt%500==0){                    
     NewData = InputPort;     //采集输入端数据                              
    }
  TimerFlag=1;
    }


上面是我的定时器程序,InputPort定义的是单片机的P1口,定时采集P1口的数据赋给NewData.这样子行不行?
xwj 发表于 2008-3-4 09:06 | 显示全部楼层

定时中断进中断程序时会自动清楚TFx

所以这一句没必要
   TF0  =0;//-------------------------Clear the flag of timer0

再就是,你的    DelayCnt 定义的什么类型?如果是8位则这个运算有问题
if(DelayCnt%500==0){                    
     NewData = InputPort;     //采集输入端数据      
 楼主| ksslx 发表于 2008-3-4 09:28 | 显示全部楼层

回复“xwj”

我对DelayCnt定义的类型是unchar,应该是错了,若是改成
if(DelayCnt%200==0){                    
     NewData = InputPort;     //采集输入端数据                              
    }
200在256之内,是不是就可以定时采集数据了啊?谢谢!
 楼主| ksslx 发表于 2008-3-4 16:11 | 显示全部楼层

???

没人回答啊?
ayb_ice 发表于 2008-3-4 17:00 | 显示全部楼层

DelayCnt%500==0

条件永远不成立,因为已经被前面清零,所以NewData = InputPort;     //采集输入端数据程序不会执行...
xwj 发表于 2008-3-4 18:58 | 显示全部楼层

5楼,再去想想:-)

 楼主| ksslx 发表于 2008-3-5 10:25 | 显示全部楼层

这样子应该可以吧?

if(DelayCnt%200==0){                    
     NewData = InputPort;     //采集输入端数据                              
    }

改成上面这个可以吧?
dai_weis 发表于 2008-3-5 12:58 | 显示全部楼层

为什么要这么费力 ?

直接:if (DelayCnt == 200)不好么?
还有那个USING 1 能不能考虑一下,去掉。
会发现好处多多
ayb_ice 发表于 2008-3-5 20:16 | 显示全部楼层

回6楼xwj

不好意思,疏忽了,当等于0时条件成立。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

105

帖子

0

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