久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 手機與無線通信 > 設計應用 > 利用捕獲比較功能實現MSP430與微機串行通信的研究

利用捕獲比較功能實現MSP430與微機串行通信的研究

作者: 時間:2009-11-27 來源:網絡 收藏

本文引用地址:http://cqxgywz.com/article/157756.htm

發送信號時,即Rin輸入有效,接收器會自動打開,并產生有效的INVALID信號。該信號將觸發P1.2引腳的中斷。在中斷處理程序中將F413的功耗模式設定為模式3(功耗電流0.7μA),這時頻率為32768的ACLK時鐘工作就可以完成低速的任務。當接收、處理完的數據后需要將結果返回給。這時可以打開MAX3221的驅動器,關閉接收器完成此工作。當發送完畢后可以將和MAX3221再設定為準備接收信息的最低功耗狀態。

上述方法可以在滿足的同時達到非常低的功耗。

表1:MAX3221收發器工作控制及其工作狀態對照表

工作及能耗狀態FORCEONFORCEOFFEN接收器輸入信號Rin驅動器狀態接收器狀態
完全待機狀態最低功耗X00X關閉激活
X01X關閉關閉
正常工作狀態人工調節能耗110X激活激活
111X激活關閉
器件自理狀態自動調節能耗010有效自動激活激活
011有效自動激活關閉
010無效關閉激活
011無效關閉關閉

注:驅動器將MOS電平轉換為RS232電平,接收器將RS232電平轉換為MOS電平

4 結束語
應用上述的設計方法和電路,很好地與微機之間的,并且達到了非常理想的功耗水平。實踐證明該方法對于沒有硬件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作為發送引腳,P1.1作為接收引腳,二者共用模塊0
Tbit1 是1位時間間隔數據(T1),Tbit_5是半位時間間隔數據。(由公式1得出)
RTbuff 是接收發送緩沖字單元,存放接收和發送的數據
Counter 是收發過程中使用的計數器
;------------------------------------------------------------------------------

發送子程序

MOVTAR,CCR0; 將當前定時器值存入CCR中(T0)
ADD#Tbit1,CCR0; 將1位時間間隔加入CCR中(T0+T1)
RLARTbuff; 將帶發送的字節數據左移一位,構造最低位為起始位
BIS#0200h, RTbuff; 將停止位數據放入待發送字的第10位
MOV#10,Counter; 初始化數據幀計數器為10
MOV#OUTMOD0+CCIE,CCTL0; 標記發送狀態,打開中斷,啟動發送
RET; 返回

;------------------------------------------------------------------------------
接收準備子程序

MOV#08,Counter; 初始化接收數據計數器為8(接收一個字節數據)
MOV#SCS+CCIS0+OUTMOD0+CM1+CAP+CCIE,CCTL0;初始化捕獲比較控制字,
; 設定為下降沿捕獲模式,標記接收狀態,打開中斷,啟動接收
RET; 返回

;------------------------------------------------------------------------------

捕獲比較模塊0的中斷服務程序
;------------------------------------------------------------------------------

ADD#Tbit1,CCR0; 將1位時間間隔加入CCR0中
BIT#CCIS0,CCTL0; 判斷接收、發送狀態
JNZUART_RX; 是接收狀態,轉接收處理
UART_TXCMP#00h,Counter; 是發送狀態,判斷幀發送是否結束
JNETX_Next; 沒有結束,轉入發送
BIC#CCIE,CCTL0; 幀發送結束,關閉中斷
RETI; 中斷返回
TX_NextRRARTbuff; 待發送位移入進位位C
JCTX_One; 該位為1?跳轉
BIS#OUTMOD2,CCTL0; 該位為0,發送0
JMPTX_nxt2; 跳轉繼續處理
TX_OneBIC#OUTMOD2,CCTL0; 該位為1,發送1
TX_nxt2DECCounter; 發送幀計數器減1
RETI; 中斷返回
;
UART_RXBIT#CAP,CCTL0; 判斷是否是捕獲到起始位
JZRX_Bit; 接收的不是起始位,轉入處理
RX_StartBIC#CAP,CCTL0; 捕獲到起始位,將狀態轉為比較模式
ADD#Tbit_5,CCR0; 再增加半位時間間隔(T0+T1.5),以1.5 時間間隔
RETI; 中斷返回
RX_BitBIT#SCCI,CCTL0; 將接收到的位存入進位位C
RRCRTbuff; 將接收到位,移入收發緩沖字
RX_TestDECCounter; 接收數據計數器減1
JNZRX_Next; 判斷是否接收了所有數據位,沒有跳轉到后續處理
BIC#CCIE,CCTL0; 接收到所有數據位,關閉捕獲比較中斷
RX_NextRETI; 中斷返回


上一頁 1 2 下一頁

評論


相關推薦

技術專區

關閉