标题: 关于STC89C52RC单片机的P1口输出 [打印本页]

作者: Egr    时间: 2019-11-9 15:33
标题: 关于STC89C52RC单片机的P1口输出
单片机设计,在一个简单的用P1口输出数据上出了问题,百思不得其解,烦请各位前辈高手帮忙指正下哪里做得不对哈,谢谢~
  方便起见就把程序里这个部分单拿出来了,下面是代码:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. void main()
  4. {               
  5.    unsigned char i;        
  6.    while(1)
  7.   {
  8.      for(i=0;i<16;i++)
  9.        P1=i;
  10.   }
  11. }

复制代码
非常简单的一段代码……电路图里将P1的低四位依次和74HC154的地址线相连,目的是让154依次选中Y0~Y15。但是生成HEX文件放到Proteus里仿真时完全不对,输出到154地址线上的数据变成0111,1110,0000,0101,1100,1011,1110... 看不出规律,都乱套了

作者: csmyldl    时间: 2019-11-9 17:37
给出的程序没有问题,不妨就编译此程序进行调试,电路依然是那个电路,再去观察P1口的变化
作者: bh2030693    时间: 2019-11-9 18:22
程序中有没有时间间隔?例如:

  1. for (i = 0; i < 16; i++) {
  2.     P1 = i;
  3.     Delay_ms(500);
  4.     }
复制代码

另外说句题外话,写代码还是规范好,大括号建议不要省略。


作者: Egr    时间: 2019-11-9 18:38
csmyldl 发表于 2019-11-9 17:37
给出的程序没有问题,不妨就编译此程序进行调试,电路依然是那个电路,再去观察P1口的变化

emmm,请问怎样编译来调试呢,keil里不是点了编译就得到了hex文件吗
作者: wulin    时间: 2019-11-9 19:21
本帖最后由 wulin 于 2019-11-10 06:48 编辑

单从楼主写的这段代码看没有什么问题,如果实际应用程序中P1高4位端口还有其它用途,就要对P1作字节操作,保持高4位端口状态不变。
#include <reg52.h>
void main()
{               
        unsigned char i;        
        P1=0xff;
        for(i=0;i<16;i++)
        {
                P1&=0xf0;
                P1|=i;
        }
        while(1);
}





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1