打印

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

[复制链接]
1299|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 | 只看该作者
把完整的代码放上来,看看

使用特权

评论回复
评论
poplaji 2013-4-26 11:16 回复TA
我启动文件是用的开发板自带的,main函数里面原来的东西我都删掉了,就这几句。 而且我把delay函数注释掉了,其实就两句。灯会一直保持一个状态。 
板凳
jlass| | 2013-4-26 09:20 | 只看该作者
rGPBDAT=0x00000020;   //第一个灭,其余亮

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

使用特权

评论回复
评论
poplaji 2013-4-26 11:02 回复TA
好的,谢谢。 
地板
poplaji|  楼主 | 2013-4-26 11:17 | 只看该作者
阿南 发表于 2013-4-26 09:15
把完整的代码放上来,看看

我要把启动文件那些帖上来么?
ps:每次见到大侠都很激动!!!

使用特权

评论回复
5
poplaji|  楼主 | 2013-4-26 11:18 | 只看该作者
jlass 发表于 2013-4-26 09:20
rGPBDAT=0x00000020;   //第一个灭,其余亮

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

试过了,改成4第二盏灭,改成8第三盏灭。。。。但是会一直把这个状态保持下去。。。。

使用特权

评论回复
6
jlass| | 2013-4-26 12:58 | 只看该作者
rGPBDAT=0x00000040;
Delay(1);
rGPBDAT=0x00000080;

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

使用特权

评论回复
评论
poplaji 2013-4-26 13:42 回复TA
我在去试试,DWN蓝屏用不了了,刚解决。 
7
poplaji|  楼主 | 2013-4-26 13:22 | 只看该作者
刚做了按键中断的实验,一点问题都没有。。。。就是改了main函数的内容。

使用特权

评论回复
8
poplaji|  楼主 | 2013-4-26 13:59 | 只看该作者
jlass 发表于 2013-4-26 12:58
rGPBDAT=0x00000040;
Delay(1);
rGPBDAT=0x00000080;

程序是有反应了,有一个灯状态切换的过程的,是会保持在最后一个状态,就是rGPBDATA=0x00000080,但是我不是循环的啊,所以程序就结束了啊,怎么等还会亮呢?

使用特权

评论回复
9
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这个状态下的。但是我并不是死循环来运行程序,可程序已经结束了?

使用特权

评论回复
10
poplaji|  楼主 | 2013-4-26 14:04 | 只看该作者
看了下启动文件bl Main后面一句是b   .的死循环,是不是这样的,我的main程序结束了,但是我的IO口还保留了最后一次我输入的状态值,但程序还在执行?

使用特权

评论回复
11
阿南| | 2013-4-26 14:26 | 只看该作者
你的main肯定不能结束呀,结束了程序就跑飞了,用个While把他循环起来

使用特权

评论回复
评论
poplaji 2013-4-26 15:56 回复TA
那我知道了。。。谢谢了 
12
huangxz| | 2013-4-26 15:08 | 只看该作者
阿南 发表于 2013-4-26 14:26
你的main肯定不能结束呀,结束了程序就跑飞了,用个While把他循环起来

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

使用特权

评论回复
评论
poplaji 2013-4-26 15:56 回复TA
好的,谢谢了!~ 
13
jlass| | 2013-4-26 15:44 | 只看该作者
poplaji 发表于 2013-4-26 13:59
程序是有反应了,有一个灯状态切换的过程的,是会保持在最后一个状态,就是rGPBDATA=0x00000080,但是我 ...

貌似就应该这样的吧

使用特权

评论回复
评论
poplaji 2013-4-26 15:57 回复TA
我以为程序执行完就完事儿了呢。。。 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

62

帖子

0

粉丝