|
unsigned char a;
//a=0;
port_mode(); // 將單片機(jī)所有端口配置為準(zhǔn)雙向弱上拉方式
while(1)
{
P0 =~(1<<a++); // 第一次運(yùn)行時(shí) 0000 0001<< 0 = 0000 0001
//a++;
//P0=~(1<<a);
//a++;
if (a==0x08) // 允許左移8次。
{
a=0;
}
}
這是一個(gè)流水燈的程序,其中P0 =~(1<<a++);這條語(yǔ)句我看了很久才弄明白。
1.困惑的是運(yùn)算順序 a應(yīng)該先++,還是應(yīng)該先位移?
通過(guò)語(yǔ)句分解和實(shí)驗(yàn)證明a是先進(jìn)行左移運(yùn)算,后進(jìn)行自加運(yùn)算的。
如果a先進(jìn)行自加運(yùn)算P0.0這個(gè)燈會(huì)一直不亮。被拋棄了。至于為什么會(huì)被拋棄,我在思考的這個(gè)階段還沒(méi)特別明白,能想到的就是那一位被拋棄了。
2.其次是1<<a,這條語(yǔ)句我一直理解為a左移了1位,其實(shí)是1左移了a位。弄明白這個(gè)語(yǔ)句就不難理解為什么P0.0會(huì)被拋棄了。a先自加1,a==1,1左移1位=0000 0010,再取反=1111 1101,P0.0位一直會(huì)是1(低電平導(dǎo)通),所以P0.0一直不亮。
3.為什么沒(méi)有對(duì)a進(jìn)行賦初值,那初值會(huì)是多少?是0嗎?
經(jīng)測(cè)試a的初值可以是0。但是a賦值大于8的時(shí)候燈就不會(huì)亮,因?yàn)閕f (a==0x08)時(shí)a=0,這里改成a> =0x08,a就可以是大于8的值。可是原程序a==0x08,a不賦初值也都可以運(yùn)行,那a是怎么保證不大于8的?
|
評(píng)分
-
查看全部評(píng)分
|