/*******************************************************************************
1、用内部EEPROM记录CPU启动次数,并在PB口上显示出来
(8位LED来显示十六进制)
2、进行此实验请插上JP1的所有8个短路块,JP7(LED_EN)短路块。
3、通过此实验,可以对对内部EEPROM有个初步认识,了解EEPROM读写函数的操作。
4、可通过复位键让系统重启,这样就可以更新显示MCU启动的次数了。
*******************************************************************************/
#include
#include
/*-----------------------------------------------------------------
函数名称: void AdcInit(void)
函数功能: EEPROM读取函数
说 明:addr:地址;number:长度;p_buff:读出数据存放指针
-----------------------------------------------------------------*/
void eeprom_read(unsigned int addr, unsigned char number, unsigned char *p_buff)
{
while(EECR & (1 << EEWE));
EEARH = 0x00;
while(number --)
{
EEARL = addr ++;
EECR |= (1 << EERE);
*p_buff++ = EEDR;
}
}
/*-----------------------------------------------------------------
函数名称: void AdcInit(void)
函数功能: EEPROM写入函数
说 明:addr:地址;number:长度;p_buff:写入数据存放指针
-----------------------------------------------------------------*/
void eeprom_write(unsigned int addr, unsigned char number, unsigned char *p_buff)
{
EEARH = 0x00;
while(number --)
{
while(EECR & (1 << EEWE)); //EECR为EEPROM控制寄存器,EEWE写使能
EEARL = addr ++; //EEAR为EEPROM地址寄存器
EEDR = *p_buff ++; //EEDR为EEPROM数据寄存器
EECR |= (1 << EEMWE);
EECR |= (1 << EEWE);
}
}
/*主函数*/
void main(void)
{
unsigned char temp;
DDRA = 0x00; /*方向输入*/
PORTA = 0xFF; /*打开上拉*/
DDRB = 0xFF; /*方向输出*/
PORTB = 0xFF; /*电平设置*/
DDRC = 0x00;
PORTC = 0xFF;
DDRD = 0x00;
PORTD = 0xFF;
DelayMs(250); /*启动延时*/
eeprom_read(0x10, 0x01, &temp); /*读出记录*/
PORTB = ~temp; /*显示记录*/
temp ++; /*刷新记录*/
eeprom_write(0x10, 0x01, &temp); /*写入记录*/
while (1);
}