找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2562|回复: 4
打印 上一主题 下一主题
收起左侧

关于STC89C52RC单片机的P1口输出

[复制链接]
跳转到指定楼层
楼主
ID:638656 发表于 2019-11-9 15:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机设计,在一个简单的用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... 看不出规律,都乱套了
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:235200 发表于 2019-11-9 17:37 | 只看该作者
给出的程序没有问题,不妨就编译此程序进行调试,电路依然是那个电路,再去观察P1口的变化
回复

使用道具 举报

板凳
ID:245004 发表于 2019-11-9 18:22 | 只看该作者
程序中有没有时间间隔?例如:

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

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

回复

使用道具 举报

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

emmm,请问怎样编译来调试呢,keil里不是点了编译就得到了hex文件吗
回复

使用道具 举报

5#
ID:213173 发表于 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);
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表