历史上的今天
返回首页

历史上的今天

今天是:2025年06月21日(星期六)

2021年06月21日 | AVR系列之内部EEPROM的操作

2021-06-21 来源:eefocus

这程序针对的是M16的内部EEPROM 它的大小只有512个字节 对它的操作 是要注意它的操作时序 首先是先等待对EEPROM的操作(读或写)禁止  即是控制寄存器中的EEWE/EERE为0  然后写入地址 接着就写入数据到数据寄存器EEDR或读出数据  下面的实现的功能是这样的 PC通过串口发送字符串给EEPROM  发送@R  读EEPROM中的内容 并通过串口发送给PC


代码如下:

#include

#include

#define uchar unsigned char

 

uchar RecvFlag = 0;      //串口接收到的数据
uchar Flag = 0;       //为1时表示接收到了@,如果紧接着收到R则发送EEPROM中的数据
uint EEpromAdd = 0;                 //存储在EEPROM中的地址
uchar temp[255],tempcnt = 0;   //暂存数据
uchar temp1;                               //暂存串口接收到的数据

 

//EEPROM的写程序

void EepromWrite ( uint addr, uchar val)   //向EEPROM写操作
{
   while ( EECR&0x02 );              //判断EEWE是否为0
    EEAR = addr;
    EEDR = val;
    CLI();
    EECR = EECR|0x04;                //置EEMWE为1
    EECR = EECR|0x02;               //置EEWE为1
    SEI();  
}

 

//EEPROM读程序

void EepromRead (uchar num, uint addr, uchar *val)    //向EEPROM读操作
{
   while (num)
  {
       while ( EECR&0x01 );  //判断EEWE是否为0
       EEAR = addr;
       EECR = EECR|0x01;     //置EERE为1
      *val = EEDR;
      addr++;
      val++; 
      num--;
   }
}

//串口初始化

void Uart0Init(void)                  // AVR中串口的初始化程序
{
   UCSRB = 0x00;                     //关串口
   UCSRA = 0x02;                   //倍速模式   M16中文P151
   UCSRC = BIT(URSEL) | 0x06;  //写UCSRC寄存器,设定8个bit
   UBRR  = 206;                              //设定串口波特率为600
   UCSRB = 0x98;                          //开串口
}

 

//串口中断服务函数

#pragma interrupt_handler UartRecvData:12
void UartRecvData(void)
{
     temp1 = UDR;
     RecvFlag = 1;
}

 

//发送字符串

void UartTransmitData(uchar *SendData, uint len)
{
   uint i;
   for( i = 0; i < len; i++)
  {
     while(!(UCSRA&0x20));      //判断数据寄存器是否为空
     UDR = SendData[i];
   }
}

 

//初始化各种信息

void InitDevices(void)
{
    CLI();           //关全部中断
    Uart0Init();
    SEI();              //开全中断
}

 

//主函数

void main ( void )

{

    uchar EepromData[255] ;
    uint j;
    InitDevices();   
    while(j++);   
    EepromRead (255, 0, EepromData); //读取上次断电前程序存储的数据
    UartTransmitData(EepromData, 255); //通过串口显示
    while(1)11
   {
      if ( Flag == 2 )
     {
        Flag = 0;
        EepromRead (EEpromAdd, 0, EepromData);//读取本次存储的数据,串口输出
        UartTransmitData(EepromData, EEpromAdd);
      }
      if ( RecvFlag )
     {
         RecvFlag = 0;
         if( temp1 == '@')
         Flag = 1;
         else if(((temp1 == 'R')||(temp1 == 'r'))&&( Flag == 1))//连续接收到@R
        {
            Flag = 2;
        }
        else
       {
           Flag = 0;
           EepromWrite ( EEpromAdd++, temp1);
           if ( EEpromAdd >= 255)
                EEpromAdd = 0;
        }
    }
  }

}


推荐阅读

史海拾趣

Eutech公司的发展小趣事

EUtech Scientific Engineering公司起初以测量技术为核心,专注于为能源和电力系统提供高精度测量设备。随着技术的不断发展和市场需求的变化,公司意识到控制技术在电力系统中的重要性。于是,公司投入大量研发资源,成功将测量与控制技术相结合,开发出具有自主知识产权的控制系统,实现了从测量到控制的跨越。

Everspin Technologies公司的发展小趣事

Everspin一直致力于MRAM技术的创新和发展。其中,自旋转移力矩MRAM(STT-MRAM)是该公司的重要技术之一。Everspin在平面内和垂直磁隧道结(MTJ)STT-MRAM位单元的开发方面取得了显著成果,并积累了超过600项有效专利和应用的知识产权组合。这些技术的创新和专利的积累,使得Everspin在MRAM市场中保持了领先地位。

Cantec Electronic Co Ltd公司的发展小趣事

随着电子行业的快速发展,市场竞争日益激烈。Cantec Electronic Co Ltd意识到,传统的生产模式已经无法满足市场的需求。于是,公司决定进行转型升级,将重心转向智能电子产品的研发和生产。通过引进先进的生产设备和技术人才,公司成功开发出了一系列具有竞争力的智能电子产品,赢得了市场的广泛认可。

