[求助]最简单的LED实验,太怪异了。。。

[复制链接]
1792|12
 楼主| poplaji 发表于 2013-4-26 01:03 | 显示全部楼层 |阅读模式
我的开发板四个LED共阳极接法,分别接IO口GPB5-8,我试了一个最简单的LED实验,点亮一个LED。。。。
就3句。。
rGPBCON=0x00015400;  //设置GPB5-8端口为输出
rGPBDAT=0x00000020;   //第一个灭,其余亮
Delay(1);
照理说应该LED闪一下就灭了。。。。可是这个LED灯一直亮。。。
后来我加了一句,代码如下。

rGPBCON=0x00015400;  //设置GPB5-8端口为输出
rGPBDAT=0x00000020;   //第一个灭,其余亮
Delay(1);
rGPBDAT=0x00000000;   //全亮
结果还是一直亮三盏等,后面那个全亮的没反应。。。
好诡异。。。。
阿南 发表于 2013-4-26 09:15 | 显示全部楼层
把完整的代码放上来,看看

评论

我启动文件是用的开发板自带的,main函数里面原来的东西我都删掉了,就这几句。 而且我把delay函数注释掉了,其实就两句。灯会一直保持一个状态。  发表于 2013-4-26 11:16
jlass 发表于 2013-4-26 09:20 | 显示全部楼层
rGPBDAT=0x00000020;   //第一个灭,其余亮

你把这句改成rGPBDAT=0x00000040;或者rGPBDAT=0x00000080;试试
我估计你这句就没运行

评论

好的,谢谢。  发表于 2013-4-26 11:02
 楼主| poplaji 发表于 2013-4-26 11:17 | 显示全部楼层
阿南 发表于 2013-4-26 09:15
把完整的代码放上来,看看

我要把启动文件那些帖上来么?
ps:每次见到大侠都很激动!!!
 楼主| poplaji 发表于 2013-4-26 11:18 | 显示全部楼层
jlass 发表于 2013-4-26 09:20
rGPBDAT=0x00000020;   //第一个灭,其余亮

你把这句改成rGPBDAT=0x00000040;或者rGPBDAT=0x00000080;试试 ...

试过了,改成4第二盏灭,改成8第三盏灭。。。。但是会一直把这个状态保持下去。。。。
jlass 发表于 2013-4-26 12:58 | 显示全部楼层
rGPBDAT=0x00000040;
Delay(1);
rGPBDAT=0x00000080;

改成这样是什么结果
如果还是rGPBDAT=0x00000080;这句无效的话,去看一下rGPBDAT的寄存器是不是这么控制的。

评论

我在去试试,DWN蓝屏用不了了,刚解决。  发表于 2013-4-26 13:42
 楼主| poplaji 发表于 2013-4-26 13:22 | 显示全部楼层
刚做了按键中断的实验,一点问题都没有。。。。就是改了main函数的内容。
 楼主| poplaji 发表于 2013-4-26 13:59 | 显示全部楼层
jlass 发表于 2013-4-26 12:58
rGPBDAT=0x00000040;
Delay(1);
rGPBDAT=0x00000080;

程序是有反应了,有一个灯状态切换的过程的,是会保持在最后一个状态,就是rGPBDATA=0x00000080,但是我不是循环的啊,所以程序就结束了啊,怎么等还会亮呢?
 楼主| poplaji 发表于 2013-4-26 14:01 | 显示全部楼层
阿南 发表于 2013-4-26 09:15
把完整的代码放上来,看看

#include <stdlib.h>
#include <string.h>
#include "def.h"
#include "option.h"
#include "2440addr.h"

void delay(unsigned char);
void Main(void)
{
        rGPBCON=0x00015400;  //设置GPB5-8端口为输出
        /*rGPBDAT|=(1<<5);
        delay(1000);
        rGPBDAT|=(1<<6);
        delay(1);*/
        rGPBDAT=0x00000040;
        delay(5000);
        rGPBDAT=0x00000080;
}

void delay(unsigned char num)
{
        unsigned char i,j;
        for(i=0;i<num;i++)
                for(j=0;j<255;j++);
}


会一直停留在rGPBDAT=0x00000080这个状态下的。但是我并不是死循环来运行程序,可程序已经结束了?
 楼主| poplaji 发表于 2013-4-26 14:04 | 显示全部楼层
看了下启动文件bl Main后面一句是b   .的死循环,是不是这样的,我的main程序结束了,但是我的IO口还保留了最后一次我输入的状态值,但程序还在执行?
阿南 发表于 2013-4-26 14:26 | 显示全部楼层
你的main肯定不能结束呀,结束了程序就跑飞了,用个While把他循环起来

评论

那我知道了。。。谢谢了  发表于 2013-4-26 15:56
huangxz 发表于 2013-4-26 15:08 | 显示全部楼层
阿南 发表于 2013-4-26 14:26
你的main肯定不能结束呀,结束了程序就跑飞了,用个While把他循环起来

呵呵,是啊,测试程序是不能让main()有返回的机会的

评论

好的,谢谢了!~  发表于 2013-4-26 15:56
jlass 发表于 2013-4-26 15:44 | 显示全部楼层
poplaji 发表于 2013-4-26 13:59
程序是有反应了,有一个灯状态切换的过程的,是会保持在最后一个状态,就是rGPBDATA=0x00000080,但是我 ...

貌似就应该这样的吧

评论

我以为程序执行完就完事儿了呢。。。  发表于 2013-4-26 15:57
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

62

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部