打印

利用定时器0定时查询

[复制链接]
1594|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 | 只看该作者

???

没人回答啊?

使用特权

评论回复
5
ayb_ice| | 2008-3-4 17:00 | 只看该作者

DelayCnt%500==0

条件永远不成立,因为已经被前面清零,所以NewData = InputPort;     //采集输入端数据程序不会执行...

使用特权

评论回复
6
xwj| | 2008-3-4 18:58 | 只看该作者

5楼,再去想想:-)

使用特权

评论回复
7
ksslx|  楼主 | 2008-3-5 10:25 | 只看该作者

这样子应该可以吧?

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

改成上面这个可以吧?

使用特权

评论回复
8
dai_weis| | 2008-3-5 12:58 | 只看该作者

为什么要这么费力 ?

直接:if (DelayCnt == 200)不好么?
还有那个USING 1 能不能考虑一下,去掉。
会发现好处多多

使用特权

评论回复
9
ayb_ice| | 2008-3-5 20:16 | 只看该作者

回6楼xwj

不好意思,疏忽了,当等于0时条件成立。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

105

帖子

0

粉丝