Electro Technik Industries公司的发展小趣事

为了扩大市场份额,ETI开始积极寻求国际合作。公司先后与多家国际知名企业建立了战略合作关系,共同研发新产品、开拓市场。同时,ETI还积极参加国际电子展览会,展示公司的技术实力和产品优势,吸引了众多客户的关注。通过不断努力,ETI的产品逐渐打入国际市场,成为了一家具有全球影响力的电子企业。

GAIA Converter Inc公司的发展小趣事

位于广东东莞的锋鸣电子有限公司,自2010年成立以来,便明确了自己的市场定位——专注于汽车电子配件的研发与生产。随着汽车行业的快速发展,公司敏锐地捕捉到智能驾驶和车载娱乐系统对高质量电声器件的需求,迅速调整产品结构,推出了一系列符合市场需求的蜂鸣器、扬声器等产品。凭借精准的市场定位和优质的产品质量,锋鸣电子在汽车电子配件领域站稳了脚跟。

FCI [First Components International]公司的发展小趣事

位于广东东莞的锋鸣电子有限公司,自2010年成立以来,便明确了自己的市场定位——专注于汽车电子配件的研发与生产。随着汽车行业的快速发展,公司敏锐地捕捉到智能驾驶和车载娱乐系统对高质量电声器件的需求,迅速调整产品结构,推出了一系列符合市场需求的蜂鸣器、扬声器等产品。凭借精准的市场定位和优质的产品质量,锋鸣电子在汽车电子配件领域站稳了脚跟。

问答坊 | AI 解惑

关于visualstate的

有哪位大哥用过IAR VISUALSTATE的,麻烦介绍下(越详细越好),谢谢…

查看全部问答>

招聘赴微软嵌入式软件工程师!

海辉软件(国际)集团  www.hisoft.com 微软事业部-MSPD 招聘:赴微软高级软件工程师 如果您想参加一个影响全球无数顾客的产品的研发工作,这个产品应该是什么呢? 您是否喜欢在一个快节奏的环境下工作,解决客户的实际问题并且帮助 ...…

查看全部问答>

求助!FC7上的minicom读不到串口信息……

我在新装的fedora 7下用minicom看2410的串口信息!可是没有任何显示!我在redhat9的minicom和xp的dnw上是可以显示的。 串口的设置serial device:/dev/ttyS0                   &nbs ...…

查看全部问答>

请教WIFI

如果我采集的信号是每秒钟采512个点,频率500HZ,用8位的52单片机实现12位的AD。那么我算的每秒钟的数据量是500K(16*512*500/8/1024) 问题一:上述算法是否正确;如果正确接问题二;如果不正确,请教高手该如何处理。 问题二:如果我需要把采的 ...…

查看全部问答>

低电平测量的三同轴电缆和保护连接

如前所述,当我们把保护电压连到同轴电缆[1]的屏蔽时,如果该保护电压大于30V有效值,就可能出现安全风险。三同轴电缆用连至大地或LO端的外层屏蔽将保护屏蔽包围起来,从而避免了这种危险。 当静电计按无保护方式工作时,三同轴电缆的连接方法 ...…

查看全部问答>

MSP430F2122烧完程序后就无法识别了

用的是IAR软件,JTAG串口仿真器,调试的时候,初始化各个管脚,程序烧进去之后软件就无法识别430啦,同一个板子,我又换了一个430,能识别,可程序写进去,又无法识别啦,怎能么解决啊,我想是因为我把JTAG那几个管脚也当普通管脚用了,快点帮忙下 ...…

查看全部问答>

超级强劲的KeyStone 多核 ARM 和 ARM + DSP 处理器

KeyStone 多核 ARM 和 ARM + DSP 处理器包括各种器件选择,这些器件以最低的功率级别和成本提供最高的性能。 TI 的 KeyStone 平台以低于多芯片解决方案的功耗,提供高达 5.6GHz 的 ARM 和 9.6GHz 的 DSP 处理能力,因此适用于嵌入式应用,例如云 ...…

查看全部问答>

LPC1500体验+之八_WWDT使用初谈

本帖最后由 youzizhile 于 2014-9-16 11:26 编辑 我的其他帖子:LPC1500体验+开发环境的构建 LPC1500体验+驱动步进电机设计 LPC1500体验+led闪烁 LPC1500体验+之四_串口调试接收数据成功 LPC1500体验+之五_LCD1602驱动电路设计 LPC1500体验+ ...…

查看全部问答>

EEWORLD大学堂----ARM与DSP通信

ARM与DSP通信:https://training.eeworld.com.cn/course/255??????? 在多核编程的开发和调试中,核与和之间的通信以及信息交互是非常必要的,这关系到整个系统的稳定性以及性能;在Keystone的ARM和DSP融合架构下,ARM与DSP的通信也是十分重要的;在 ...…

查看全部问答>