Cały program wygląda tak:
Zadaniem programu jest wyświetlanie na trzech wyświetlaczach segmentowych liczb przychodzących na portA za pomocą (na portA wchodzą sygnały clock, strobe i date). Problem w tym, że na symulatorze i w realu program nie wykonuje funkcji z++, z=z*2 i tym podobnych. Program napewno wchodzi w if-y co sprawdzałem na symulatorze (wykonywał __asm("nop")
. Ogólnie chodzi o to dlaczego nie wykonuje obliczeń. Z góry dzięki za pomoc.
Proszę używać znaczników [code]
[zumek]
#include <avr/io.h> // dostęp do rejestrów
#include <avr/interrupt.h> // funkcje sei(), cli()
#include <avr/signal.h> // definicje SIGNAL, INTERRUPT
#define tau 0x06
#define vlicz 15
volatile unsigned int licz;
unsigned int t, a, b, c, x, y, z, w;
SIGNAL (SIG_OVERFLOW0) // przerwanie co ....hmmm? sie juz nie dolicze :D
{
TCNT0 = tau; // przeładuj timer 0
licz--; // dekrementuj
}
//******************* program głowny ************************
int main(void)
{
DDRB = 0xFF; // wszystkie linie PORTB jako wyjścia
PORTB = 0x00; // wygaś diody segmentow
DDRD = 0xFF; //wyjscia
PORTD = 0x00;
DDRA = 0x00; //wejscia
PORTA = 0xFF;
//TIMER0
TIMSK = _BV(TOIE0); // włącz obsługę przerwań T/C0
TCNT0 = tau; // wartość początkowa T/C0
TCCR0 = 0xc2;//_BV(CS01)|_BV(CS00); // preskaler 64
t = 0;
sei(); // włącz obsługę przerwań
a=97;
b=245;
c=245;
w=1;
x=0;
y=0;
z=1;
while(1)
{
if (licz==0)
{
licz=vlicz;
t++;
if (t>2) t=0;
if (t == 0)
{
PORTD = 0xFE; // uruchom wyswietlacz 1
PORTB = a;
}
if (t == 1)
{
PORTD = 0xFD; // uruchom wyswietlacz 2
PORTB = b;
}
if (t == 2)
{
PORTD = 0xFB; // uruchom wyswietlacz 3
PORTB = c;
}
}
if (bit_is_clear(PINA, PA5))
{
if (w == 1)
{
w = 0;
x = x*2;
if (y > 127)
{
x++;
}
y = y*2;
if (z > 127)
{
y++;
}
z = z*2;
}
}
if (bit_is_set(PINA,PA5))
{
if (w == 0)
{
w = 1;
if(bit_is_clear(PINA,PA6))
{
if(bit_is_set(PINA,PA7))
{
__asm("nop");
z++;
}
}
if(bit_is_set(PINA,PA6))
{
a = x;
b = y;
c = z;
}
}
}
}
}
Zadaniem programu jest wyświetlanie na trzech wyświetlaczach segmentowych liczb przychodzących na portA za pomocą (na portA wchodzą sygnały clock, strobe i date). Problem w tym, że na symulatorze i w realu program nie wykonuje funkcji z++, z=z*2 i tym podobnych. Program napewno wchodzi w if-y co sprawdzałem na symulatorze (wykonywał __asm("nop")
Proszę używać znaczników [code]
[zumek]
