Ние работим сенергонезависима памет на микроконтролера EEPROM

или попълнете нашата SMS касичка

-->--> --> --> -->
--> -->-->
-->
-->Начало » -->Статии » Да се ​​научим да работим с AVR

Веднъж във форума, нашият потребителsp-fly,зададе въпрос относно използването на вътрешната EEPROM памет.

EEPROM - (Eng. Electrically Erasable Programmable Read-Only Memory, електрически изтриваем препрограмируем ROM, EEPROM). Този тип памет може да бъде изтрита и запълнена с данни няколко десетки хиляди пъти. Използва се в твърди дискове. Една от разновидностите на EEPROM е флаш памет (англ. Flash Memory).

В AVR микроконтролери, в различни различни размери на EEPROM. Например в:

Atmel гарантира 100 000 цикъла на запис на EEPROM и 10 000 цикъла на запис на флаш памет (паметта, която съхранява фърмуера).

Принципът на работа на нашето устройство е следният: ще съхраняваме 2 променливи в EEPROM, първата RUN ще отговаря за броя на стартиранията на устройството, втората CNT за показанията на брояча. Програмата ще работи само за 20 стартирания, след това няма да стартира, но ще даде специално съобщение, мисля, че ще бъде полезно за създаване на собствен демо фърмуер :)

В програмата работата с променлива, съхранена в EEPROM, се извършва по същия начин като робот с проста променлива.

Нека сглобим веригата на нашето устройство.

работим

А ето и самия програмен код:

// Функции на буквено-цифров LCD модул #asm .equ __lcd_port=0x18 ;PORTB #endasm #include #include

eeprom int run=1; // създаване на променливаизпълнява се в EEPROM паметта на MC //съхранява броя стартирания на устройството eeprom int cnt=0; // създаване на променлива за изпълнение в EEPROM паметта на MK // съхраняване на номера на брояча

void main(void) bit prg=0; // променлива за работа с менюто.

// Инициализация на порт C // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00; DDRC=0xFF;

// Инициализация на LCD модул lcd_init(16); lcd_gotoxy(0,0); lcd_putsf("Counter V1.0"); delay_ms(2000); lcd_clear();

if (run>20) // if runs > 20

бягане=бягане+1; // добавете единица към променливата, съхранена в EEPROM, за да преброите броя на стартиранията на устройството while (1) lcd_clear(); // изчистване на LSD lcd_gotoxy(0,0); // настройка на курсора на 0,0 if (PINC.1==1) // Избор на режим на индикация на брояча (данни за натискане на бутон и брой стартирания на устройството / информация за сайта) prg++; // тъй като имаме само 2 действия, използваме битова променлива delay_ms(250); // забавяне >

if (prg==0) // Данни от брояча lcd_putsf("Cnt="); lcd_putchar(cnt/10+0x30); lcd_putchar(cnt%10+0x30); lcd_putsf(" "); lcd_putsf("DevRun="); lcd_putchar(run/10+0x3 0); lcd_putchar(изпълни%10+0x30); >

if (prg==1) // информация lcd_putsf("www.my-avr.at.ua");

if (PINC.0==1) // бутон за нулиране нулира броя натискания на бутони, но не и брояча на активиране cnt=0; delay_ms(250); >

if (PINC.2==1) // бутон за брояч cnt=cnt+1; // добавяне към състояние на брояча delay_ms(200); // закъснение при отказ >

if (cnt>99) // if брояч променлива > 99, след което нулирайте брояча. cnt=0;

Всички файлове за статията в секцията "Файлове".