#include "msp430g2553.h"
#include "uart.h"
unsigned char RX_Data;
void I2C_Init(unsigned char SA);//I2C初始化,SA為從器件地址
void I2C_ReadData(unsigned char address);//I2C讀出某一地址的數據
unsigned char I2C_WriteData(unsigned char address,unsigned char data);//I2C向某一地址寫入數據
void delay(void);
void I2C_Init(unsigned char SA)
{
P1SEL |= (BIT6 + BIT7);
P1SEL2|= (BIT6 + BIT7);
UCB0CTL1 |= UCSWRST; // Enable SW reset
UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2C Master, synchronous mode
UCB0CTL1 |= UCSSEL_2 + UCSWRST; // Use SMCLK, keep SW reset
UCB0BR0 = 30; // fSCL = SMCLK/80 = ~100kHz
UCB0BR1 = 0;
UCB0CTL0 &= ~UCSLA10; // 7位地址模式
UCB0I2CSA = SA; // Slave Address is 2ch
UCB0CTL1 &= ~UCSWRST; // Clear SW reset, resume operation
delay();
}
unsigned char I2C_WriteData(unsigned char address,unsigned char data)
{
while( UCB0CTL1& UCTXSTP );
UCB0CTL1 |= UCTR; // 寫模式
UCB0CTL1 |= UCTXSTT; // 發送啟動位
UCB0TXBUF = address; // 發送字節地址
// 等待UCTXIFG=1與UCTXSTT=0 同時變化等待一個標志位即可
while((IFG2 & UCB0TXIFG)==0)
{
if( UCB0STAT& UCNACKIFG ) // 若無應答 UCNACKIFG=1
{
return 1;
}
}
UCB0TXBUF = data; // 發送字節內容
while((IFG2 & UCB0TXIFG)==0); // 等待UCTXIFG=1
UCB0CTL1 |= UCTXSTP;
while(UCB0CTL1& UCTXSTP); // 等待發送完成
return 0;
}
unsigned char I2C_WriteNData( unsigned char address, unsigned char *pWbuf, unsigned char len)
{
unsigned char i;
while( UCB0CTL1& UCTXSTP );
UCB0CTL1 |= UCTR; // 寫模式
UCB0CTL1 |= UCTXSTT; // 發送啟動位
UCB0TXBUF = address; // 發送字節地址
// 等待UCTXIFG=1與UCTXSTT=0 同時變化等待一個標志位即可
while((IFG2 & UCB0TXIFG)==0)
{
if( UCB0STAT& UCNACKIFG ) // 若無應答 UCNACKIFG=1
{
return 1;
}
}
for( i= 0; i < len; i++)
{
UCB0TXBUF = *pWbuf++; // 發送寄存器內容
while(UCB0CTL1& UCTXSTP); // 等待UCTXIFG=1
}
UCB0CTL1 |= UCTXSTP;
while(UCB0CTL1& UCTXSTP); // 等待發送完成
return 0;
}
void I2C_ReadData(unsigned char address)
{
UCB0CTL1 |= UCTR ;
UCB0CTL1 |= UCTXSTT; // I2C TX, start condition
UCB0TXBUF = address;////eeprom low addr
while((IFG2 & UCB0TXIFG)==0);
UCB0CTL1 &= ~UCTR; // I2C RX,
UCB0CTL1 |= UCTXSTT;
while(UCB0CTL1&UCTXSTT);
UCB0CTL1 |= UCTXSTP;
while((IFG2&UCB0RXIFG)==0);
RX_Data = UCB0RXBUF;
while(UCB0CTL1 & UCTXSTP);
}
unsigned char I2C_ReadNData(unsigned char address, unsigned char *pRead, unsigned char len )
{
unsigned char i;
while( UCB0CTL1& UCTXSTP );
UCB0CTL1 |= UCTR; // 寫模式
UCB0CTL1 |= UCTXSTT; // 發送啟動位和寫控制字節
UCB0TXBUF = address; // 發送字節地址
// 等待UCTXIFG=1與UCTXSTT=0 同時變化等待一個標志位即可
while((IFG2 & UCB0TXIFG)==0);
UCB0CTL1 &= ~UCTR; // 讀模式
UCB0CTL1 |= UCTXSTT; // 發送啟動位和讀控制字節
while(UCB0CTL1& UCTXSTT); // 等待UCTXSTT=0
// 若無應答 UCNACKIFG = 1
for( i= 0; i< len -1 ; i++)
{
while((IFG2&UCB0RXIFG)==0); // 讀取字節內容,不包括最后一個字節內容
*pRead++= UCB0RXBUF;
}
UCB0CTL1 |= UCTXSTP; // 在接收最后一個字節之前發送停止位
while((IFG2&UCB0RXIFG)==0); // 讀取最后一個字節內容
*pRead = UCB0RXBUF;
while( UCB0CTL1& UCTXSTP );
return 0;
}
void delay(void)
{
unsigned int i,n;
for(i=0;i<100;i++)
for(n=0;n<0xff;n++);
}
int main( void )
{
unsigned char ReadBuf[10];
unsigned char temp = 1;
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
BCSCTL1=CALBC1_1MHZ;
DCOCTL=CALDCO_1MHZ;
Uart_Init();
P1DIR |= BIT0;
P1OUT |= BIT0;
I2C_Init(0x51);//1010 000X>>1
//I2C_WriteData(0x02,5);
_EINT();
//I2C_Init(0x51);//1010 000X>>1
//I2C_ReadData(tUart.RecBuf[0]-0x30);
while(1)
{
if(tUart.RecFlag)
{
tUart.RecFlag = 0;
tUart.Len = 0;
//I2C_Init(0x51);//1010 000X>>1
//I2C_ReadData(tUart.RecBuf[0]-0x30);
I2C_WriteData(0x03,temp++);
I2C_ReadNData(0x02, ReadBuf, 8 );
UartSendStr(ReadBuf);
//UartSendByte(RX_Data);
}
}
}
上一篇:MSP430FR2433 LaunchPad板子energy trace技術測量電流電壓
下一篇:基于MSP430F149的超聲波測距
推薦閱讀
史海拾趣
機頂盒,全稱為數字視頻變換盒,是現代家庭娛樂中不可或缺的重要設備。從廣義上講,任何與電視機連接的網絡終端設備均可視為機頂盒,它們不僅限于接收和轉換電視信號,還具備豐富的網絡交互功能。
機頂盒的核心功能在于接收并解碼來自有線電纜、衛星天線、寬帶網絡及地面廣播的數字電視信號,將其轉換成適合在電視機上播放的格式。這一過程包括接收、解碼和顯示三個主要步驟,確保了用戶能夠享受到高清乃至4K的超高清畫質和震撼音效。此外,機頂盒還提供了諸如電子節目指南、因特網網頁瀏覽等增值服務,極大地豐富了用戶的觀看體驗。
隨著技術的不斷進步,機頂盒正朝著智能化、多功能化方向發展。例如,智能推薦算法能夠根據用戶的觀看歷史和偏好,提供個性化的節目推薦;語音識別技術則讓用戶能夠通過語音指令控制機頂盒,實現更加便捷的操作體驗。同時,機頂盒還支持家庭影院功能,讓用戶在家中就能享受到電影院般的視聽效果。
總的來說,機頂盒作為連接電視與外部信號源的橋梁,不僅提升了電視節目的觀看體驗,還通過豐富的網絡交互功能為用戶提供了更加廣泛的內容和娛樂選擇。隨著技術的不斷發展和用戶需求的日益多樣化,機頂盒將繼續在家庭娛樂領域發揮重要作用。
進入新世紀后,電子行業發展迅速,對電子元器件的性能要求也越來越高。ELEKTRO-PLAST NASIELSK公司緊跟行業趨勢,投入大量資源進行技術創新。公司研發團隊成功開發出一種新型塑料材料,不僅具有優異的絕緣性能和耐高溫性能,還具有良好的可加工性。這一技術突破使得公司的產品在市場上脫穎而出,贏得了眾多客戶的青睞。
在半導體材料領域,對純度的要求越來越高。Entegris通過不斷的技術創新,提升材料的純度,以滿足晶圓廠對材料的高要求。同時,隨著制程工藝的步驟增多,控制污染的環節也隨之增加,Entegris在微塵控制方面也面臨著巨大的挑戰。
Atmel(Microchip)一直注重技術創新和產品升級。公司不斷投入研發資金,推動新產品的研發和現有產品的改進。通過引入新技術、優化產品設計等方式,Atmel的產品在性能、功耗、可靠性等方面都得到了顯著提升。這些創新成果不僅滿足了客戶日益增長的需求,也為公司贏得了更多的市場份額。
為了進一步擴大市場份額和拓展應用領域,Atmel(Microchip)積極與其他企業開展合作。公司與多家知名企業建立了戰略合作關系,共同推動微控制器及相關技術在各個領域的應用。通過與合作伙伴的緊密合作,Atmel的產品已經廣泛應用于工業、消費、安全、通信、計算和汽車等多個領域,為這些領域的發展提供了強有力的支持。
這五個故事旨在展現Atmel(Microchip)在電子行業中的發展歷程和成就,涵蓋了從創業初期到被收購后的不同階段。通過這些故事,我們可以看到Atmel(Microchip)如何憑借技術創新、市場拓展和合作發展,逐漸成為了微控制器領域的領軍企業。
隨著公司規模的不斷擴大,ABL Heatsink開始重視品牌建設和市場推廣。公司加大了在廣告、展會等方面的投入,提升了品牌知名度。同時,ABL Heatsink還積極參與行業交流活動,與同行分享經驗和技術,進一步鞏固了公司的行業地位。
“都是開車惹的禍。”我一邊望著體重稱上的指針,一邊向老公抱怨道?!昂俸伲俨贿\動,你可以和大象媲美了。”老公幸災樂禍的說。 眼瞅著這體重稱上的指針已經跨越了55公斤,正向60公斤靠攏。我著急的說:“要不咱們到健身中心去鍛煉鍛煉? ...… 查看全部問答∨ |
|
首先來張全身照 近一點看看,顯示的是啥。 其中x,y,z表示當前三軸的測量值,dx,dy,dz表示與x,y,z軸的夾角,也就是我們說的傾角 來展示一下傾角測試,看看現在的夾角,與x軸逆時針方向夾角-29度 來 ...… 查看全部問答∨ |
在EBOOT里面的main.c中有變量g_pBootCfg,請問是在哪里初始化的? 如題,只看到有定義的地方:PBOOT_CFG g_pBootCfg; 沒找到在哪里初始化的,請知道的大俠指點一下吧! 千萬不要因為我的問題過于幼稚而將之過濾...… 查看全部問答∨ |
在linux平臺下做驅動開發需要具備那些知識, 需要模電,數電知識嗎? 在linux平臺下做驅動開發需要具備那些知識, 需要模電,數電知識嗎? 我模電和數電學的不是很好,不過C和匯編學的還可以, 不懂模電和數電適合做驅動程序的開發嗎? 謝謝!… 查看全部問答∨ |
|
各位高手,我用VS2008開發在Windows CE6.0上的串口應用程序,我想使用MSCEComm.dll這個控件,但是我用REGSVRCE.EXE這個程序就是注冊不了,然后我用VS2008開發了一個簡單的 智能設備控件, 注冊成功了. 有下列幾個問題,麻煩各 ...… 查看全部問答∨ |