《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于MSP430F449的數(shù)據(jù)存儲和USB串行通信實現(xiàn)
基于MSP430F449的數(shù)據(jù)存儲和USB串行通信實現(xiàn)
摘要: 在數(shù)據(jù)采集設(shè)備以及具有相關(guān)功能的儀器設(shè)計中,數(shù)據(jù)的存儲和傳輸是一個非常重要的環(huán)節(jié),本文在成功實踐的基礎(chǔ)上,介紹微控制器MSP430F449實現(xiàn)數(shù)據(jù)的采集后的數(shù)據(jù)存儲及與上位機數(shù)據(jù)通信的相關(guān)內(nèi)容。文中給出了實用的硬件電路和部分軟件代碼,詳細講解了在數(shù)據(jù)存儲中需要注意的一些環(huán)節(jié)。
Abstract:
Key words :

  在數(shù)據(jù)采集設(shè)備以及具有相關(guān)功能的儀器設(shè)計中,數(shù)據(jù)的存儲和傳輸是一個非常重要的環(huán)節(jié),本文在成功實踐的基礎(chǔ)上,介紹微控制器MSP430F449實現(xiàn)數(shù)據(jù)的采集后的數(shù)據(jù)存儲及與上位機數(shù)據(jù)通信的相關(guān)內(nèi)容。文中給出了實用的硬件電路和部分軟件代碼,詳細講解了在數(shù)據(jù)存儲中需要注意的一些環(huán)節(jié)。

  在數(shù)據(jù)采集和測量儀器尤其是便攜式設(shè)備中,數(shù)據(jù)存儲和傳輸是不可避免的問題,近年來TI公司推出的低功耗微控制器MSP430,在儀器設(shè)計和制造領(lǐng)域引起巨大變革,新型控制器和大容量串行存儲器的應(yīng)用大大提高產(chǎn)品了的性能。本文主要解決兩個問題

  1 解決經(jīng)過MSP430采集后的數(shù)據(jù)與EEPROM24C256的數(shù)據(jù)接口問題,也就是數(shù)據(jù)存儲問題;

  2 解決EEPROM與上位機(普通微機)的數(shù)據(jù)通信問題,也就是存儲后的數(shù)據(jù)上傳問題。

  首先對主要的集成電路做簡單介紹

  MSP430F449簡介

  MSP430F449是MSP430系列中的一種,MSP430系列是一種具有集成度高,功能豐富、功耗低等特點的16位單片機。它的集成調(diào)試環(huán)境Embedded Workbench 提供了良好的C語言開發(fā)平臺。設(shè)計中基于程序的復(fù)雜性和程序容量大的要求選擇了MSP430F449,這款芯片具有64K程序存儲器,可以滿足大部分復(fù)雜控制的需要;它的封裝100-PIN QFP具有良好的互換性,與MSP430F437 、MSP430F435等芯片具有完全一致的管腳可以在程序量上進行合理選擇。

  24C256簡介

  24C256是支持I2C協(xié)議的串行EEPROM,容量32768字節(jié)。

24C256的管腳圖

  以上是24C256的管腳圖,其中A0,A1,A2構(gòu)成存儲器的物理地址,作為I2C總線上區(qū)分不同存儲器的控制地址,可以在I2C總線上同時連接8個設(shè)備。 WP是寫保護,高電平將禁止對器件的寫操作;SCL和SDA是數(shù)據(jù)傳輸?shù)目刂凭€,其中SCL是時鐘,SDA是雙向數(shù)據(jù)線,用來完成數(shù)據(jù)的寫入和讀出,數(shù)據(jù)的傳輸按照I2C協(xié)議的要求由時鐘端SCL配合共同完成。

  CP2102簡介

  CP2102是USB到UART的橋接電路,完成USB數(shù)據(jù)和UART數(shù)據(jù)的轉(zhuǎn)換,電路連接簡單,數(shù)據(jù)傳輸可靠,把下位機串行數(shù)據(jù)轉(zhuǎn)換成USB數(shù)據(jù)格式,方便實現(xiàn)數(shù)據(jù)通信,在上位機上通過運行該芯片的驅(qū)動程序把USB數(shù)據(jù)可以按照簡單的串口進行讀寫操作編程簡單,操作靈活。

MSP430F449 接口原理圖

