MSP430F249EEprom读写

发布者:温暖的拥抱最新更新时间:2020-02-05 来源: eefocus关键字:MSP430F249  EEprom读写 手机看文章 扫描二维码
随时随地手机看文章

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

**                                                       

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



      

[1] [2]
关键字:MSP430F249  EEprom读写 引用地址:MSP430F249EEprom读写

上一篇:MSP430F5438A 内存Flash 读写操作
下一篇:MSP430平台下实现AT24C02的读写操作

推荐阅读最新更新时间:2024-11-11 18:34

STM32F429--I2C通信(读写EEPROM,串口返回测试数据)
一、I2C介绍 I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息,SDA数据线和SCL时钟信号线。    主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。 如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送; 如果主机要接收从器件的数据,首先由主器件寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下.主机负责产生定时时钟和终止数据传送。 二、I2C的通信状态 总线空
[单片机]
STM32F429--I2C通信(<font color='red'>读写</font><font color='red'>EEPROM</font>,串口返回测试数据)
单片机模拟I2C总线读写EEPROM(24CXX)程序一
下面是一个最简单的读写程序,可以用来检测线路状况。先附上程序和电路,后面附有说明。 电路: 说明:P2口的LED都是我用来检测电路执行到哪一步的,个人觉得一目了然。 程序: #include reg51.h #define unit unsigned int #define uchar unsigned char int ok; sbit scl=P0^0; sbit sda=P0^1; sbit led0=P2^0; sbit led1=P2^1; sbit led2=P2^2; sbit led3=P2^3; sbit led4=P2^4; sbit led5=P2^5; sbit led6=P2^6;
[单片机]
单片机模拟I2C总线<font color='red'>读写</font><font color='red'>EEPROM</font>(24CXX)程序一
24C02(EEPROM)以字节读写程序(ASM)
24C02以字节读写时序 选择性读时序 .................24c02字节读写程序(已调试过 )....................... ;//////////////////////////////////////////////////// ;AT89C52与AT24C02的IIC通信 ;控制数码管显示0-P ;AT24C02采用字节写和选择性读 ;//////////////////////////////////////////////////// DAUN EQU 18 ;写入字节数,对24C02(256BK)最大为255 ADDR EQU 41H ;24C02操作数据地址 WRD
[单片机]
24C02(<font color='red'>EEPROM</font>)以字节<font color='red'>读写</font>程序(ASM)
三分钟带你了解MSP430F249硬件I2C查询法读写AT24C02
/****************************************************************** ** ** File : I2C.c “ Master Read Write | ** Version : 1.0 ** DescripTIon: I2C 查询法读写24C02 ** Author : LightWu ** Date : 2013-4-26 ** 必须注意多字节数据读取时,发送停止位需要在最后一个字节读取之前 ** 否则数据读取后,停止位发送容易失败,导致从机接收不到停止位。 *****************************************************
[单片机]
三分钟带你了解<font color='red'>MSP430F249</font>硬件I2C查询法<font color='red'>读写</font>AT24C02
实用的单片机模拟I2C总线控制EEPROM读写程序
之前写的EEPROM程序虽然能够软仿成功,但烧到单片机里的时候却不能用,无疑是时序的问题,今天修正了时序,总算硬仿成功了。对照上次的程序可以发现就是添加了头函数: intrins.h ,这样就可以通过 _nop_() 指令较为准确的控制时序。 上次那个问题依然没有解决:就是接收缓冲区的数据是从readbuf 开始的,以这个程序为例: readbuf 中存放0x96 readbuf 中存放0x84 readbuf 中存放0xd5 readbuf 中存放0x63 readbuf 中存放0x7c readbuf 中存放0x8c 其实我是想把收到的数据存放在readbuf ~ 中的,我也不知道为什么结果会这样,有知道的麻烦指教
[单片机]
嵌入式STM32学习:I2C-读写EEPROM2
bsp_i2c_ee.h #ifndef __I2C_EE_H #define __I2C_EE_H #include stm32f4xx.h /* AT24C01/02每页有8个字节 */ #define I2C_PageSize 8 /* AT24C04/08A/16A每页有16个字节 */ //#define I2C_PageSize 16 /* STM32 I2C 快速模式 */ #define I2C_Speed 400000 /* 这个地址只要与STM32外挂的I2C器件地址不一样即可 */ #define I2C_OWN_ADDRESS7
[单片机]
STM32-(20):I2C通信(实验:读写EEPROM
硬件电路连接 底板上的 I2C 接口 A0、A1是用来确定器件的地址的。 排针上的引脚图: 核心板上的引脚图: 通过I2C总线实现对EEPROM的读写操作的准备工作: 1、掌握芯片(目标对象)特性,才能对其正确的读和写。 2、掌握 I2C 通信,读写过程需要用到。 3、Cortex的一些操作,编程方法。 实验内容:通过I2C总线实现对EEPROM的读写操作 main.c #include stm32f10x_lib.h #include IIC.h /*------------函数的声明---------------*/ void Delay_MS(u16 dly); void RCC_Configu
[单片机]
STM32-(20):I2C通信(实验:<font color='red'>读写</font><font color='red'>EEPROM</font>)
MSP430F249IIC
/****************************************************************** ** ** File: IIC.c | IIC Communication | ** Version: 1.0 ** Description : 430 WRITE AND READ 24C02 VIA IIC BUS ** Author: LightWu ** Date: 2013-4-11
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved