AVR内部EEPROM读写实验

简单PLD

6人已加入

描述

片内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) {
  ;
  }
}
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分