当前位置: 代码迷 >> 单片机 >> 毁了C语言看的几行单片机代码。麻烦分帮忙分析分析
  详细解决方案

毁了C语言看的几行单片机代码。麻烦分帮忙分析分析

热度:56   发布时间:2016-04-28 14:57:58.0
毁了C语言观的几行单片机代码。麻烦分帮忙分析分析
本帖最后由 weilaiqing 于 2013-06-24 15:32:34 编辑
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从亮到灭只有两个赋值语句的执行时间,代码没错,有交换变化,只是你无法观测到亮的一瞬间.......
  相关解决方案