各位大神好,以下程序用于输入捕获,为什么刚开始的时候我没有位定义即没有定义sbit T0 = P3^2; 直接用位去判断 while(1 == P3^2) 程序会停在这里,但是当我改为位定义的时候就可以了,不会程序不会停在这里
/*******************************************************
* 函数名称:TIMER_Capture
* 功 能:输入捕获,捕获高电平时间,也可以转换成频率
* 入口参数:无
* 出口参数:freq:返回输入T0(P3^2)的频率值,也可以不计算,
* 省略掉freq = 1000000.0/freq/2+0.5; 返回值就是捕获的时间
* 范 例:frequent = TIMER_Capture();
* 说 明:如果要改变定时时间只要改变i的值即可
* 其 他:已经经过测试成功
*******************************************************/
sbit T0 = P3^2;
unsigned int TIMER_Capture(void)
{
unsigned int freq = 0;
TMOD = 0x09; //T0初始化,T0工作于方式1、定时、GATE置1
TL0 = 0x00;
TH0 = 0x00;
while(1 == T0); //这里要用位定义的形式,实验成功了。但是用while(1 == P3^2)程序会停在这里??就这个地方不知道什么原因求大神指点
while(T0 == 0); //等待 升高
TR0 = 1; //启动计数器
while(T0 == 1); //等待 下降
TR0 = 0; //停止计数器
freq = 256*TH0 + TL0; //计算计数时间 这里返回的是捕获的时间12M单片机定时器12分频:单位us
freq = 1000000.0/freq/2+0.5; //经过计算转换成频率值,这里+0.5是因为计算机采用只舍不入
return freq;
}
|