圖1 MSP430F449 接口原理圖

  以上是MSP430F449與EEPROM以及CP2102的接口原理圖,本文重點在于介紹數(shù)據(jù)采集過程完成以后的數(shù)據(jù)存貯和數(shù)據(jù)傳輸。

 

  數(shù)據(jù)的采集多種多樣,可以經(jīng)過片內(nèi)的ADC轉(zhuǎn)換器對模擬量進行采集,也可以通過獨立的端口控制線對特殊的傳感器比如溫度傳感器、壓力傳感器等進行數(shù)據(jù)轉(zhuǎn)換,這不作為本文介紹的內(nèi)容。本文主要是針對不同的采集過程完成后數(shù)據(jù)的存儲和傳輸處理。

  數(shù)據(jù)自動存儲的客觀要求

  在許多測量過程中,不僅要求讀取簡單的儀表值,而且還需要對一段時間的數(shù)據(jù)進行科學(xué)的分析和處理以取得預(yù)測和分析的目的。在這種情況下,可能要求測量時間長,采集要求自動進行,無需人工值守,所以數(shù)據(jù)必須自動存儲;另一個原因,采集數(shù)據(jù)的頻率比較高,人的觀察不能滿足實際需要,這就要求對采集的數(shù)據(jù)進行有效的存儲。

  集成電路合理選擇

  有很多大容量的FLASH芯片已經(jīng)得到廣泛應(yīng)用,但是這類芯片口線較多,需要占用較多的控制器資源,在控制外圍器件多,接口復(fù)雜的情況下,特別是便攜式儀器功能全、體積小,為了精簡外圍電路,在不影響存儲量的情況下,具有I2C接口的串行EEPROM就成為了最佳選擇。

  24C256程序控制原理

  24C256是具有I2C接口的512x64存儲器,在數(shù)據(jù)的存儲過程中除了遵循I2C協(xié)議必須的邏輯以外,一個最容易忽視并且最容易導(dǎo)致出錯的問題就是存儲地址問題。

  24C256的數(shù)據(jù)容量是32768,即可以存儲的有效字節(jié)數(shù)。所以它的地址是16位整型數(shù),有效范圍是0~32768,數(shù)據(jù)字節(jié)為單位存儲,在16位地址其中有效數(shù)據(jù)只有15位,低6(0~5)位地址表示的容量是0~63,然后連續(xù)的9(6~14)位地址表示頁碼的范圍是0~511,在數(shù)據(jù)連續(xù)存儲過程中,相同的頁面內(nèi),存儲地址自動完成累加過程;數(shù)據(jù)在不同頁面的存儲時,地址不能自動累加,如果不做正確處理,數(shù)據(jù)將從本頁開始的地址重新開始覆蓋已經(jīng)存在的數(shù)據(jù)。例如,地址是63(二進制碼111111)表示的是第0頁的最后一個存儲空間,地址64(二進制碼1,000000)表示第1頁最開始的存儲空間。在當前存儲地址是63時如果該器件處于連續(xù)存儲模式下,數(shù)據(jù)將出錯。

  原因是什么呢? 24C256支持數(shù)據(jù)的連續(xù)存儲,最大的存貯數(shù)量是64即一頁的內(nèi)容,如果在地址選擇上超過了這個限制,數(shù)據(jù)將會覆蓋本頁開始的位置重新存儲,這就造成數(shù)據(jù)的錯誤,在使用上,雖然數(shù)據(jù)是分頁存儲的,但在形式上是連續(xù)數(shù)據(jù),所以存儲中不需要特意區(qū)分頁地址和頁內(nèi)地址。

 

  在連續(xù)存儲中,盡管數(shù)據(jù)每次存儲的數(shù)量小于64,數(shù)據(jù)也可能出錯,例如每次存儲數(shù)量為11,地址的變化是0,11,22,33,44,55,66……,看上去沒有什么問題,地址是按照每次11遞增的,然而存儲的結(jié)果還是出錯了,原因是什么呢?在地址55開始的空間無法提供連續(xù)11個頁內(nèi)存儲空間,當?shù)刂吩黾拥?3以后數(shù)據(jù)又從該頁0地址重新開始,從而導(dǎo)致數(shù)據(jù)儲存的錯誤。有效的解決辦法是如果使用連續(xù)存儲模式,地址的安排上要使存儲塊的大小為64,32,16,8,4,2此外都不能使用連續(xù)地址存儲。如果數(shù)據(jù)采集中的有效數(shù)據(jù)位小于64,比如每次采集的結(jié)果是30字節(jié),在連續(xù)存儲模式下要按照32為單位存儲,不足的字節(jié)補零處理。

  以下是24C256數(shù)據(jù)傳輸基本控制模塊

  //         延時處理模塊
