本帖最后由 liebecl 于 2015-5-25 08:21 编辑
main函数我就没写了。
最后一个函数是计算频率的
/**********************************************************
* 名称: timer0()
* 功能: 定时器1,每50000us中断一次。
* 入口参数:
***********************************************************/
void timer0() interrupt 1
{
EA =0;
TR0=0;
TR1=0;
TL0=0xFF; //重装初值 定时50000us OX4BFFH
TH0=0x4B;
tem0=TL1; //读取50ms中所记脉冲个数
tem1=TH1;
TL1=0x00; //定时器1清零
TH1=0x00;
TR0=1;
TR1=1;
EA=1;
}
/************************************************************
* 名称: timer1()
* 功能: 计数器,用于计数将555输出的频率,以计数相对湿度。
* 入口参数:
*************************************************************/
void timer1() interrupt 3 //T1中断,表示计数的脉冲溢出,超出了可测量的频率范围(在50ms内计数达65535)
{ //显然在这里不可能。所以重新启动。
EA =0;
TR0=0;
TR1=0;
TL0=0x00; //重装初值 定时50000us
TH0=0x4C;
TL1=0x00; //定时器1清零
TH1=0x00;
TR0=1;
TR1=1;
EA=1;
}
void Init_timer()
{
TMOD=0x51; //0101 0001 定时器1在方式1下工作16位计数器 定时器0在方式1下工作16位定时器
TL0=0x00; //定时器0初值 定时50000us
TH0=0x4C;
TL1=0x00; //定时器1清零
TH1=0x00;
ET0=1; //使能定时器0中断
ET1=1; //使能定时器1中断
EA=1; //使能总中断
TR0=1; //开始计时
TR1=1;
}
void tran()
{
f=tem1;
f=(f<<8)|tem0; //计算出50ms中所记脉冲个数
f=f*20; //50ms*20=1000ms=1s 1秒钟所记脉冲个数等于频率
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>