下面是写的头文件的一部分,1602的判忙等待函数
#define Busy 0x80
#define CtrlDir P3DIR
#define CLR_RS P3OUT&=~BIT0; //RS = P3.0
#define SET_RS P3OUT|=BIT0;
#define CLR_RW P3OUT&=~BIT1; //RW = P3.1
#define SET_RW P3OUT|=BIT1;
#define CLR_EN P3OUT&=~BIT2; //EN = P3.2
#define SET_EN P3OUT|=BIT2;
void WaitForEnable(void)
{
P4DIR &= 0x00; //将P4口切换为输入状态
CLR_RS;
SET_RW;
_NOP();
SET_EN;
_NOP();
_NOP();
while((P4IN & Busy)!=0); //检测忙标志
CLR_EN;
P4DIR |= 0xFF; //将P4口切换为输出状态
}
中间这一步判忙等待为何要有P4IN,若单独只用
while((Busy)!=0);可以吗?还请各路大神指教
此帖出自
小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
#define BUSY 0x80
然后,#define 声明的宏定义编译器会直接替换,也就是下面代码中出现的BUSY直接替换为0x80
所以判忙的那一行代码就成了这样:
while((P4IN & 0x80)!=0);
如果照你的改法,就是这样:
while((0x80)!=0);
现在自己想一想,哪种才能正常工作呢
一周热门 更多>