DSP

EEPROM 数据存储器 读写

2019-07-13 20:00发布

/******************************************************************************* 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); }