Lex_ napisał(a):
Zamieść kod wszystkich swoich plików po kolei bo jest nie ścisłość - numery wierszy gdzie występuje błąd się nie zgadzają.
Zaznaczyłem ci teraz na zdjęciach gdzie występuje błąd.Dodałem volatile do tej zmiennej ale nie pomogło
Pierwsze zdjęcie to main.cNastępny plik to multipleks.c. Pierwsza cześć Teraz będzie druga część tego samego pliku Plik nagłówkowy multipleks.hPlik main.c:#include <avr/io.h>
#include "MULTIPLEKS/multipleks.h"
int main(void)
{
multipleks_init();
}
multipleks.c#include "multipleks.h"
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
const uint8_t cyfry[] PROGMEM =
{
~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F),//0
~(SEG_A|SEG_B|SEG_C),//1
~(SEG_A|SEG_B|SEG_D|SEG_E|SEG_G),//2
~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_G),//3
~(SEG_A|SEG_C|SEG_F |SEG_G),//4
~(SEG_A|SEG_C|SEG_D|SEG_F|SEG_G),//5
~(SEG_A|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G),//6
~(SEG_A|SEG_C|SEG_B|SEG_F),//7
~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G),//8
~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_F|SEG_G),//9
0xff//10
};
volatile uint8_t cyfra[4];
void multipleks_init(void)
{
SEGEMENTY_KIERUNEK = 0xff;
SEGMENTY_PORT =0xff;
ANODY_KIERUNEK |= ANODA_1 | ANODA_2 | ANODA_3 | ANODA_4;
ANODY_PORT |= ANODA_1 | ANODA_2 | ANODA_3 | ANODA_4;
TCCR0 |=(1<<WGM01);
TCCR0 |=(1<<CS02)|(1<<CS00);
OCR0 |=38;
TIMSK |=(1<<OCIE0);
}
ISR(TIMER0_COMP_vect)
{
static uint8_t licznik;
ANODY_PORT =(ANODY_PORT | MASKA_ANODY);
SEGMENTY_PORT =pgm_read_byte(&cyfry[cyfra[licznik]]);
ANODY_PORT =(ANODY_PORT & ~MASKA_ANODY) | (~(1<<licznik) & MASKA_ANODY);
licznik++;
if(licznik>3) licznik=0;
}
multipleks.h#ifndef MULTIPLEKS_MULTIPLEKS_H_
#define MULTIPLEKS_MULTIPLEKS_H_
#define SEGMENTY_PORT PORTC
#define SEGEMENTY_KIERUNEK DDRC
#define ANODY_PORT PORTB
#define ANODY_KIERUNEK DDRB
#define ANODA_1 (1<<PB0)
#define ANODA_2 (1<<PB1)
#define ANODA_3 (1<<PB2)
#define ANODA_4 (1<<PB3)
extern volatile uint8_t cyfra[4];
#define SEG_A (1<<0)
#define SEG_B (1<<1)
#define SEG_C (1<<2)
#define SEG_D (1<<3)
#define SEG_E (1<<4)
#define SEG_F (1<<5)
#define SEG_G (1<<6)
#define SEG_DP (1<<7)
#define MASKA_ANODY (ANODA_1 | ANODA_2 | ANODA_3 | ANODA_4)
void multipleks_init(void);
#endif /* MULTIPLEKS_MULTIPLEKS_H_ */