|
這不是軟件問題,是硬件條件導(dǎo)致的錯誤。當(dāng)_crol_()函數(shù)對P0執(zhí)行循環(huán)左移時要先讀P0口當(dāng)前狀態(tài)。由于51單片機P0為開漏模式,雖然設(shè)置P0=0xfe;,但P0端口在沒有外部高電平條件下呈現(xiàn)的是低電平0x00。所以對0x00循環(huán)左移得不到預(yù)想結(jié)果。樓主可以改用其它端口測試或在P0加上拉電阻就不會出錯。也可以用一個中間變量緩沖解決問題:
- #include <reg51.H>
- #include <intrins.h>
- unsigned char T_count;
- unsigned char num;
- void main()
- {
- num=0xfe;
- P0=num;
- TMOD=0x01;
- TH0=15536/256;
- TL0=15536%256;
- IE=0x82;
- TR0=1;
- while(1);
- }
- void TIME0() interrupt 1
- {
- TH0=15536/256;
- TL0=15536%256;
- if(++T_count==20)
- {
- num=_crol_(num,1);
- P0=num;
- T_count=0;
- }
- }
復(fù)制代碼 |
|