| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
| 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
| 0 | 0 | 0 | d4 | d3 | d2 | d1 | d0 |
在鍵盤輸入、計數(shù)器回等或串行通信中斷時,多功能接口將向INTR發(fā)出負(fù)脈沖,主機(jī)在響應(yīng)后應(yīng)發(fā)讀狀態(tài)指令,查詢狀態(tài)標(biāo)志,確定是哪個狀態(tài)標(biāo)志動作。其中d0為鍵盤輸入標(biāo)志,d1為計數(shù)器0回零動作。d2為計數(shù)器1回零標(biāo)志。d3為串行接收結(jié)束標(biāo)志,d4為串行發(fā)送結(jié)束標(biāo)志。
4 多功能接口的軟件設(shè)計
在主程序中進(jìn)行顯示掃描和鍵盤掃描,如有鍵盤輸入,則找出鍵盤矩陣的鍵號。鍵號存入鍵值寄存器,并置位狀態(tài)標(biāo)志,同時發(fā)出INTR負(fù)脈沖,通知主機(jī)來取鍵值。
主機(jī)通過指令對多功能接口進(jìn)行操作。主機(jī)首先要將CE置0。該下降沿通過P3.2向多功能接口發(fā)出外部中斷。在中斷服務(wù)程序中,多功能接口進(jìn)行取指和譯碼操作,并通過散轉(zhuǎn)指令轉(zhuǎn)入相應(yīng)的處理通道。則中斷返回。至此,一條指令的取指-譯碼-執(zhí)行的過程才告結(jié)束。程序回到主循環(huán)繼續(xù)進(jìn)行顯示掃描和鍵盤掃描。
所謂取指操作實際上就是多功能接口與主機(jī)進(jìn)行通信的過程。由于采取軟件進(jìn)行通信,t1、t2、t3、t4、t5的寬度有一定的范圍。
在接收到主機(jī)的操作指令后,多功能接口與外設(shè)的串行通信及有關(guān)定時器的操作采用中斷方式進(jìn)行。在中斷結(jié)束時,置位狀態(tài)標(biāo)志,并向主機(jī)發(fā)INTR負(fù)脈沖。該負(fù)脈沖可供主機(jī)查詢,也可作為向主機(jī)發(fā)出的中斷請求信號。完成以上工作后,返回主程序。
89C52有三個定時器,其中T2在中串行通信時間來作為串行通信的波特率發(fā)生器。這樣T0和T1就可以出借給用戶作定時器內(nèi)。T2在波特率發(fā)生器方式時,可置位T2CON寄存器中的TCLK位或RCLK位。在TH2、TL2中裝入計數(shù)初值,使T2從這個初值開始計數(shù),但并不置位FT2。RCAR2H和RCAP2L中的常數(shù)由軟件設(shè)定后,T2的溢出率是嚴(yán)格不變的,因而使串行通信的波特率非常穩(wěn)定。
5 應(yīng)用實例
在本刊網(wǎng)絡(luò)補(bǔ)充版(http://www.dpj.com.cn)中,給出主機(jī)為AT89C52時的應(yīng)用實例。程序的功能為等待鍵盤輸入,然后將所讀到的鍵盤碼轉(zhuǎn)換成十進(jìn)制后送LED數(shù)碼管顯示。





