历史上的今天
今天是: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; //串口接收到的数据 //EEPROM的写程序 void EepromWrite ( uint addr, uchar val) //向EEPROM写操作 //EEPROM读程序 void EepromRead (uchar num, uint addr, uchar *val) //向EEPROM读操作 //串口初始化 void Uart0Init(void) // AVR中串口的初始化程序 //串口中断服务函数 #pragma interrupt_handler UartRecvData:12 //发送字符串 void UartTransmitData(uchar *SendData, uint len) //初始化各种信息 void InitDevices(void) //主函数 void main ( void ) { uchar EepromData[255] ; }
uchar Flag = 0; //为1时表示接收到了@,如果紧接着收到R则发送EEPROM中的数据
uint EEpromAdd = 0; //存储在EEPROM中的地址
uchar temp[255],tempcnt = 0; //暂存数据
uchar temp1; //暂存串口接收到的数据
{
while ( EECR&0x02 ); //判断EEWE是否为0
EEAR = addr;
EEDR = val;
CLI();
EECR = EECR|0x04; //置EEMWE为1
EECR = EECR|0x02; //置EEWE为1
SEI();
}
{
while (num)
{
while ( EECR&0x01 ); //判断EEWE是否为0
EEAR = addr;
EECR = EECR|0x01; //置EERE为1
*val = EEDR;
addr++;
val++;
num--;
}
}
{
UCSRB = 0x00; //关串口
UCSRA = 0x02; //倍速模式 M16中文P151
UCSRC = BIT(URSEL) | 0x06; //写UCSRC寄存器,设定8个bit
UBRR = 206; //设定串口波特率为600
UCSRB = 0x98; //开串口
}
void UartRecvData(void)
{
temp1 = UDR;
RecvFlag = 1;
}
{
uint i;
for( i = 0; i < len; i++)
{
while(!(UCSRA&0x20)); //判断数据寄存器是否为空
UDR = SendData[i];
}
}
{
CLI(); //关全部中断
Uart0Init();
SEI(); //开全中断
}
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;
}
}
}
上一篇:AVR之简单的ADC程序
史海拾趣
|
海辉软件(国际)集团 www.hisoft.com 微软事业部-MSPD 招聘:赴微软高级软件工程师 如果您想参加一个影响全球无数顾客的产品的研发工作,这个产品应该是什么呢? 您是否喜欢在一个快节奏的环境下工作,解决客户的实际问题并且帮助 ...… 查看全部问答> |
|
我在新装的fedora 7下用minicom看2410的串口信息!可是没有任何显示!我在redhat9的minicom和xp的dnw上是可以显示的。 串口的设置serial device:/dev/ttyS0 &nbs ...… 查看全部问答> |
|
如前所述,当我们把保护电压连到同轴电缆[1]的屏蔽时,如果该保护电压大于30V有效值,就可能出现安全风险。三同轴电缆用连至大地或LO端的外层屏蔽将保护屏蔽包围起来,从而避免了这种危险。 当静电计按无保护方式工作时,三同轴电缆的连接方法 ...… 查看全部问答> |
|
用的是IAR软件,JTAG串口仿真器,调试的时候,初始化各个管脚,程序烧进去之后软件就无法识别430啦,同一个板子,我又换了一个430,能识别,可程序写进去,又无法识别啦,怎能么解决啊,我想是因为我把JTAG那几个管脚也当普通管脚用了,快点帮忙下 ...… 查看全部问答> |
|
超级强劲的KeyStone 多核 ARM 和 ARM + DSP 处理器 KeyStone 多核 ARM 和 ARM + DSP 处理器包括各种器件选择,这些器件以最低的功率级别和成本提供最高的性能。 TI 的 KeyStone 平台以低于多芯片解决方案的功耗,提供高达 5.6GHz 的 ARM 和 9.6GHz 的 DSP 处理能力,因此适用于嵌入式应用,例如云 ...… 查看全部问答> |
|
本帖最后由 youzizhile 于 2014-9-16 11:26 编辑 我的其他帖子:LPC1500体验+开发环境的构建 LPC1500体验+驱动步进电机设计 LPC1500体验+led闪烁 LPC1500体验+之四_串口调试接收数据成功 LPC1500体验+之五_LCD1602驱动电路设计 LPC1500体验+ ...… 查看全部问答> |
|
ARM与DSP通信:https://training.eeworld.com.cn/course/255??????? 在多核编程的开发和调试中,核与和之间的通信以及信息交互是非常必要的,这关系到整个系统的稳定性以及性能;在Keystone的ARM和DSP融合架构下,ARM与DSP的通信也是十分重要的;在 ...… 查看全部问答> |




