请教I/O寄存器问题
自己胡乱写了个LED程序,能调试成功。但是对I/O寄存器不得其解。请版主帮解释一下rGPBCON = 0x015550; //这里是设置B port是输出端口吧。
0X015550 = 1 01010101 01010000
这里是不是说让GPB2~GPB7 设置为Output呢?因为我从别的资料上看
每个管脚占两位。 00-代表输入 01-代表输出 10-代表中断 11-保留
TQ2440中的LED是接在B port上的GPB5~GPB8管脚上的吧?所以这样就能设置为输出方式。
rGPBUP= 0x7ff; //设置上拉电阻为disabled
0x7ff=111 11111111
这样有什么目的呢?
#define LED1 (1<<5) // rGPB =1 ;
#define LED2 (1<<6) // rGPB =1 ;
#define LED3 (1<<7) // rGPB =1 ;
#define LED4 (1<<8) // rGPB =1 ;
while (1){
for (k = 1; k < 5; k++){
switch(k){
case 1:rGPBDAT=~LED4;break;
case 2:rGPBDAT= ~LED3;break;
case 3:rGPBDAT= ~LED2;break;
case 4:rGPBDAT= ~LED1;break;}
Delay(2000);
}
我上面的程序在AXD调试成功。我分析我的写法
LED1 = 00010000
LED2 = 00100000
LED3 = 01000000
LED4 = 10000000
~LED1 = 11101111-----rGPB = 0输出低电平
~LED2 = 11011111-----rGPB = 0输出低电平
~LED3 = 10111111-----rGPB = 0输出低电平
~LED4 = 01111111-----rGPB = 0输出低电平
正好只有一个管脚输出低电平,所以该连接该管脚的LED灯亮。
但是我注意到很多资料上,包括按键控制LED的代码都是
这样写的
rGPBDAT=rGPBDAT & ~LED4
rGPBDAT=rGPBDAT & ~LED3
rGPBDAT=rGPBDAT & ~LED2
rGPBDAT=rGPBDAT & ~LED1
但是奇怪得很,我这样写就是得不到跑马灯的效果。里面有什么
蹊跷吗?另外rGPBDAT的地址是0x56000014,它的初始值是多少呢?还是不确定?
请版主评点。 LZ看清楚了阿 &是位于也就是说 要作跑马灯 就必须每次复位所有的LED 否则 第二个灯亮的时候 第一个灯 原来的 0和1与还是0灭不了 这样循环一遍 所有的灯就一直亮了
页:
[1]