![]() |
發布時間: 2019-11-28 11:52
正文摘要:利用單脈沖源(KEY8)產生外部中斷請求信號/INT1,在中斷服務子程序中讀入4個 撥碼開關(SW1~SW4)設定的數據,輸出到4個LED發光二極管(LED1~LED4) 。 根據下面這個電路圖,由于剛開始接觸單片機,實在寫不出 ... |
#include<reg51.h> #include<intrins.h> #define u8 unsigned char sbit key8=P3^3; u8 x; void Delay10ms() //@12.000MHz { unsigned char i, j; i = 20; j = 113; do { while (--j); } while (--i); } void main() { INT1=1; EX1=1; EA=1; while(1); } void INT1() interrupt 2 //看自己板子外部中斷1的中斷向量號 { Delay10ms(); if(!key8) { x=P1; //讀取P1端口值,不要直接對端口操作 x>>=4; //將端口值的高四位右移到低四位 x|=0xf0; //將端口數值的高四位置一,為下一次讀取做準備 P1=x; //將端口數值賦給端口 } while(!key8); //如果你要按著按鍵,燈是不會亮的,解決方法就是將這句程序規定時間退出。 } 剛學,只會用C編寫,如果不需要看思路就行了。 |
上面程序其思路就是:首先要設置外部中斷1能產生中斷,還要考慮中斷觸發方式,然后產生中斷時要讀出P1口高4位的編碼開關狀態(接通時狀態為0),因LED與開關接在同一端口,所以考慮高4位與低4位交換即可,而且開關導通時狀態為0,可直接輸出至P1口控制LED |
ORG 0000H JMP MAIN ORG 0013H ;中斷入口地址 JMP ZHDU ORG 0050H MOV IE,#84H ;設置外部中斷1允許 SETB IE1 ;下降沿觸發 JMP $ ZHDU: MOV A,P1 ;讀P1口開關狀態 SWAP A ;交換 MOV P1,A ;根據開關狀態點亮LED RETI END |
下載一個STCISP軟件,里面有例程。 |
首先要設置EX1=1,EA=1,然后0013H處調用中斷子程序。 中斷子程序中,讀入P1口,屏蔽低四位,然后高低字節交換,再送回P1口,然后返回。 這樣描述不知道清楚嗎? |