|
單片機(jī)INT0中斷子程序的仿真原理圖(proteus仿真工程文件可到本帖附件下載):
0.png (27.89 KB, 下載次數(shù): 63)
下載附件
2017-4-5 02:52 上傳
單片機(jī)源代碼:
- //==聲明區(qū)===================================
- #include <reg51.h> // 定義8x51特殊功能寄存器
- #define LED P1 // 定義LED接至P 1
- void delay1ms(int); // 聲明延遲函數(shù)
- void left(int); // 聲明單燈左移函數(shù)
- //==主程序===================================
- main() // 主程序開始
- { IE=0x81; // 準(zhǔn)許INT 0中斷
- 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; // 儲(chǔ)存中斷前LED狀態(tài)
- left(3); // 單燈左移3圈
- LED=saveLED; // 寫回中斷前LED狀態(tài)
- } // 結(jié)束INT0 中斷子程序
- /* 延遲函數(shù),延遲約x 1ms */
- void delay1ms(int x) // 延遲函數(shù)開始
- { int i, j; // 聲明整數(shù)變數(shù)i,j
- for (i=0;i<x;i++) // 計(jì)數(shù)x次,延遲x 1ms
- for (j=0;j<120;j++); // 計(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);
- LED=(LED<<1)|0x01; // 左移1位後,LSB設(shè)為1
- } // j循環(huán)結(jié)束
- delay1ms(250);
- } // i循環(huán)結(jié)束*/
- } // 單燈左移結(jié)束
復(fù)制代碼
該系列源碼包含有很多非常經(jīng)典,代碼風(fēng)格十分規(guī)范,而且注釋詳細(xì)的單片機(jī)例程,還帶仿真,對于MCU學(xué)習(xí)特別是初學(xué)者是很有幫助的,全部源碼下載(共幾十個(gè)項(xiàng)目):http://www.zg4o1577.cn/bbs/dpj-80575-1.html
0.png (52.92 KB, 下載次數(shù): 70)
下載附件
2017-4-5 03:00 上傳
本例程下載(含proteus仿真工程文件與源碼):
單片機(jī)INT0中斷子程序.rar
(12.88 KB, 下載次數(shù): 7)
2017-4-5 02:53 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|