BASIC4MCU | 질문게시판 | 전원 꺼질 때 EEPROM에 값을 저장하고 싶습니다.
페이지 정보
작성자 총체적난국 작성일2021-07-09 15:43 조회2,835회 댓글1건본문
전원이 꺼질 때 변수 c의 값을 EEPROM에 저장하고 전원을 다시 켤 때 저장된 값을 다시 불러오는 기능을 구현해야 하는데 참고할만한 코드가 없어서 여쭤봅니다.
하기 코드의 c값을 전원이 꺼질때에만 EEPROM에 저장했다 전원이 다시 켜질 때 이 값을 불러오고 싶은데 혹시 참고할만한 예제 코드가 있으실까요?
지금까지는 제가 직접 짜보고 글을 올렸는데 이 기능은 참고할만한 코드를 찾지 못해 다짜고짜 여쭤보는 점 양해 바랍니다..ㅠㅠ
p.s: 이 기능만 추가시키면 마무리되는데 이게 다 마스터님 덕분입니다. 아직 끝나지 않았지만 정말 감사드립니다..
#include <avr/io.h>
#include <avr/delay.h>
#include <avr/interrupt.h>
unsigned char fnd[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned int buff4_c,buff3_c,buff2_c,buff1_c;
unsigned int c=0;
ISR(INT0_vect)
{
c++;
_delay_ms(1);
fnd_on_0();
_delay_ms(5); // 밝기 조절용 딜레이
}
int main()
{
DDRC=0xff; // FND 출력
DDRD=0b11110000; // TN 출력(7~4), 카운터,리셋 입력(3,2)
DDRA= 0x00; // ADC 입력
GICR = 0b01000000;
MCUCR = 0x00;
SREG = 0x80;
while(1)
{
if(c>9999) // 9999되면 0으로 리셋
{
c=0;
}
display_c();
fnd_c();
_delay_ms(5); // 밝기 조절용 딜레이
reset();
}
}
void display_c()
{
buff4_c =c/1000;
buff3_c =c%1000/100;
buff2_c =c%100/10;
buff1_c =c%10;
}
void fnd_c()
{
if(c>=1000){
PORTD=0x10; PORTC=fnd[buff4_c]; _delay_us(250); PORTC=0xff;
PORTD=0x20; PORTC=fnd[buff3_c]; _delay_us(250); PORTC=0xff;
PORTD=0x40; PORTC=fnd[buff2_c]; _delay_us(250); PORTC=0xff;
PORTD=0x80; PORTC=fnd[buff1_c]; _delay_us(250); PORTC=0xff;
}
else if(c>=100){
PORTD=0x20; PORTC=fnd[buff3_c]; _delay_us(333); PORTC=0xff;
PORTD=0x40; PORTC=fnd[buff2_c]; _delay_us(333); PORTC=0xff;
PORTD=0x80; PORTC=fnd[buff1_c]; _delay_us(333); PORTC=0xff;
}
else if(c>=10){
PORTD=0x40; PORTC=fnd[buff2_c]; _delay_us(500); PORTC=0xff;
PORTD=0x80; PORTC=fnd[buff1_c]; _delay_us(500); PORTC=0xff;
}
else{
PORTD=0x80; PORTC=fnd[buff1_c]; _delay_ms(1); PORTC=0xff;
}
}
void reset()
{
if(!(PIND & 0b00001000))
{
int t=0;
while(t < 450) // 3초 리셋
{
fnd_on_0();
_delay_ms(5); // 밝기 조절용 딜레이
t++;
if(PIND & 0b00001000)
break;
}
if(t>=450)
{
c=0;
}
else
{
c=9999;
}
while(!(PIND & 0b00001000));
}
}
댓글 1
조회수 2,835master님의 댓글
master 작성일
1. 전원이 꺼지는 것을 미리 감지한다는 것이 쉽질 않습니다.
2. 감지하기 유리하려면 전압이 서서히 감소하도록 회로를 수정할 필요가 있습니다만 초보자는 어려운 일입니다.