历史上的今天
返回首页

历史上的今天

今天是:2025年02月05日(星期三)

正在发生

2020年02月05日 | MSP430F249EEprom读写

2020-02-05 来源:eefocus

/******************************************************************

**                                                       

**  File : EEPROM.c     | Eeprom write and read |                                    

**  Version : 1.0     

** Description : Eeprom write and read                                                                        

**  Author : LightWu                              

**  Date : 2013-4-15                                                       

**                                                   

*******************************************************************/

#include



//注意:两次发送间隔必须要有延时,否则不能再次发送,串口发送格式:



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?,发送缓冲区空

 

}

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位地址模式,器件会发送一位读写位,正好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--);                   //两次发送间隔必须要有延时,否则不能再次发送



    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--);                   //两次发送间隔必须要有延时,否则不能再次发送

    



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

 

    UCB0CTL1 &= ~UCTR;

    UCB0CTL1 |= UCTXSTT; 

   

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



}



//写入一个字节数据

void EepromWrite( unsigned char Addr, unsigned char Data )

{       

    int i;

    

    pHeadT = 0;

    pTailT = 2;          //一个地址,一个数据

        

    PTxData[0] = Addr;

    PTxData[1] = Data;

   

    for(i=3000;i>0;i--);                   //两次发送间隔必须要有延时,否则不能再次发送



    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

    //进入低功耗状态

    

    while( pHeadT < pTailT );                 //等待直到发送完成

    pHeadT = 0;                               //清零

  

    UCB0CTL1 |= UCTXSTP;                      // I2C stop condition,产生终止信号

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



}

//读N个字节数据

unsigned char EepromRead( unsigned char Addr , unsigned char Num )

{       

    int i;

    

    pHeadT = 0;

    pTailT = 1;          //写入1个地址

    

    pHeadR = 0; 

    pTailR = Num;         //读取个数

        

    PTxData[0] = Addr;

   

    for(i=3000;i>0;i--);                   //两次发送间隔必须要有延时,否则不能再次发送



    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

    //进入低功耗状态

    

    //设置为读取接收

    for(i=3000;i>0;i--);                   //两次发送间隔必须要有延时,否则不能再次发送

    

    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');



      

推荐阅读

史海拾趣

EPCOS (TDK)公司的发展小趣事

在国际化布局方面,TDK-EPC公司始终保持着积极开放的态度。公司通过设立海外研发中心、生产基地和销售网络等方式,不断拓展国际市场。同时,公司还积极参与国际竞争和合作,与全球众多知名企业建立了长期稳定的合作关系。这些举措不仅提升了TDK-EPC公司的品牌影响力和市场竞争力,也为公司的长期发展提供了有力保障。

GAPTEC Electronic GmbH & Co. KG公司的发展小趣事

背景:随着全球对环保和可持续发展的重视,Galaxy Microelectronics也开始关注其生产过程中的环保问题。

发展:公司投入巨资建设绿色工厂,采用先进的环保技术和设备,减少生产过程中的能源消耗和废弃物排放。同时,Galaxy Microelectronics还积极推广环保理念,与供应商和客户共同构建绿色供应链。这些举措不仅提升了公司的社会形象,还为其在竞争激烈的市场中赢得了更多客户的青睐。

AAC [American Accurate Components]公司的发展小趣事

进入21世纪,AAC公司继续加大市场拓展力度。2003年,AAC成功拓展了台湾市场,与明基、仁宝电脑和华宇电脑等知名企业建立了合作关系。为了满足这些客户对高品质耳机的需求,AAC开始生产制造耳机产品。这一创新举措不仅丰富了AAC的产品线,也进一步提升了其在电子消费产品市场的竞争力。

Galaxy ( Bel )公司的发展小趣事

随着业务的不断发展和规模的持续扩大,AAC公司在2005年成功在香港交易所上市。这一里程碑式的事件为AAC带来了更多的资本支持和市场认可。此后,AAC加快了全球扩张的步伐,不仅在欧洲、北美等地设立了分支机构,还与众多国际知名品牌建立了长期稳定的合作关系。

Carroll & Meynell Transformers Ltd公司的发展小趣事

在电子行业的初期,Carroll & Meynell Transformers Ltd公司以其卓越的技术创新能力脱颖而出。公司研发团队不断突破传统变压器的设计局限,推出了一系列高效、稳定的变压器产品。这些产品不仅满足了当时市场对电力传输和分配的基本需求,还以其卓越的性能赢得了客户的广泛认可。随着市场需求的不断增长,公司逐渐扩大了生产规模,成为了电子行业中的佼佼者。

福建国光公司的发展小趣事

在环保意识日益增强的今天,Carroll & Meynell Transformers Ltd公司积极响应国家绿色发展的号召,致力于研发和生产绿色环保的变压器产品。公司采用环保材料和节能技术,减少生产过程中的能源消耗和环境污染。同时,公司还加强了对废旧产品的回收和处理工作,实现了资源的循环利用。这种绿色环保的发展理念不仅为公司赢得了良好的社会声誉,也为公司的可持续发展奠定了坚实基础。

问答坊 | AI 解惑

AD7705 中文1

本帖最后由 paulhyde 于 2014-9-15 09:13 编辑 AD7705 中文1  …

查看全部问答>

TL494的占空比

初学者,正在研究电源。可是遇到很多问题,恳切想向各位请教! 如何通过硬件来控制TL494的输出PWM的占空比?…

查看全部问答>

欢迎测试测量新版主: gy8u ~~~~~

gy8u一上来就希望:大家多交流技术的话题, 非常欢迎gy8u版主,非常欢迎大家讨论:比如数据采集…… gy8u版主其人:主要做的工作是做汽车电子的测试,以及整车的测试………

查看全部问答>

问下现在TI电机控制芯片比较稳定的较新的是哪个型号?

问下现在TI电机控制芯片比较稳定的较新的是哪个型号?现在好像TI的芯片缺货.…

查看全部问答>

急求大侠帮忙!!!!

晶振频率11.0592MHZ 源程序如下: 问题是 利用串口调试软件运行时,反复输入U后经采样转换数据不一致,即模拟信号转成数字量的值 跳变太大。。。请教专家!!! CS        BIT        P1.1   &n ...…

查看全部问答>

请大家给点建议:如何解决摄像头图像不同步的问题

    我用的Sensor是200万的,芯片输出为1600×1200,而我在应用层只采取了 1600×1130,我不确定是不是这样引起图像不同步的原因,还是别的什么原因。 …

查看全部问答>

学嵌入式系统需要掌握什么?目前对这个行业的需求怎么样?

本人是计算机专业的。由于现在快踏入大三的下学期了,大四下学期也就要找工作了,但我觉得现在自己学的东西还太片面了,也太广了。所以我想找一门自己感兴趣的专业方向作为自己这未来一年的奋斗目标,同时也为了将来的工作需要同,学一门精的课程。 ...…

查看全部问答>

关心STM32的ADC精度问题.

STM32具有12BIT ADC 确实很好,很强大!但也担心它的精度问题,听闻有3BIT线形误差。下面是AT91SAM7S64关于ADC误差的说明。…

查看全部问答>

网络版原理图==stm32核心板+w5100模块

http://www.stmsky.com/bbs/viewthread.php?tid=1446&extra=网络版原理图==stm32核心板+w5100模块可以直接联网 ping 192.168.1.2直接打开  显示  hello world…

查看全部问答>

tms320F2812 能加密吗?

我看网上有做tms320F2812芯片破解的,如果flash被人家破解了,辛苦就白费了。或者28xx还有哪款是无法破解的。…

查看全部问答>