单片机1602一个读忙程序的问题,请大神赐教???

单片机1602一个读忙程序的问题,请大神赐教???,第1张

这个是典型的关于51单片机的问题,所有的讲51单片机的书上都会指出,

它的端口是弱上拉的结构,读取端口状态之前必须写1。

下面说一下为什么读之前需要先写1.

写1,写的是输出锁存器,读取,读得是端口的状态,或者说是外部输入。这两个 *** 作访问的硬件是不一样的。

输出锁存器输出1的时候,外部电路可以把端口的高电平拉成低电平,因为51是弱上拉。反之,输出锁存器输出0的时候,外部电路是很难把端口的低电平拉成高电平的,拉成高电平就意味着芯片的管脚损坏。

所以,读之前,输出必须写1,这样外部输入可以是高,也可以是低,不会损坏芯片的管脚。反之,如果写0,那么外部电路只能是低电平,如果是高电平,要么读不到,要么管脚损坏。

当然,具体管脚上的硬件要比这里说的复杂,但原理上大概是这样。

回到你的问题,

P1=0xFF是写P1的输出,让输出维持高电平,或者说弱上拉状态。

P1&0x80并不是你想的0xFF&0x80,而是取P1的当前输入的状态与0x80进行与运算。

void busy_test()//检测lcd是否忙

{

    u8 st            //忙状态标志 0:不忙,0x80:忙 

    if(f_init==0)     //如果某个东西没有初始化

    {

         return      // 退出忙判断,不执行下面的代码

    }

    lcd=0xff         // 先往数据端口赋高电平,便于读数据 

    rs=0             // 读忙设置

    rw=1//读

    do

    {

        e=1          // 数据端口读写使能

        st=lcd       // 读数据端口的值

        e=0          // 禁止数据端口读写

    }

    while(st&0x80)   // 如果忙位BF为1,就一直读端口数据,直到为0才退出忙判断。

                      // BF:忙标志位,为数据端口的BIT7位。所以为0x80

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12126279.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存