Страница 1 из 1

Работа с внутренней памятью EEPROM

Добавлено: 02 апр 2020, 21:49
uuu000
Привет всем.
Пытаюсь изучить и применить EEPROM.
С помощью настройки регистров и функций записи и чтения получилось нормально.
Но с помощью библиотеки не выходит,не записывается.
Посмотрите на код,где ошибка?
Спасибо.

Код: Выделить всё

#define F_CPU 8000000
#include <avr/io.h>
#include <avr/eeprom.h>
#include <util/delay.h>

unsigned char eeprom_var EEMEM; 

int main(void)
{
	DDRB=0b00000111;
	PORTB=0b11111000;
	DDRA=0b010;
	PORTA=0b111;
    unsigned char z=0;
	z = eeprom_read_byte(&eeprom_var);

	while (1)
	{
		if (~PINA&(1<<PA0))
		{
			if (z<7)
			{
				z++;
				PORTB =z;
   eeprom_write_byte(&eeprom_var, z);
     _delay_ms(200);
		
			}
			else
			{
				z=0;
				PORTB = z;
   eeprom_write_byte(&eeprom_var, z);	
   _delay_ms(200);		
			}
			while (~PINA&(1<<PA0)){};
	_delay_ms(20);
		}
	}
}

Re: Работа с внутренней памятью EEPROM

Добавлено: 03 апр 2020, 09:45
microsystems
На тини2313 работает:

Код: Выделить всё

#define F_CPU 8000000
#include <avr/io.h>
#include <avr/eeprom.h>
#include <util/delay.h>


unsigned char EEMEM eeprom_var;

int main(void)
{
	DDRB=0b00000111;
	PORTB=0b11111000;
	DDRA=0b010;
	PORTA=0b111;
	unsigned char z=0;
	z = eeprom_read_byte(&eeprom_var);
	PORTB =z;

	while (1)
	{
		if (~PINA&(1<<PA0))
		{
			if (z<7)
			{
				z++;
				PORTB =z;
				eeprom_write_byte(&eeprom_var, z);
				_delay_ms(200);

			}
			else
			{
				z=0;
				PORTB = z;
				eeprom_write_byte(&eeprom_var, z);
				_delay_ms(200);
			}
			while (~PINA&(1<<PA0)){};
			_delay_ms(20);
		}
	}
}

Re: Работа с внутренней памятью EEPROM

Добавлено: 03 апр 2020, 12:19
uuu000
Спасибо microsystems за поддержку.
Проблему нашел и устранил.