运行环境:在51系列中使用的是AT89C52芯片,编译软件为keil4。
目的:在定时器流水灯项目中,按下按钮使led全灭,再按一次使led在熄灭位置亮起,继续进行流水灯操作。
问题:在实现过程中,设定了一个整形变量m,为了去保存P1的状态,然后再把m赋予P1实现原位置亮起,但发现不成,于是单独写了个定时流水灯程序,不加按钮,探究整形m与P1的关系
代码如下:
#include<reg52.h>
#include<intrins.h>
int i = 0;
void timer1_init()
{
TMOD = 0x10;
TH1 = 0x4C;
TL1 = 0x00;
EA = 1;
ET1 = 1;
TR1 = 1;
}
void main()
{
int x=0,m;
timer1_init();
P1 = 0xfe;
while(1)
{
if(i==40)
{
P1 =_crol_(P1,1);
i = 0;
x++;
}
if(x==2)
{
m=P1;
P1=0xff;
}
if(x==4)
{
P1=m;
}
if(x==6)
{
P1=0xfe;
x=0;
}
}
}
void timer1() interrupt 3
{
TH1 = 0x4C;
TL1 = 0x00;
i++;
}
现象:流水灯正常工作,在第二位时熄灭,等待后未在原位亮起继续流水灯操作,长时间等待后,从第一位亮起
想要了解的问题 :一.sfr P1=0x80特殊寄存器是否能被指针指向
二.整形变量保存的地址是以二进制存储后输出来是否仍为地址,是否是存储溢出导致无法实现目标
三.怎么做才能用一个量,而不是数组来实现目标
不知道有没有有缘人看到这个问题,问的比较基础,希望能够解答一二。