以下程序是關于中斷控制單燈閃爍和單燈左右移動的設計,大佬們,能幫忙看一下有什么錯誤嗎?
/* 兩個外部中斷實驗 */
//==聲明區(qū)===================================
#include <reg51.h> // 定義8x51暫存器之標頭檔,P2-17~19
#define LED P1 // 定義LED接至Port 1
void delay1ms(int); // 聲明延遲函數(shù)
void left(int); // 聲明單燈左移函數(shù)
void right(int); // 單燈右移函數(shù)開始
//==主程序===================================
main() // 主程序開始
{ IE=0x85; // 準許INT 0,INT 1中斷(6-4頁)
IP=0x01; // 設定INT 0具有最高優(yōu)先權(6-5頁)
LED=0x00; // 初值=0000 0000,燈全亮
while(1) // 無窮循環(huán),程序一直跑
{ delay1ms(250); // 延遲250 1m=0.25s
LED=~LED; // LED反相
} // while循環(huán)結(jié)束
} // 主程序結(jié)束
//==子程序===================================
/* INT 0的中斷子程序 - 單燈左移3圈 */
void my_int0(void) interrupt 0 // INT0 中斷子程序開始
{ unsigned saveLED=LED; // 儲存中斷前LED狀態(tài)
left(3); // 單燈左移3圈
LED=saveLED; // 寫回中斷前ED狀態(tài)
} // 結(jié)束INT0 中斷子程序
/* INT 1的中斷子程序 - 單燈右移3圈 */
void my_int1(void) interrupt 2 // INT1 中斷子程序開始
{ unsigned saveLED=LED; // 儲存中斷前LED狀態(tài)
right(3); // 單燈右移3圈
LED=saveLED; // 寫回中斷前LED狀態(tài)
} // 結(jié)束INT1 中斷子程序
/* 延遲函數(shù),延遲約x 1ms */
void delay1ms(int x) // 延遲函數(shù)開始
{ int i,j; // 聲明整數(shù)變數(shù)i,j
for (i=0;i<x;i++) // 計數(shù)x次,延遲x 1ms
for (j=0;j<120;j++); // 計數(shù)120次,延遲1ms
} // 延遲函數(shù)結(jié)束
/* 單燈左移函數(shù),執(zhí)行x圈 */
void left(int x) // 單燈左移函數(shù)開始
{ int i, j; // 聲明變數(shù)i,j
for(i=0;i<x;i++) // i循環(huán),執(zhí)行x圈
{ LED=0xfe; // 初始狀態(tài)=1111 1110,最右燈亮
for(j=0;j<7;j++) // j循環(huán),左移7次
{ delay1ms(250); // 延遲250 1m=0.25s
LED=(LED<<1)|0x01; // 左移1位後,LSB設為1
} // j循環(huán)結(jié)束
delay1ms(250); // 延遲250 1m=0.25s
} // i循環(huán)結(jié)束*/
} // 單燈左移函數(shù)結(jié)束
/* 單燈右移函數(shù),執(zhí)行x圈 */
void right(int x) // 單燈右移函數(shù)開始
{ int i, j; // 聲明變數(shù)i,j
for(i=0;i<x;i++) // i循環(huán),執(zhí)行x圈
{ LED=0x7f; // 初始狀態(tài)=0111 1111
for(j=0;j<7;j++)// j循環(huán),右移7次
{ delay1ms(250); // 延遲250 10m=0.25s
LED=(LED>>1)|0x80; // 右移1位後,MSB設為1
} // j循環(huán)結(jié)束
delay1ms(250); // 延遲250 1m=0.25s
} // i循環(huán)結(jié)束*/
} // 單燈右移函數(shù)結(jié)束 |