| 本帖最后由 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;                      //防止程序跑飞,会不会被编译器优化掉得看情况
 }
 }
 }
 
 再看看书吧!基础有点薄弱了,逻辑思维也不够强悍,呵呵!
 
 
 |