void IIC_Delay(void)   
{
 _NOP();
 _NOP();
 _NOP();
}

  //         啟動I2C模塊
void start_IIC(void)      //          啟動I2
{
 P2OUT&=0xf9;                    //設(shè)置P2輸出
 P2DIR&=0XFD;                   //SDA=1, 上拉電阻使得P2.1為H,F(xiàn)D=1111,1101
P2DIR&=0XFB;                   //SCL=1              FB="1111",1011
P2DIR|=0X02;                     // SDA="0"
P2DIR|=0X04;                     // SCL="0"
}

  //         停止I2C模塊
void stop_IIC(void)       //         
{
 P2DIR|=0X02;//SDA=0
 IIC_Delay();
 P2DIR&=0XFB;//SCL=1              FB="1111",1011
P2DIR&=0XFD;//SDA=1,             上拉電阻使得P2.1為H,F(xiàn)D=1111,1101
 IIC_Delay();
P2DIR|=0X04;// SCL="0"
}

 

  //         發(fā)送 “ 0”模塊
void send_zero(void)      //             
{
 P2DIR|=0X02;// SDA="0"
 IIC_Delay();
 P2DIR&=0XFB;//SCL=1              FB="1111",1011
 IIC_Delay();
 P2DIR|=0X04;// SCL="0"
}

 

  //       發(fā)送  1模塊
void send_one(void)       //          
{
 P2DIR&=0XFD;//SDA=1,           上拉電阻使得P2.1為H,F(xiàn)D=1111,1101
 IIC_Delay();
 P2DIR&=0XFB;//SCL=1              FB="1111",1011
 IIC_Delay();
 P2DIR|=0X04;// SCL="0"
}

  //        發(fā)送單字符數(shù)據(jù)
void send _char(unsigned char data_out)    //    
{
  unsigned char i,tmp=0x80;
  for(i=0;i<8;i++)
  {
    if((data_out & tmp)>0)
    send_one();
    else
    send_zero();
    tmp/=2;
  }
}

  //         讀單字符數(shù)據(jù)
unsigned char read_char(void) 
{
 unsigned char i,tmp=0x80;
 unsigned char data1=0;
for (i=0;i<8;i++)
{
   P2DIR&=0XFD;//SDA=1,  11111101
   IIC_Delay();//
   P2DIR&=0XFB;//SCL=1              FB="1111",1011
   IIC_Delay();
   if((P2IN&0x02)>0x00)
   {
     data1|=tmp;
   }
   P2DIR|=0X04;// SCL="0"
   IIC_Delay();
   tmp/=2;
 }
 return data1;
}

  //    &    檢查應(yīng)答信號模塊
void iic_ACK(void)
{
 ack_flag=0x00;
 P2DIR&=0XFD;//SDA=1,             FD="1111",1101
 IIC_Delay();
 P2DIR&=0XFB;//SCL=1              FB="1111",1011
IIC_Delay();
while((P2IN&BIT1)==BIT1);
P2DIR|=0X04;// SCL="0"
 IIC_Delay();
}

 

  //        拒絕應(yīng)答模塊
void iic_NACK(void)  & nbsp;       {
 P2DIR&=0XFD;//SDA=1,
 IIC_Delay();
 P2DIR&=0XFB;//SCL=1              FB="1111",1011
 IIC_Delay();
 P2DIR|=0X04;// SCL="0"
 IIC_Delay();
 P2DIR|=0X02;// SDA="0"
 IIC_Delay();//         
}

  //        寫連續(xù)數(shù)據(jù)模塊
void WriteNbyte(unsigned char *p,unsigned int addr,unsigned char number)   
{
     start_IIC();
    send_char(0xa2);
    iic_ACK();   
    send_char(addr/256);    //high address byte
    iic_ACK();
    send_char(addr%256);
    iic_ACK();       
           do
                {
                    send_char(*p);
                    p++;
                    iic_ACK();                 
                }
                while(--number);
         
    stop_IIC();
    delay(10);
}

 

  //        發(fā)送應(yīng)答模塊:ACK (LOW)
void S_ACK(void)          
{
 P2DIR|=0X02;// SDA="0"
 ;IIC_Delay();
 P2DIR&=0XFB;//SCL=1              FB="1111",1011
 IIC_Delay();
 P2DIR|=0X04;// SCL="0"
 IIC_Delay();
}

  //        連續(xù)讀字符模塊
