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