AVR内部EEPROM读写实验

AVR内部EEPROM读写实验,第1张

片内EEPROM读写实险。
 1、用内部EEPROM记录CPU启动次数,并在PB口上显示出来。
 2、内部1 M晶振,程序采用单任务方式,软件延时。
 3、进行此实验请插上JP1的所有8个短路块,JP7(LED_EN)短路块。
 4、通过此实验,可以对对内部EEPROM有个初步认识,了解EEPROM函数的 *** 作。
 5、可过复位键让系统重启,这样就可以更新显示了。

*/
#include "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) {
  ;
  }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/2450874.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-04
下一篇 2022-08-04

发表评论

登录后才能评论

评论列表(0条)

保存