ATmega8的eeprom读写操作程序

2019-10-12来源: eefocus关键字:ATmega8  eeprom  读写操作

ATmega8的eeprom读写操作,实测没问题


单片机源程序如下:

//ICC-AVR application builder

// Target : M8

// Crystal: 8.0000Mhz


#include

#include

#include <74164.h>

#include


unsigned char    display[4];  // 显示缓冲区

unsigned char    dis;         // 当前显示

unsigned char    s,m;          // 时间


//TIMER0 initialisation - prescale:256

// WGM: Normal

// desired value: 5mSec

// actual value:  4.992mSec (0.2%)

void timer0_init(void)

{

TCCR0 = 0x00; //stop

TCNT0 = 0x64; //set count

TCCR0 = 0x04; //start timer

}


#pragma interrupt_handler timer0_ovf_isr:10

void timer0_ovf_isr(void)

{

TCNT0 = 0x64; //reload counter value

//  display

    switch(dis){  //  显示

        case  0:  write164(display[dis] | 0x70);  break;

        case  1:  write164(display[dis] | 0xB0);  break;

        case  2:  write164(display[dis] | 0xD0);  break;

        case  3:  write164(display[dis] | 0xE0);  break;

    }

    if(++dis > 3) dis = 0;

//end  display

}


//TIMER1 initialisation - prescale:1024

// WGM: 0) Normal, TOP=0xFFFF

// desired value: 1Hz

// actual value:  1.000Hz (0.0%)

void timer1_init(void)

{

TCCR1B = 0x00; //stop

TCNT1H = 0xE1; //setup

TCNT1L = 0x7C;

OCR1AH = 0x1E;

OCR1AL = 0x84;

OCR1BH = 0x1E;

OCR1BL = 0x84;

ICR1H  = 0x1E;

ICR1L  = 0x84;

TCCR1A = 0x00;

TCCR1B = 0x05; //start Timer

}


#pragma interrupt_handler timer1_ovf_isr:9

void timer1_ovf_isr(void)

{

//TIMER1 has overflowed

TCNT1H = 0xE1; //reload counter high value

TCNT1L = 0x7C; //reload counter low value

if(++s == 60){

   s = 0;

   if(++m == 60) m = 0;

}

EEPROMwrite(1,s);       //  保存时间

EEPROMwrite(2,m);

display[0] = s % 10;    //  刷新显示缓冲

display[1] = s / 10;

display[2] = m % 10;

display[3] = m / 10;

}


//call this routine to initialise all peripherals

void init_devices(void)

{

//stop errant interrupts until set up

CLI(); //disable all interrupts

DDRB = 0x01;    //  初始化操作74LS164的管脚

DDRD = 0xC0;    //  初始化操作74LS164的管脚

timer0_init();

timer1_init();


MCUCR = 0x00;

GICR  = 0x00;

TIMSK = 0x05; //timer interrupt sources

SEI(); //re-enable interrupts

//all peripherals are now initialised

}


//

void main(void)

{

init_devices();

s = EEPROMread(1);  //  读取时间

m = EEPROMread(2);

display[0] = s % 10;    //  刷新显示缓冲

display[1] = s / 10;

display[2] = m % 10;

display[3] = m / 10;

while(1);

}


关键字:ATmega8  eeprom  读写操作 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic476954.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:atmega128 AD 转换
下一篇:BASCOM-AVR版调光演示程序

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

ATmega16计算器代码(数码管显示)
;           10:清零 11:确认 12:加 13:减 14:乘 15:除        **********************************************************************///头文件#include <iom16v.h>   //包含型号头文件#include <macros.h>  //包含"位"操作头文件//宏定义#define uchar unsigned char#define
发表于 2019-10-17
ATMEGA16单片机Timer1的OC1A脚输出占空比可调的PWM信号
;   }        }           }}//比较中断子程序,可以用来产生正弦波/*#pragma vector = TIMER1_COMPA_vect    __interrupt void CompA_isr( void ) {        OcrReg =  st[j];    OCR = OcrReg;      j++;   
发表于 2019-10-17
ATMEGA16单片机Timer1的OC1A脚输出占空比可调的PWM信号
AVR单片机ATmega16之初识PWM模式
与上个模式的④相比,这个是先加数过程和OCR0比一次,后又从255减下来跟OCR0再比一次,这样一加一减算作一个完整的过程。 (随意吐槽一句,写书就是喜欢写的高大上一点,就是不喜欢说人话,emmmmm)(正向比较匹配输出时,TCNT0加1计数与OCR0比较,OC0输出0,从255减到OCR0,OC0输出1,正向比较匹配输出时,TCNT0加1计数与OCR0比较,OC0输出1,从255减到OCR0,OC0输出0)①TCNT0计数0x00时,溢出标志位TOV0置1,可以用来申请中断。可以在中断服务程序中修改OCR0的值②OC0的输出的PWM波形频率计算公式:PWM的频率=所选时钟源频率/510N    
发表于 2019-10-16
AVR单片机ATmega16之初识PWM模式
avr单片机atmega16自动浇花器Proteus仿真+源程序
,0x07,0x7f,0x6f};// 局部变量  static unsigned char  posit=0;    PORTC&=0X80; // turn off               PORTC|=smg_wx[posit];//selecting led 7-segment          PORTD=~smg_zx[buff[posit]];  //        
发表于 2019-10-16
avr单片机atmega16自动浇花器Proteus仿真+源程序
ATMEGA16A单片机的多点测温系统完成版 Proteus仿真程序
 0.png (38.96 KB, 下载次数: 18)下载附件  保存到相册2019-6-29 04:45 上传 单片机源程序如下:/***************************************************************************实验名   :DS18B20模块*实验效果 :单总线调试,此代码可用于测多点温度*显示     :此代码用了LCD显示读取地址位*平台     : Atmega16,基于8MHz*调试时间 :2019年6月7日 23:14
发表于 2019-10-16
ATMEGA16A单片机的多点测温系统完成版 Proteus仿真程序
ATMEGA16A单片机1602字符显示程序
* 【编译环境】: ICCAVR  * 【函数功能】: 1602字符显示        * 【晶    振】:  8M                * 【芯    片】:  ATMEGA16A         #include<iom16v.h>#define uchar unsigned char #define uint unsigne
发表于 2019-10-15
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved