AVReeprom操作变量声明chareeproma;执行EEPROM读操作时,CPU会停止工作4个周期,然后再执行后续指令;执行EEPROM写操作时,CPU会停止工作2个周期,然后再执行后续指令。读写函数//函数名:EepromWrite(unsignedintaddr,unsignedcharval)//功能:向EEPROM制定地址写入制定内容//参数:unsignedintaddr,unsignedcharval分别为要写入的地址和数据//示例:EepromWrite(0x20,0x41)向0x20地址写入0x41//============================================voidEepromWrite(unsignedintaddr,unsignedcharval){while(EECR&0x02);//判断EEWE是否为0EEAR=addr;EEDR=val;CLI();EECR=EECR|0x04;//置EEMWE为1EECR=EECR|0x02;//置EEWE为1SEI();}//============================================//函数名:EepromRead(ucharnum,uintaddr,uchar*val)//功能:读出EEPROM中制定地址制定长度的数据//参数:unsignedintaddr,unsignedcharval分别为要读出数据的长度、入口地址和接收指针//示例:EepromRead(10,0x20,data)读出0x20以后10个数据存入data指针指向的内存空间//============================================voidEepromRead(unsignedcharnum,unsignedintaddr,unsingedchar*val){while(num){while(EECR&0x01);//判断EEWE是否为0EEAR=addr;EECR=EECR|0x01;//置EERE为1*val=EEDR;addr++;val++;num--;}}EEPROM数据存储器ATmega16包含512字节的EEPROM数据存储器。它是作为一个独立的数据空间而存在的,可以按字节读写。EEPROM的寿命至少为100,000次擦除周期。EEPROM的访问由地址寄存器、数据寄存器和控制寄存器决定。通过SPI和JTAG及并行电缆下载EEPROM数据的操作请分别参见P260、P265及P250。EEPROM读/写访问EEPROM的访问寄存器位于I/O空间。EEPROM的写访问时间由Table1给出。自定时功能可以让用户软件监测何时可以开始写下一字节。用户操作EEPROM需要注意如下问题:在电源滤波时间常数比较大的电路中,上电/下电时VCC上升/下降速度会比较慢。此时CPU可能工作于低于晶振所要求的电源电压。请参见P20“防止EEPROM数据丢失”以避免出现EEPROM数据丢失的问题。为了防止无意识的EEPROM写操作,需要执行一个特定的写时序。具体参看EEPROM控制寄存器的内容。执行EEPROM读操作时,CPU会停止工作4个周期,然后再执行后续指令;执行EEPROM写操作时,CPU会停止工作2个周期,然后再执行后续指令。EEPROM地址寄存器-EEARH和EEARL•Bits15..9–Res:保留保留位,读操作返回值为零。•Bits8..0–EEAR8..0:EEPROM地址EEPROM地址寄存器–EEARH和EEARL指定了512字节的EEPROM空间。EEPROM地址是线性的,从0到511。EEAR的初始值没有定义。在访问EEPROM之前必须为其赋予正确的数据。EEPROM数据寄存器-EEDR•Bits7..0–EEDR7.0:EEPROM数据对于EEPROM写操作,EEDR是需要写到EEAR单元的数据;对于读操作,EEDR是从地址EEAR读取的数据。EEPROM控制寄存器-EECR•Bits7..4–Res:保留保留位,读操作返回值为零。•Bit3–EERIE:使能EEPROM准备好中断若SREG的I为"1",则置位EERIE将使能EEPROM准备好中断。清零EERIE则禁止此中断。当EEWE清零时EEPROM准备好中断即可发生。•Bit2–EEMWE:EEPROM主机写使能EEMWE决定了EEWE置位是否可以启动EEPROM写操作。当EEMWE为"1"时,在4个时钟周期内置位EEWE将把数据写入EEPROM的指定地址;若EEMWE为"0“,则操作EEWE不起作用。EEMWE置位后4个周期,硬件对其清零。见EEPROM写过程中对EEWE位的描述。•Bit1–EEWE:EEPROM写使能EEWE为EEPROM写操作的使能信号。当EEPROM数据和地址设置好之后,需置位EEWE以便将数据写入EEPROM。此时EEMWE必须置位,否则EEPROM写操作将不会发生。写时序如下(第3步和第4步的次序并不重要):1.等待EEWE位变为零2.等待SPMCSR中的SPMEN位变为零3.将新的EEPROM地址写入EEAR(可选)4.将新的EEPROM数据写入EEDR(可选)5.对EECR寄存器的EEMWE写"1",同时清零EEWE6.在置位EEMWE的4个周期内,置位EEWE在CPU写Flash存储器的时候不能对EEPROM进行编程。在启动EEPROM写操作之前软件必须检查Flash写操作是否已经完成。步骤(2)仅在软件包含引导程序并允许CPU对Flash进行编程时才有用。...