www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] /******************************************************************** ** File : EEPROM.c | Eeprom write and read | ** Version : 1.0 ** Descri

 

/******************************************************************
**
** File : EEPROM.c | Eeprom write and read |
** Version : 1.0
** Description: Eeprom write and read
** Author : LightWu
** Date : 2013-4-15
**
*******************************************************************/
#include


//注意:兩次發(fā)送間隔必須要有延時(shí),否則不能再次發(fā)送,串口發(fā)送格式:


unsigned char PTxData[250]; // Pointer to TX data
unsigned char pHeadT;
unsigned char pTailT;


unsigned char pHeadR;
unsigned char pTailR;


unsigned char TXByteCtr;
const unsigned char TxData[] = // Table of data to transmit
{
0x01,
0x02,
0x03,
0x04,
0x05
};
unsigned char RxData[] ;


void UartInit(void)
{
if (CALBC1_1MHZ==0xFF) // If calibration constant erased
{
while(1); // do not load, trap CPU!!
}
DCOCTL = 0; // Select lowest DCOx and MODx settings
BCSCTL1 = CALBC1_1MHZ; // Set DCO
DCOCTL = CALDCO_1MHZ;
P3SEL |= 0x30; // P3.4,5 = USCI_A0 TXD/RXD
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 104; // 1MHz 9600; (104)decimal = 0x068h
UCA0BR1 = 0; // 1MHz 9600
UCA0MCTL = UCBRS0; // Modulation UCBRSx = 1
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
}
void UartSend( unsigned char Data )
{
UCA0TXBUF = Data; // TX -> RXed character
while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?,發(fā)送緩沖區(qū)空

}
void IICInit(void)
{
UCB0CTL1 |= UCSWRST; // Enable SW reset
UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2C Master, synchronous mode
UCB0CTL1 = UCSSEL_2 + UCSWRST; // Use SMCLK, keep SW reset
UCB0BR0 = 12; // fSCL = SMCLK/12 = ~100kHz
UCB0BR1 = 0;
UCB0I2CSA = 0xA0>>1; // Slave Address is ,注意地址需要右移一位,24C02地址為0XA0,故要寫入0X50
// 7位地址模式,器件會(huì)發(fā)送一位讀寫位,正好8位。
UCB0CTL1 &= ~UCSWRST; // Clear SW reset, resume operation
IE2 |= UCB0TXIE; // Enable TX interrupt
IE2 |= UCB0RXIE;


}
void IICSend( void )
{
int i;

for(i=3000;i>0;i--); //兩次發(fā)送間隔必須要有延時(shí),否則不能再次發(fā)送


while (UCB0CTL1 & UCTXSTP); // Ensure stop condition got sent


UCB0CTL1 |= UCTR + UCTXSTT; // I2C TX, start condition

__bis_SR_register(CPUOFF + GIE); // Enter LPM0 w/ interrupts


}
void IICRecv( void )
{
int i;

for(i=3000;i>0;i--); //兩次發(fā)送間隔必須要有延時(shí),否則不能再次發(fā)送



while (UCB0CTL1 & UCTXSTP); // Ensure stop condition got sent

UCB0CTL1 &= ~UCTR;
UCB0CTL1 |= UCTXSTT;

__bis_SR_register(CPUOFF + GIE); // Enter LPM0 w/ interrupts


}


//寫入一個(gè)字節(jié)數(shù)據(jù)
void EepromWrite( unsigned char Addr, unsigned char Data )
{
int i;

pHeadT = 0;
pTailT = 2; //一個(gè)地址,一個(gè)數(shù)據(jù)

PTxData[0] = Addr;
PTxData[1] = Data;

for(i=3000;i>0;i--); //兩次發(fā)送間隔必須要有延時(shí),否則不能再次發(fā)送


while (UCB0STAT & UCBUSY); // wait until I2C module has
// finished all operations.
while (UCB0CTL1 & UCTXSTP); // Ensure stop condition got sent


UCB0CTL1 |= UCTR + UCTXSTT; // I2C TX, start condition

__bis_SR_register(CPUOFF + GIE); // Enter LPM0 w/ interrupts
//進(jìn)入低功耗狀態(tài)

while( pHeadT < pTailT ); //等待直到發(fā)送完成
pHeadT = 0; //清零

UCB0CTL1 |= UCTXSTP; // I2C stop condition,產(chǎn)生終止信號(hào)
while(UCB0CTL1 & UCTXSTP); // Ensure stop condition got sent


}
//讀N個(gè)字節(jié)數(shù)據(jù)
unsigned char EepromRead( unsigned char Addr , unsigned char Num )
{
int i;

pHeadT = 0;
pTailT = 1; //寫入1個(gè)地址

pHeadR = 0;
pTailR = Num; //讀取個(gè)數(shù)

PTxData[0] = Addr;

for(i=3000;i>0;i--); //兩次發(fā)送間隔必須要有延時(shí),否則不能再次發(fā)送


while (UCB0STAT & UCBUSY); // wait until I2C module has
// finished all operations.
while (UCB0CTL1 & UCTXSTP); // Ensure stop condition got sent


UCB0CTL1 |= UCTR + UCTXSTT; // I2C TX, start condition

__bis_SR_register(CPUOFF + GIE); // Enter LPM0 w/ interrupts
//進(jìn)入低功耗狀態(tài)

//設(shè)置為讀取接收
for(i=3000;i>0;i--); //兩次發(fā)送間隔必須要有延時(shí),否則不能再次發(fā)送

UCB0CTL1 &= ~UCTR;
UCB0CTL1 |= UCTXSTT; //start Read

__bis_SR_register(CPUOFF + GIE); // Enter LPM0 w/ interrupts

return 1;


}


int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P3SEL |= 0x06; // Assign I2C pins to USCI_B0

IICInit();

UartInit();


while (1)
{
UartSend('M');

EepromWrite(0x13,'A');
EepromWrite(0x11,'B');
EepromWrite(0x12,'C');



EepromRead(0X10,4);

UartSend(RxData[0]);
UartSend(RxData[1]);
UartSend(RxData[2]);
UartSend(RxData[3]);

while(1);


}
}


//------------------------------------------------------------------------------
// The USCIAB0TX_ISR is structured such that it can be used to transmit any
// number of bytes by pre-loading TXByteCtr with the byte count. Also, TXData
// points to the next byte to transmit.
//------------------------------------------------------------------------------
#pragma vector = USCIAB0TX_VECTOR
__interrupt void USCIAB0TX_ISR(void)
{
if ( pHeadT < pTailT ) // Check TX byte counter
{


UCB0TXBUF = PTxData [pHeadT++ ]; // Load TX buffer

}
else
{
// pHeadT = 0;

// UCB0CTL1 |= UCTXSTP; // I2C stop condition
IFG2 &= ~UCB0TXIFG; // Clear USCI_B0 TX int flag
__bic_SR_register_on_exit(CPUOFF); // Exit LPM0

}
}


#pragma vector = USCIAB0RX_VECTOR
__interrupt void USCIAB0RX_ISR(void)
{

if ( pHeadR < pTailR ) // Check TX byte counter
{


RxData[ pHeadR++ ] = UCB0RXBUF; // Move RX data to address PRxData

}
else
{
pHeadR = 0;

UCB0CTL1 |= UCTXSTP; // I2C stop condition
IFG2 &= ~UCB0RXIFG; // Clear USCI_B0 RX int flag
__bic_SR_register_on_exit(CPUOFF); // Exit LPM0

}


}

 

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