历史上的今天
今天是:2024年10月12日(星期六)
2019年10月12日 | ATmega8的eeprom读写操作程序
2019-10-12 来源:eefocus
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); }
上一篇:atmega128 AD 转换
史海拾趣
|
好久前就一直在关注NXP LPC1114芯片,发现常见的一共有三种开发板LPCXpresso的开发板、ZLG开发的TinyM0、英蓓特开发的EM-LPC1100LK开发板。本想谈谈对它们的看法,不料已经有人写了,就先谢谢他了。 这周收到了LPCXpresso的开发板,板子比ZLG ...… 查看全部问答> |
|
最近老大要我学驱动,给了我2个文档,一个是ARM9的官方技术文档,一个是东芝的TMPA910CRAXBG芯片文档,全是英文的,汗。然后这几天的工作就是看这2个文档,但我感觉光看这些好像学不到多少,并且又是英文,效率也不高。。唉,怀念之前做应用的日子 ...… 查看全部问答> |
|
各位大侠好! 小弟最近在做EBOOT中的OEMPreDownload函数,由于硬件条件所限暂时先用串口3下载映象,串口1打映消息,现在我已经用 SSCOM测试过OEMPreDownload函数中的SerialSendBootRequest已经通过3口发送bootme数据包,但是就是在WaitFo ...… 查看全部问答> |
|
Proteus各版本可用下载地址: proteus7.9下载:http://www.qjwm.com/down_1895181.html 共享下载 备用下载 proteus7.8下载:http://www.qjwm.com/down_1894872.html 共享下载&nbs ...… 查看全部问答> |




