微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 位定义问题

位定义问题

时间:10-02 整理:3721RD 点击:
各位大神好,以下程序用于输入捕获,为什么刚开始的时候我没有位定义即没有定义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;
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top