資源描述:
《IO實驗3——中斷按鍵LED.doc》由會員上傳分享,免費在線閱讀,更多相關內容在教育資源-天天文庫。
1、實驗報告三:IO實驗3——中斷按鍵LED一、實驗目的:了解單片機中斷系統(tǒng)的結構以及與中斷有關的寄存器、中斷的開放與禁止,以及中斷程序的編寫技巧。二、實驗準備內容:1、認真理解并讀懂程序,根據(jù)程序畫出protues的仿真原理圖。2、把protues文件和編譯生成的HEX文件帶到實驗室。三、實驗內容及要求1、基本內容IF(已經準備有protues仿真文件和HEX文件的)(1)進行仿真演示。(1)認真理解并讀懂程序,將所給程序在KEIL中編譯,產生HEX文件;(2)將程序燒寫到實驗箱中的單片機中;(3)連接實驗箱中的硬件:序號單片機(A2區(qū))LED燈、按鍵(D1區(qū))備
2、注1J61(P10~P17)J52(LED1~LED8)2J57(P30~P37)J53(KEY1~KEY8)只有K3,K4有作用(4)運行程序,在實驗箱中實現(xiàn)程序功能。四、實驗程序//*****************************************************************************//程序:ex3.c//功能:外部中斷0、中斷1控制LED//實驗箱上D1區(qū)J52接P1//實驗箱上D1區(qū)J53接P3//*****************************************************
3、************************#include/*包含頭文件REG51.H*/#defineucharunsignedchar#defineuintunsignedint#defineLEDP1/*定義8個LED接至P1口*/voidExInt_Init();//外部中斷初始化函數(shù)聲明voidDelayMS(uintx);//延時函數(shù)聲明voidLED_Down(uintx);//單只LED燈依次下移點亮函數(shù)聲明voidLED_Up(uintx);//單只LED燈依燈上移點亮函數(shù)聲明voidmain(){ExInt_Init(
4、);//外部中斷初始化LED=0x00;//8個LED全亮while(1){DelayMS(250);LED=~LED;//8個LED閃爍}}//*****************************************************************************//函數(shù)名:ExInt_Init//函數(shù)功能:外部中斷初始化//*****************************************************************************voidExInt_Init(){IE=0x85;
5、//允許外部中斷、開放IP=0x01;//外部中斷為最高優(yōu)先級IT0=1;//設置外部中斷為邊沿觸發(fā)方式IT1=1;//設置外部中斷為邊沿觸發(fā)方式}//*********************************************************************************//函數(shù)名:ExInt0_ISR//函數(shù)功能:每次按鍵都會觸發(fā)中斷,中斷發(fā)生時8個LED將變成從上到下依次點亮LED,//循環(huán)三圈后恢復成8個LED將閃爍狀態(tài),產生LED狀態(tài)由按鍵控制的效果//******************************
6、***************************************************voidExInt0_ISR()interrupt0{ucharSave_LED=LED;//保護現(xiàn)場,將中斷前LED的狀態(tài)保存LED_Down(3);//單只LED依次燈下移點亮3圈LED=Save_LED;//恢復現(xiàn)場,恢復LED中斷前的狀態(tài)}//*********************************************************************************//函數(shù)名:ExInt1_ISR//函數(shù)功能:每次按
7、鍵都會觸發(fā)中斷,中斷發(fā)生時8個LED將變成從下到上依次點亮LED,//循環(huán)三圈后恢復成8個LED將閃爍狀態(tài),產生LED狀態(tài)由按鍵控制的效果//*********************************************************************************voidExInt1_ISR()interrupt2{ucharSave_LED=LED;//保護現(xiàn)場,將中斷前LED的狀態(tài)保存EA=0;//關中斷EA=1;//開中斷LED_Up(3);//單只LED依次燈上移點亮3圈EA=0;//關中斷LED=Save_LED
8、;//恢復現(xiàn)場,恢復LE