求大神看下这段中断计数程序有什么问题

2019-07-18 10:38发布

void T0_1S(void) interrupt 1         //T0_1S中断子程序开始
{   float tt=0;                                
        TH0=H_0;                            //设置T0计数的高8位
        TL0=L_0;                              //设置T0计数的低8位
        if(++times==20)                      //若达到1S
        {
                times=0;                        //重新计数
                status_F=1;                     //完成测量
                TR1=0;                          //关闭T1
                TR0=0;                           //关闭T0
                DPL=TL1;                        //计数值的低8位
                DPH=TH1;                         //计数值的高8位
                //freq=DPTR;                         //计数值放入freq
            uu=TH1*256+TL1+inte*65536;                        //计算总计数值  
        inte=0;                                                        //清累计溢出计数
       tt=uu/(12*1000000.0/12.0);                //求振荡周期
       ff=(unsigned long int)(1.0/tt);         //频率值       求震荡频率

                }       
        }
void measure(void)
{       
        //float tt=0;
        SCANP=0xff;                         //关闭显示器
        IE=0x8a;                            //1000 1010,启用T0、T1中断
        TMOD=0x51;                          //0101 0001,T1为计数器,T0为定时器,都采用Mode1
        TH0=H_0;                            //设置T0计数器的高8位
        TL0=L_0;                            //设置T0计数器的低8位
        TH1=0;                              
        TL1=0;                               //设置T1归0
        TR0=1;                               //启动T0                                         //测得引脚P3^5为高电平
        TR1=1;  
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
武力戡乱
2019-07-18 18:57
勇敢的心2015 发表于 2015-5-19 12:52
对输入的频率进行计数,然后再对计数值进行相关运算,然后显示

哦,计数,然后定时,然后,做一个差,最后除以时间,求频率?
好吧。
uu=TH1*256+TL1+inte*65536;
TH1是什么类型,TH1*256的后果你考虑了吗?
其他没看!

一周热门 更多>