void ReadNbyte(unsigned char *p,unsigned int addr,unsigned char number)      
{
    start_IIC();
    send_char(0xa2);
    iic_ACK();
    send_char(addr/256);
    iic_ACK();
    send_char(addr%256);
    iic_ACK(); 
    start_IIC();
                 send_char(0xa3);
                 iic_ACK();
                   do
                    {
                        *p=read_char();
                        p++;
                       if(number!=1) 
                          S_ACK();        //send ACK
                    }
                    while(--number);
              iic_NACK();
    stop_IIC();
}

 

  數(shù)據(jù)的傳輸

  數(shù)據(jù)傳輸是存儲在EEPROM中的數(shù)據(jù)到達計算機的有效途徑,數(shù)據(jù)上傳到計算機最常用的是串行(RS232)接口,

 

現(xiàn)在由于USB計數(shù)的不斷成熟,通過USB可以方便快捷實現(xiàn)數(shù)據(jù)傳輸,而且可以滿足速率和設(shè)備外觀的要求,但是USB的驅(qū)動程序設(shè)計是比較復(fù)雜的工作,本例中使用簡單的橋接電路,把UART接口的數(shù)據(jù)經(jīng)過CP2102的橋接,直接實現(xiàn)數(shù)據(jù)的USB轉(zhuǎn)換,從430F449異步串口輸出的數(shù)據(jù)自動轉(zhuǎn)化為符合USB協(xié)議的數(shù)據(jù)直接連接到計算機的USB口,上位機應(yīng)用程序通過CP2102的驅(qū)動程序可以象操作串口一樣直接讀寫端口數(shù)據(jù)。

 

  結(jié)論

  以上的硬件設(shè)計比較簡單可靠,可以照搬到同類型的控制芯片上,軟件代碼也同樣具有較好的移植性,只要把控制時鐘和數(shù)據(jù)端口和程序軟件設(shè)置相一致即可。

  參考文獻:

  1、MSP430系列16位超低功耗單片機實踐與系統(tǒng)設(shè)計《清華大學(xué)出版社》

  2、MSP430系列單片機接口計數(shù)及系統(tǒng)設(shè)計實例《北京航天航空大學(xué)出版社》

  3、MSP430系列單片機C語言程序設(shè)計與開發(fā)《北京航天航空大學(xué)出版社》

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲欧洲在线视频| 亚洲一区二区不卡免费| 国产精品v日韩精品v欧美精品网站| 久久久国产精品亚洲一区| 校园春色国产精品| 亚洲欧美日韩精品久久久久| 亚洲图片欧洲图片av| 日韩一级欧洲| 99这里只有久久精品视频| 亚洲三级电影全部在线观看高清| 亚洲国产精品专区久久 | 这里只有精品视频| 亚洲理伦在线| av不卡免费看| 亚洲午夜免费福利视频| 亚洲一区二区在线| 亚洲制服av| 欧美一区日韩一区| 亚洲第一页自拍| 亚洲国产另类久久精品| 亚洲欧洲精品一区二区三区| 91久久精品国产91性色tv| 亚洲国产视频一区| 亚洲精品乱码久久久久久按摩观| 亚洲国产视频a| 亚洲精品一区在线| 一本久久青青| 亚洲自拍偷拍一区| 久久av一区二区三区漫画| 久久久精品国产免大香伊| 久久在线视频在线| 欧美成人免费小视频| 欧美经典一区二区三区| 欧美视频三区在线播放| 久久免费视频在线观看| 欧美freesex交免费视频| 欧美日韩第一区| 国产精品激情av在线播放| 国产精品亚洲不卡a| 黑人中文字幕一区二区三区| 亚洲第一主播视频| 日韩亚洲国产欧美| 亚洲欧美日韩中文播放| 亚洲国产精品嫩草影院| 在线视频日韩| 久久国产日韩| 欧美韩日一区| 国产精品视频一二三| 好吊色欧美一区二区三区四区 | 亚洲欧洲美洲综合色网| 亚洲一区二区三区精品在线| 久久成人18免费观看| 欧美成人日韩| 欧美午夜一区二区福利视频| 国产精品永久免费观看| 在线播放日韩| 中文一区二区| 亚洲第一区色| 亚洲一区精彩视频| 麻豆精品视频在线| 欧美天堂亚洲电影院在线观看| 国产麻豆精品theporn| 亚洲韩国青草视频| 先锋影音国产一区| 一区二区三区欧美亚洲| 久久久成人网| 国产精品豆花视频| 亚洲福利视频免费观看| 亚洲一线二线三线久久久| 91久久久久| 久久成人精品视频| 欧美日韩国产精品自在自线| 国产一区欧美日韩| av成人黄色| 亚洲经典在线| 久久精品国产999大香线蕉| 欧美日韩麻豆| 1024成人| 亚洲亚洲精品三区日韩精品在线视频 | 亚洲国产欧美一区| 亚洲欧美在线免费观看| 在线视频欧美精品| 欧美jizzhd精品欧美喷水 | 久久成人精品无人区| 亚洲中午字幕| 欧美激情精品久久久久久蜜臀| 国产一区二区日韩| 亚洲一区二区三区精品在线| 亚洲精品社区| 久久综合一区二区三区| 国产免费亚洲高清| 一区二区三区欧美日韩| 亚洲精品国产欧美| 久久美女性网| 国产精品亚洲人在线观看| 亚洲免费高清视频| 亚洲精品日韩在线| 玖玖在线精品| 好看的av在线不卡观看| 小黄鸭视频精品导航| 亚洲欧美另类中文字幕| 欧美日韩国产精品一区| 亚洲国产成人av好男人在线观看| 久久国产精品99精品国产| 欧美在线亚洲| 国产精品尤物| 亚洲欧美偷拍卡通变态| 亚洲欧美999| 国产精品第一区| 99精品福利视频| 夜夜爽99久久国产综合精品女不卡| 美女成人午夜| 亚洲电影免费观看高清完整版在线观看 | 久久九九精品99国产精品| 国产精品永久免费视频| 亚洲一区二区四区| 性欧美超级视频| 国产精品视频久久一区| 亚洲一区三区视频在线观看| 亚洲女ⅴideoshd黑人| 欧美午夜国产| 亚洲一区二区三区国产| 欧美一区二区女人| 国产日韩欧美电影在线观看| 午夜亚洲伦理| 久久久久一区二区三区四区| 黄页网站一区| 亚洲经典三级| 欧美日韩精品免费观看| 一本色道久久88综合亚洲精品ⅰ | 亚洲综合日韩| 久久www成人_看片免费不卡| 国产一区二区黄| 亚洲夫妻自拍| 欧美国产激情| 99re6这里只有精品视频在线观看| 中日韩美女免费视频网址在线观看| 欧美日韩一区综合| 亚洲一区三区视频在线观看| 久久大香伊蕉在人线观看热2| 国产综合色在线| 亚洲激情在线播放| 欧美日韩国产欧美日美国产精品| 99综合电影在线视频| 欧美一区二区三区免费视频| 国产日韩欧美高清| 亚洲高清在线视频| 欧美日韩国产经典色站一区二区三区| 在线视频精品一区| 久久久91精品国产一区二区三区| 激情综合视频| 一区二区三区视频观看| 国产精品久久久久久妇女6080 | 在线免费观看日本一区| 日韩天堂在线观看| 国产精品久久久久久久午夜片| 性久久久久久| 欧美电影美腿模特1979在线看 | 亚洲激情黄色| 欧美视频在线观看一区| 午夜亚洲福利在线老司机| 老司机一区二区三区| 亚洲精品美女在线观看| 午夜精品短视频| 一区免费在线| 亚洲一区二区三区四区五区午夜| 国产欧美亚洲视频| 亚洲激情自拍| 国产精品欧美激情| 亚洲第一精品影视| 欧美视频在线观看 亚洲欧| 欧美尤物巨大精品爽| 欧美日韩国产精品专区| 亚洲东热激情| 亚洲国产精品尤物yw在线观看| 久久精品一二三区| 亚洲精品久久视频| 欧美性大战久久久久| 久久99伊人| 欧美午夜在线视频| 亚洲国产精品激情在线观看| 欧美色图麻豆| 久久精品视频免费观看| 欧美日韩中文| 亚洲成人在线视频播放 | 欧美韩国日本一区| 午夜国产精品视频免费体验区| 欧美夫妇交换俱乐部在线观看| 亚洲一区图片| 欧美另类69精品久久久久9999| 欧美一级专区免费大片| 欧美三级网址| 亚洲激情电影中文字幕| 国产伦精品一区二区三区免费| 亚洲精品一品区二品区三品区| 国产在线乱码一区二区三区| 一区二区欧美视频| 免费不卡在线观看av| 亚洲欧美日韩天堂一区二区| 欧美啪啪成人vr|