ANT1987 发表于 2021-4-5 08:59 看完你的分析,一下子顿悟啊,自己忘记分析sec在大于200之后的P1后几次移位的状态了,谢谢啊 |
ANT1987 发表于 2021-4-5 08:59 谢谢你 |
1 P1=0xfe;代表八个IO的高低电平状态 即 P1.7-P1.0: 1111 1110 sec>=200时只改变了P1.0的电平状态 2 P1<<=1;执行一次 P1向左移位一次(sec=200开始进入执行),低位补0;进入第八次的时候 sec=207 P1= 0000 0000 所以改变了八个IO的状态. 所以才会全闪啊. |
wulin 发表于 2021-4-4 06:42 多谢,每次都能看到你帮我解决问题~ 我图中的程序这样写为何全闪呢, |
你的sec能加上数吗? |
void InterruptTimer0(void) interrupt 1 { static unsigned int sec; static unsigned char a=0xfe,b=0; TH0=(65536-1000)/256; TL0=(65536-1000)%256; sec++; if(sec%100==0)//闪烁周期0.2秒 { b=~b; P1=a|b; } if(sec>=1000)//移动周期1秒 { sec=0; a=a<<1|1; if(a==0xff) a=0xfe; } } |