本帖最后由 luxuan_006 于 2020-1-30 14:47 编辑
unsigned char n;
unsigned char x[3];
main(){
x[0]=1;
n=255;
while (1) {
n++; //n此时是在无限循环内,值从0~255不断循环
x[n]=x[n]<<1 | 1; //n>2,数组已经溢出了,并且x[1],x[2]都未定义初始值,所以不可能获得正确值
PORTA=x[n];
}
}
改正后:
unsigned char n;
unsigned char x[3];
main(){
x[0]=1;
n=0;
while (1) {
if(n < 3){ //判断 n 指向是否在定义数组区间内,n<3时执行位移和字节或指令
x[n]=(x[n]<<1) | 1; //n<3 时指向定义的数据区间内
PORTA=x[n]; //向端口A发送数据
n++; //n自加,永远不会大于3,当n=3时,程序进入无限循环的判断语句if(n < 3)中
if(n < 3) x[n] = x[n-1]; //将x[n]数值赋予下次做位移和字节或指令的x[n+1]
}
else{
n = 3; //防止程序跑飞,会不会被编译器优化掉得看情况
}
}
}
再看看书吧!基础有点薄弱了,逻辑思维也不够强悍,呵呵!
|