V programu pak:
Kód: Vybrat vše
uint8_t EEMEM byte_v_eeprom;
...
uint8_t byte_v_programu = eeprom_read_byte(&byte_v_eeprom);
Moderátor: Moderátoři
Kód: Vybrat vše
uint8_t EEMEM byte_v_eeprom;
...
uint8_t byte_v_programu = eeprom_read_byte(&byte_v_eeprom);
Kód: Vybrat vše
/*
* tripling attiny13.cpp
*
* Created: 18.1.2020 16:32:53
* Author : Diagnostika Salač
*/
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>
#include <util/delay.h>
#define BULHAR_CONST 8
volatile unsigned int set_cas_docas;
volatile unsigned int blinkr_levy, blinkr_pravy;
volatile char blinkr_levy_spusten, blinkr_pravy_spusten;
uint8_t set_cas_eeprom, set_cas;
ISR(TIM0_OVF_vect) // obsluha preruseni
{
if (!(PINB & ((1<<PB2) | (1<<PB4))))
{
set_cas_docas++;
}
else
{
if (set_cas_docas > BULHAR_CONST)
{
set_cas = set_cas_docas;
eeprom_update_byte ((uint8_t *)(0), (uint8_t)(set_cas)) ;
}
set_cas_docas = 0;
}
if (!(PINB & (1<<PB3)))
{
if (!blinkr_pravy_spusten)
{
if (blinkr_pravy++ > BULHAR_CONST)
{
blinkr_pravy = set_cas_eeprom;
blinkr_pravy_spusten = 1;
PORTB |= (1<<PB1);
blinkr_levy_spusten = 0;
}
}
} else if (!blinkr_pravy)
{
blinkr_pravy_spusten = 0;
}
if (blinkr_pravy > 0 && blinkr_pravy_spusten)
{
blinkr_pravy--;
}
else
{
PORTB &= ~(1<<PB1);
}
if (!(PINB & (1<<PB4)))
{
if (!blinkr_levy_spusten)
{
if (blinkr_levy++ > BULHAR_CONST)
{
blinkr_levy = set_cas_eeprom;
blinkr_levy_spusten = 1;
PORTB |= (1<<PB0);
blinkr_pravy_spusten = 0;
}
}
}
else if (!blinkr_levy)
{
blinkr_levy_spusten = 0;
}
if (blinkr_levy > 0 && blinkr_levy_spusten)
{
blinkr_levy--;
}
else
{
PORTB &= ~(1<<PB0);
}
}
int main(void)
{
set_cas_eeprom = eeprom_read_byte ((uint8_t)(0));
DDRB &= ~(1<<PB2); // vstup set času
DDRB &= ~(1<<PB3); // vstup pravý blinkr
DDRB &= ~(1<<PB4); // vstup levý blinkr
PORTB |= (1<<PB2) |(1<<PB3)|(1<<PB4); //zapnutí pull up rezistorů
DDRB |= (1<<PB0); // výstup levý blinkr
DDRB |= (1<<PB1); // výstup pravý blinkr
TCCR0B |= _BV(CS02); // nastaveni preddelicky na 1024 (CLK=fosc/1024/256 = [Hz], 1 / CLK = [s])
TIMSK0 |= _BV(TOIE0); // zapni preruseni: Timer Overflow interrupt
set_cas_docas = 0; // nastaveni globalnich promenych
set_cas = 0;
blinkr_levy = 0;
blinkr_pravy = 0;
sei(); // globalni povoleni preruseni
while (1);
}