P0与P1两个IO口分别接了2组,8个LED/组。
打算实现两者交替亮灭。
写了个几行的代码
#include <reg52.h>
void delayms( unsigned char xms);
void main()
{
unsigned char x;
while(1)
{
P0 = 0x00;
x = P0;
P1 = x;
delayms(5000);
P0 = 0xFF;
x = P0;
P1 = x;
}
}
void delayms(unsigned char xms)
{
unsigned char i,j;
for(i = xms; i>0; i--)
for(j = 120; j>0; j--);
}
从C语言的角度看,代码没问题。但是Keil运行调试的时候只有P0端口的电平有变化。而P1端口的电平一直为0x00,不再变化。
P1与P0口的LED交替亮灭,我已经重新写了另外的代码实现了。
只是不明白,这段看起来没问题的代码,问什么却不能跟自己的想法一样呢?哪位可以帮忙分析分析吗?
几行的代码,就毁了C语言的观。

------解决方案--------------------
你这个是高电平点亮吧?这个不是语言的问题,而是你还没懂单片机。你读P0读到的是P0端口的电平并不是你写进去的数据,而P0端口的电平一直没有改变。所以P1肯定是一样的。
------解决方案--------------------
在17行停下来,然后把P0口都勾上,然后单步执行一步看看
------解决方案--------------------
第16行的意思是再设置P0为输入,所以再读P0的值,还是原来曾经赋值的0x00,赋值给P1,也是0x00,不能实现交替亮灭。
------解决方案--------------------
好像IO的输出1和读入1没有关系
------解决方案--------------------
代码执行到14行停住,下面的代码执行不了。你这延时函数有问题,溢出。
------解决方案--------------------
其他的貌似都没问题。。。还有,你这为什么不能仿真呢,仿真的话这种问题还是很容易解决的

------解决方案--------------------
P1从亮到灭只有两个赋值语句的执行时间,代码没错,有交换变化,只是你无法观测到亮的一瞬间.......