单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 225|回复: 0
收起左侧

ATmega8的eeprom读写操作程序

[复制链接]
筑梦守心 发表于 2019-9-18 11:26 | 显示全部楼层 |阅读模式
ATmega8的eeprom读写操作,实测没问题

单片机源程序如下:
  1. //ICC-AVR application builder
  2. // Target : M8
  3. // Crystal: 8.0000Mhz

  4. #include <iom8v.h>
  5. #include <macros.h>
  6. #include <74164.h>
  7. #include <eeprom.h>

  8. unsigned char    display[4];  // 显示缓冲区
  9. unsigned char    dis;         // 当前显示
  10. unsigned char    s,m;          // 时间

  11. //TIMER0 initialisation - prescale:256
  12. // WGM: Normal
  13. // desired value: 5mSec
  14. // actual value:  4.992mSec (0.2%)
  15. void timer0_init(void)
  16. {
  17. TCCR0 = 0x00; //stop
  18. TCNT0 = 0x64; //set count
  19. TCCR0 = 0x04; //start timer
  20. }

  21. #pragma interrupt_handler timer0_ovf_isr:10
  22. void timer0_ovf_isr(void)
  23. {
  24. TCNT0 = 0x64; //reload counter value
  25. //  display
  26.     switch(dis){  //  显示
  27.         case  0:  write164(display[dis] | 0x70);  break;
  28.         case  1:  write164(display[dis] | 0xB0);  break;
  29.         case  2:  write164(display[dis] | 0xD0);  break;
  30.         case  3:  write164(display[dis] | 0xE0);  break;
  31.     }
  32.     if(++dis > 3) dis = 0;
  33. //end  display
  34. }

  35. //TIMER1 initialisation - prescale:1024
  36. // WGM: 0) Normal, TOP=0xFFFF
  37. // desired value: 1Hz
  38. // actual value:  1.000Hz (0.0%)
  39. void timer1_init(void)
  40. {
  41. TCCR1B = 0x00; //stop
  42. TCNT1H = 0xE1; //setup
  43. TCNT1L = 0x7C;
  44. OCR1AH = 0x1E;
  45. OCR1AL = 0x84;
  46. OCR1BH = 0x1E;
  47. OCR1BL = 0x84;
  48. ICR1H  = 0x1E;
  49. ICR1L  = 0x84;
  50. TCCR1A = 0x00;
  51. TCCR1B = 0x05; //start Timer
  52. }

  53. #pragma interrupt_handler timer1_ovf_isr:9
  54. void timer1_ovf_isr(void)
  55. {
  56. //TIMER1 has overflowed
  57. TCNT1H = 0xE1; //reload counter high value
  58. TCNT1L = 0x7C; //reload counter low value
  59. if(++s == 60){
  60.    s = 0;
  61.    if(++m == 60) m = 0;
  62. }
  63. EEPROMwrite(1,s);       //  保存时间
  64. EEPROMwrite(2,m);
  65. display[0] = s % 10;    //  刷新显示缓冲
  66. display[1] = s / 10;
  67. display[2] = m % 10;
  68. display[3] = m / 10;
  69. }

  70. //call this routine to initialise all peripherals
  71. void init_devices(void)
  72. {
  73. //stop errant interrupts until set up
  74. CLI(); //disable all interrupts
  75. DDRB = 0x01;    //  初始化操作74LS164的管脚
  76. DDRD = 0xC0;    //  初始化操作74LS164的管脚
  77. timer0_init();
  78. timer1_init();

  79. MCUCR = 0x00;
  80. GICR  = 0x00;
  81. TIMSK = 0x05; //timer interrupt sources
  82. SEI(); //re-enable interrupts
  83. //all peripherals are now initialised
  84. }

  85. //
  86. void main(void)
  87. {
  88. init_devices();
  89. s = EEPROMread(1);  //  读取时间
  90. m = EEPROMread(2);
  91. display[0] = s % 10;    //  刷新显示缓冲
  92. display[1] = s / 10;
  93. display[2] = m % 10;
  94. display[3] = m / 10;
  95. while(1);
  96. }
复制代码

所有资料51hei提供下载:
ATmega8的eeprom读写操作.rar (18.37 KB, 下载次数: 4)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|单片机论坛 |51黑电子论坛技术交流 QQ 管理员QQ:125739409;技术交流QQ群636986012

Powered by 单片机教程网

快速回复 返回顶部 返回列表