基于MSP430F169的多路電阻測(cè)量系統(tǒng)設(shè)計(jì)
4 軟件設(shè)計(jì)
4.1 雙機(jī)通信的實(shí)現(xiàn)
MSP430單片機(jī)的I2C模塊有主發(fā)送、主接收、從發(fā)送、從接收4種工作模式。雙機(jī)通信程序設(shè)計(jì)主要包括初始化程序、主機(jī)模式程序、從機(jī)模式程序和中斷服務(wù)程序四部分。
初始化程序包括設(shè)置單片機(jī)P3.1(SDA)和管腳P3.3(SCL)為為傳輸端口,端口方向。設(shè)置系統(tǒng)時(shí)鐘,系統(tǒng)時(shí)鐘由主機(jī)產(chǎn)生,選擇SMCLK為系統(tǒng)時(shí)鐘。I2C模塊初始化,將控制寄存器U0CTL的控制使能位(I2CEN)置1。U0CTL一個(gè)8位的寄存器。通過(guò)對(duì)該寄存器的設(shè)置來(lái)確定通信模式、通信協(xié)議和校驗(yàn)位的選擇。
主機(jī)模式程序功能是在主機(jī)模式下完成數(shù)據(jù)的收發(fā)。首先要對(duì)主機(jī)接收、發(fā)送初始化,定義主機(jī)的地址,對(duì)R/W位置位設(shè)置接收模式,對(duì)中斷寄存器I2CIE設(shè)置定義中斷使能。主機(jī)接收、發(fā)送初始化程序在每次數(shù)據(jù)收發(fā)時(shí)調(diào)用。通過(guò)對(duì)I2CRM,I2CSTP,I2CSTT三個(gè)寄存器位設(shè)置控制數(shù)據(jù)發(fā)送和接收,主機(jī)產(chǎn)生時(shí)鐘信號(hào)、起始和停止信號(hào)。
從機(jī)模式程序中數(shù)據(jù)收發(fā)初始化部分與主機(jī)模式程序相同,值得注意的是,數(shù)據(jù)的收發(fā)過(guò)程是由I2C模塊自動(dòng)控制,從機(jī)接收數(shù)據(jù)時(shí)隨主機(jī)產(chǎn)生的時(shí)鐘信號(hào)在總線(xiàn)上接收串行數(shù)據(jù),并對(duì)接收的數(shù)據(jù)應(yīng)答。從機(jī)發(fā)送數(shù)據(jù)時(shí),從機(jī)接收到主機(jī)發(fā)送的匹配的設(shè)備地址和主機(jī)的數(shù)據(jù)接收請(qǐng)求后,主機(jī)產(chǎn)生時(shí)鐘脈沖,從機(jī)向總線(xiàn)發(fā)送數(shù)據(jù)。
中斷服務(wù)程序的功能是實(shí)現(xiàn)主機(jī)和從機(jī)的數(shù)據(jù)收發(fā),MSP430中I2C模塊的是多源中斷,8個(gè)中斷源的中斷共用一個(gè)中斷向量,中斷向量寄存器I2CIV的內(nèi)容決定當(dāng)前是哪個(gè)中斷標(biāo)志引起中斷事件。當(dāng)優(yōu)先級(jí)最高的中斷在寄存器I2CIV中產(chǎn)生對(duì)應(yīng)值時(shí),由此判斷中斷源并進(jìn)入對(duì)應(yīng)的主機(jī)模式程序和從機(jī)模式程序中,通過(guò)這2個(gè)程序中斷寄存器I2CIE使能操作,完成對(duì)應(yīng)的中斷事件。從而實(shí)現(xiàn)主機(jī)和從機(jī)問(wèn)數(shù)據(jù)的收發(fā)。
4.2 數(shù)據(jù)采集與處理
數(shù)據(jù)采集部分主要是從單片機(jī)通過(guò)A/D通道采集接入恒流源電路的待測(cè)電阻上產(chǎn)生的電壓,并進(jìn)行處理。MSP430F169的A/D轉(zhuǎn)換具有單通道單次轉(zhuǎn)換、單通道多次轉(zhuǎn)換、序列通道單次轉(zhuǎn)換、序列通道多次轉(zhuǎn)換模式4種模式。考慮到有8路采集,每個(gè)通道每次測(cè)量要采集256次數(shù)據(jù),因此選用序列通道多次轉(zhuǎn)換模式。A/D轉(zhuǎn)換電路通過(guò)模擬通道進(jìn)行多通道重復(fù)轉(zhuǎn)換,使其采集流經(jīng)待測(cè)電阻的電壓數(shù)據(jù)不斷自動(dòng)更新,轉(zhuǎn)換結(jié)果順序的存放在轉(zhuǎn)換存儲(chǔ)寄存器中。ADC12MCTLx寄存器的EOS位定義最后一個(gè)通道轉(zhuǎn)換完成后表示一次序列通道轉(zhuǎn)換完成,觸發(fā)信號(hào)會(huì)觸發(fā)下次序列通道轉(zhuǎn)換。數(shù)據(jù)的采樣時(shí)間間隔由定時(shí)器A控制,每次定時(shí)器A中斷到來(lái)時(shí)讀取A/D采集的數(shù)據(jù),在讀取前停止A/D轉(zhuǎn)換,讀取完畢后重啟A/D采集,當(dāng)數(shù)據(jù)采集完畢后設(shè)置標(biāo)志位通知其他程序已獲得新數(shù)據(jù),通過(guò)全局變量來(lái)實(shí)現(xiàn)與其他處理程序數(shù)據(jù)交互。采樣流程圖5所示。數(shù)據(jù)處理方面,為了提高電阻測(cè)量的精度,每個(gè)測(cè)量通道在每次測(cè)量時(shí)采集256組數(shù)據(jù),從機(jī)對(duì)采集的這256組數(shù)據(jù)進(jìn)行算術(shù)平均后再通過(guò)運(yùn)算得出每個(gè)通道所測(cè)量的電阻值。本文引用地址:http://www.2s4d.com/article/194357.htm
4.3 系統(tǒng)軟件實(shí)現(xiàn)
系統(tǒng)軟件采用模塊化設(shè)計(jì),軟件子功能程序分割與硬件模塊電路相對(duì)應(yīng)。系統(tǒng)軟件包括主程序、雙機(jī)通信子程序、數(shù)據(jù)采集子程序、數(shù)據(jù)處理子程序、串行通信子程序、定時(shí)器中斷服務(wù)子程序、顯示子程序、存儲(chǔ)及按鍵控制子程序。限于篇幅只給出主程序流程圖,如圖6所示。
5 結(jié)語(yǔ)
本文多路電阻測(cè)量系統(tǒng)利用I2C總線(xiàn)實(shí)現(xiàn)了MSP430系列單片機(jī)之間的全雙工通信,解決了基于雙機(jī)通信系統(tǒng)的關(guān)鍵技術(shù),雙單片機(jī)的設(shè)計(jì)結(jié)構(gòu)靈活緊湊,不但減輕了主處理器的負(fù)擔(dān),而且提高了測(cè)量的精度、可靠性和實(shí)時(shí)性,同時(shí)也是對(duì)雙處理器系統(tǒng)研究的具體實(shí)踐。
評(píng)論