AVR内部EEPROM读写实验
午夜粪车 发表于 - 2012-3-14 14:59:00
片内EEPROM读写实险。 1、用内部EEPROM记录CPU启动次数,并在PB口上显示出来。 2、内部1 M晶振,程序采用单任务方式,软件延时。 3、进行此实验请插上JP1的所有8个短路块,JP7(LED_EN)短路块。 4、通过此实验,可以对对内部EEPROM有个初步认识,了解EEPROM函数的操作。 5、可过复位键让系统重启,这样就可以更新显示了。 */ #i nclude "iom16v.h" /*延时函数*/ void delay_ms(unsigned char i) { unsigned char a, b; for (a = 1; a < i; a++) { for (b = 1; b; b++) { ; } } } /*EEPROM读取函数*/ /*addr:地址;number:长度;p_buff:读出数据存放指针*/ void eprom_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; } } /*EEPROM写入函数*/ /*addr:地址;number:长度;p_buff:写入数据存放指针*/ void eprom_write(unsigned int addr, unsigned char number, unsigned char *p_buff) { EEARH = 0x00; while(number --) { while(EECR & (1 << EEWE)); EEARL = addr ++; EEDR = *p_buff ++; 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; delay_ms(250); /*启动延时*/ eprom_read(0x10, 0x01, &temp); /*读出记录*/ PORTB = ~temp; /*显示记录*/ temp ++; /*刷新记录*/ eprom_write(0x10, 0x01, &temp); /*写入记录*/ while (1) { ; } } |
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。