|
|
單片機INT0中斷子程序的仿真原理圖(proteus仿真工程文件可到本帖附件下載):
0.png (27.89 KB, 下載次數: 63)
下載附件
2017-4-5 02:52 上傳
單片機源代碼:
- //==聲明區===================================
- #include <reg51.h> // 定義8x51特殊功能寄存器
- #define LED P1 // 定義LED接至P 1
- void delay1ms(int); // 聲明延遲函數
- void left(int); // 聲明單燈左移函數
- //==主程序===================================
- main() // 主程序開始
- { IE=0x81; // 準許INT 0中斷
- LED=0x00; // 初值=0000 0000,燈全亮
- while(1) // 無窮循環,程序一直跑
- { delay1ms(250); // 延遲250*1m=0.25s
- LED=~LED; // LED反相
- } // while循環結束
- } // 主程序結束
- //==子程序===================================
- /* INT 0的中斷子程序 - 單燈左移3圈 */
- void my_int0(void) interrupt 0 // INT0 中斷子程序開始
- { unsigned saveLED=LED; // 儲存中斷前LED狀態
- left(3); // 單燈左移3圈
- LED=saveLED; // 寫回中斷前LED狀態
- } // 結束INT0 中斷子程序
- /* 延遲函數,延遲約x 1ms */
- void delay1ms(int x) // 延遲函數開始
- { int i, j; // 聲明整數變數i,j
- for (i=0;i<x;i++) // 計數x次,延遲x 1ms
- for (j=0;j<120;j++); // 計數120次,延遲1ms
- } // 延遲函數結束
- /* 單燈左移函數,執行x圈 */
- void left(int x) // 單燈左移函數開始
- { int i, j; // 聲明變數i,j
- for(i=0;i<x;i++) // i循環,執行x圈
- { LED=0xfe; // 初始狀態=1111 1110,最右燈亮
- for(j=0;j<7;j++) // j循環,左移7次
- { delay1ms(250);
- LED=(LED<<1)|0x01; // 左移1位後,LSB設為1
- } // j循環結束
- delay1ms(250);
- } // i循環結束*/
- } // 單燈左移結束
復制代碼
該系列源碼包含有很多非常經典,代碼風格十分規范,而且注釋詳細的單片機例程,還帶仿真,對于MCU學習特別是初學者是很有幫助的,全部源碼下載(共幾十個項目):http://www.raoushi.com/bbs/dpj-80575-1.html
0.png (52.92 KB, 下載次數: 70)
下載附件
2017-4-5 03:00 上傳
本例程下載(含proteus仿真工程文件與源碼):
單片機INT0中斷子程序.rar
(12.88 KB, 下載次數: 7)
2017-4-5 02:53 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
|