利用捕獲比較功能實現MSP430與微機串行通信的研究
當微機發(fā)送信號時,即Rin輸入有效,接收器會自動打開,并產生有效的INVALID信號。該信號將觸發(fā)P1.2引腳的中斷。在中斷處理程序中將MSP430F413的功耗模式設定為模式3(功耗電流0.7μA),這時利用頻率為32768的ACLK時鐘工作就可以完成低速的串行通信任務。當接收、處理完微機的數據后需要將結果返回給微機。這時可以打開MAX3221的驅動器,關閉接收器完成此工作。當發(fā)送完畢后可以將MSP430和MAX3221再設定為準備接收信息的最低功耗狀態(tài)。
表1:MAX3221收發(fā)器工作控制及其工作狀態(tài)對照表
工作及能耗狀態(tài) | FORCEON | FORCEOFF | EN | 接收器輸入信號Rin | 驅動器狀態(tài) | 接收器狀態(tài) |
完全待機狀態(tài)最低功耗 | X | 0 | 0 | X | 關閉 | 激活 |
X | 0 | 1 | X | 關閉 | 關閉 | |
正常工作狀態(tài)人工調節(jié)能耗 | 1 | 1 | 0 | X | 激活 | 激活 |
1 | 1 | 1 | X | 激活 | 關閉 | |
器件自理狀態(tài)自動調節(jié)能耗 | 0 | 1 | 0 | 有效 | 自動激活 | 激活 |
0 | 1 | 1 | 有效 | 自動激活 | 關閉 | |
0 | 1 | 0 | 無效 | 關閉 | 激活 | |
0 | 1 | 1 | 無效 | 關閉 | 關閉 |
注:驅動器將MOS電平轉換為RS232電平,接收器將RS232電平轉換為MOS電平
4 結束語
應用上述的設計方法和電路,很好地實現了MSP430與微機之間的串行通信,并且達到了非常理想的功耗水平。實踐證明該方法對于沒有硬件UART的MSP430系列單片機進行串行通信非常有效,并給需要擴展串口的其他類型MSP430單片機提供了一種可行的方案。此外,文中的超低功耗電路設計方法對于功耗敏感的應用是一種很好的解決方案。
參考文獻:
[1] Brian Merritt. Ultralow Power Thermostat ([R]). Texas, U.S.A. : Texas Instruments Incorporated, 2001.
[2] MAX3221 3-V TO 5.5-V single-channel RS-232 line driver/receiver (Manual). Texas, U.S.A. : Texas Instruments Incorporated, 2001.
[3] 胡大可. MSP430系列超低功耗16位單片機原理與應用,北京航空航天出版社,2001。
[4] 胡大可. MSP430系列FLASH型超低功耗16位單片機,北京航空航天出版社,2001。
附錄:利用捕獲比較實現異步串行通信的程序代碼:
;------------------------------------------------------------------------------
說明:
硬件連接如圖3,P1.0作為發(fā)送引腳,P1.1作為接收引腳,二者共用捕獲比較模塊0
Tbit1 是1位時間間隔數據(T1),Tbit_5是半位時間間隔數據。(由公式1得出)
RTbuff 是接收發(fā)送緩沖字單元,存放接收和發(fā)送的數據
Counter 是收發(fā)過程中使用的計數器
;------------------------------------------------------------------------------
發(fā)送子程序
MOV | TAR,CCR0 | ; 將當前定時器值存入CCR中(T0) |
ADD | #Tbit1,CCR0 | ; 將1位時間間隔加入CCR中(T0+T1) |
RLA | RTbuff | ; 將帶發(fā)送的字節(jié)數據左移一位,構造最低位為起始位 |
BIS | #0200h, RTbuff | ; 將停止位數據放入待發(fā)送字的第10位 |
MOV | #10,Counter | ; 初始化數據幀計數器為10 |
MOV | #OUTMOD0+CCIE,CCTL0 | ; 標記發(fā)送狀態(tài),打開捕獲比較中斷,啟動發(fā)送 |
RET | ; 返回 |
;------------------------------------------------------------------------------
接收準備子程序
MOV | #08,Counter | ; 初始化接收數據計數器為8(接收一個字節(jié)數據) |
MOV | #SCS+CCIS0+OUTMOD0+CM1+CAP+CCIE,CCTL0 | ;初始化捕獲比較控制字, |
; 設定為下降沿捕獲模式,標記接收狀態(tài),打開中斷,啟動接收 | ||
RET | ; 返回 |
;------------------------------------------------------------------------------
捕獲比較模塊0的中斷服務程序
;------------------------------------------------------------------------------
ADD | #Tbit1,CCR0 | ; 將1位時間間隔加入CCR0中 | |
BIT | #CCIS0,CCTL0 | ; 判斷接收、發(fā)送狀態(tài) | |
JNZ | UART_RX | ; 是接收狀態(tài),轉接收處理 | |
UART_TX | CMP | #00h,Counter | ; 是發(fā)送狀態(tài),判斷幀發(fā)送是否結束 |
JNE | TX_Next | ; 沒有結束,轉入發(fā)送 | |
BIC | #CCIE,CCTL0 | ; 幀發(fā)送結束,關閉中斷 | |
RETI | ; 中斷返回 | ||
TX_Next | RRA | RTbuff | ; 待發(fā)送位移入進位位C |
JC | TX_One | ; 該位為1?跳轉 | |
BIS | #OUTMOD2,CCTL0 | ; 該位為0,發(fā)送0 | |
JMP | TX_nxt2 | ; 跳轉繼續(xù)處理 | |
TX_One | BIC | #OUTMOD2,CCTL0 | ; 該位為1,發(fā)送1 |
TX_nxt2 | DEC | Counter | ; 發(fā)送幀計數器減1 |
RETI | ; 中斷返回 | ||
; | |||
UART_RX | BIT | #CAP,CCTL0 | ; 判斷是否是捕獲到起始位 |
JZ | RX_Bit | ; 接收的不是起始位,轉入處理 | |
RX_Start | BIC | #CAP,CCTL0 | ; 捕獲到起始位,將狀態(tài)轉為比較模式 |
ADD | #Tbit_5,CCR0 | ; 再增加半位時間間隔(T0+T1.5),以實現1.5 時間間隔 | |
RETI | ; 中斷返回 | ||
RX_Bit | BIT | #SCCI,CCTL0 | ; 將接收到的位存入進位位C |
RRC | RTbuff | ; 將接收到位,移入收發(fā)緩沖字 | |
RX_Test | DEC | Counter | ; 接收數據計數器減1 |
JNZ | RX_Next | ; 判斷是否接收了所有數據位,沒有跳轉到后續(xù)處理 | |
BIC | #CCIE,CCTL0 | ; 接收到所有數據位,關閉捕獲比較中斷 | |
RX_Next | RETI | ; 中斷返回 |
評論