STC89C58单片机P2口莫名其妙的问题;求解
时间:10-02
整理:3721RD
点击:
#include<reg52.h>
void main()
{
P1=0x00;
P2=0x00;
P1=0x55;
while(1);
}
以上用破解后的keil3 软件编译通过;P1口接LED,结果的等全亮;怎么调试就发现P2=0x00;这语句不运行;P2是高8位地址线;更换单片机后还是不运行;我总结为
1,不是单片机问题;2,P2口操作不运行
以下是分别调试程序对应hex
P1=0x00;P2=x00;P1=0x55;while(1);
000000 02 00 03 78 7F E4 F6 D8 FD 75 81 07 02 00 0F E4
000010 F5 90 F5 A0 75 90 55 80 FE
P1=0x00;while(1);P1=0x55;while(1);
000000 02 00 03 78 7F E4 F6 D8 FD 75 81 07 02 00 0F E4
000010 F5 90 80 FE
P1=0x00;p1=0x55;while(1);
000000 02 00 03 78 7F E4 F6 D8 FD 75 81 07 02 00 0F E4
000010 F5 90 75 90 55 80 FE
P1=0x00;p2=0xff;P1=0x55;while(1);//运行达到效果
000000 02 00 03 78 7F E4 F6 D8 FD 75 81 07 02 00 0F E4
000010 F5 90 75 A0 FF 75 90 55 80 FE
求解?
void main()
{
P1=0x00;
P2=0x00;
P1=0x55;
while(1);
}
以上用破解后的keil3 软件编译通过;P1口接LED,结果的等全亮;怎么调试就发现P2=0x00;这语句不运行;P2是高8位地址线;更换单片机后还是不运行;我总结为
1,不是单片机问题;2,P2口操作不运行
以下是分别调试程序对应hex
P1=0x00;P2=x00;P1=0x55;while(1);
000000 02 00 03 78 7F E4 F6 D8 FD 75 81 07 02 00 0F E4
000010 F5 90 F5 A0 75 90 55 80 FE
P1=0x00;while(1);P1=0x55;while(1);
000000 02 00 03 78 7F E4 F6 D8 FD 75 81 07 02 00 0F E4
000010 F5 90 80 FE
P1=0x00;p1=0x55;while(1);
000000 02 00 03 78 7F E4 F6 D8 FD 75 81 07 02 00 0F E4
000010 F5 90 75 90 55 80 FE
P1=0x00;p2=0xff;P1=0x55;while(1);//运行达到效果
000000 02 00 03 78 7F E4 F6 D8 FD 75 81 07 02 00 0F E4
000010 F5 90 75 A0 FF 75 90 55 80 FE
求解?
P2是高8位地址线;
这句话你说明白了!你想做什么?用地址数据线吗?
不明白,为什么更换单片机之后不运行了
没用过这款,做成普通的IO口需不需要配置?
首先判断每个led的正负极是否连接都一致是否都正确,然后分别声明每个led的i/o口,
sbit led0 P1^0;
sbit led1 P1^1;
sbit led2 P1^2;
……依此类推到led7;然后分别对各个led送0或者1:
while(1)
{
led0=0;//每次只修改一个灯,对灯送0,看状态;然后修改程序送1,再看状态,灯是否能正常亮灭;
}
是应为不运行才更还单片机!结果是一样的,判断不是单片机出问题的!
P1口是好的,就只是P2口拉低时程序就停那里啦!谢谢您提供的答案!
我怀疑是这款单片机本身问题!
哦,我还以为你要用地址数据总线呢。
欢迎来Proteus板块学习
http://bbs.elecfans.com/forum.ph ... p;extra=#pid3495958
这是我写第一个开发板。里面有地址数据总线的用法。
谢谢!
单片机IO口供电能力有限。你确定P1与P2连接一样,比如P1加三极管P2没有加,如果是在开发版上可能就是这种。
您的分析很有道理!我用的就是开发板;P1=0x00;运行了,P2=0x00;程序就停了,后面都不运行了,今天又更换了电源试了还是不行!悲剧了!
原理图可以给我一份吗,我也入手单片机不久,我看一下。
P2口硬件上有加上拉电阻吗?STC89C52这块单片机要加上拉电阻,不知道你这块89C58要不要上拉电阻。