Witam wszystkich.
Podczas debugowania (czyli podczas normalnej pracy pewnie też) w programie AVR Studio, program wykonuje się w dziwny sposób. W funkcji, po wejściu do pętli for przechodzi do wykonania instrukcji , pomijając , a następnie skacze do funkcji pomijając wcześniejsze instrukcje (pomiędzy oraz .
Dlaczego te funkcje się nie wykonują?
Poniżej przedstawiam mój kod.
Podczas debugowania (czyli podczas normalnej pracy pewnie też) w programie AVR Studio, program wykonuje się w dziwny sposób. W funkcji
wyswietlBit()tmp3= tmp2 & wartmp2=1<<jprzerwaniePoBicie()tmp3= tmp2 & warprzerwaniePoBicie()Dlaczego te funkcje się nie wykonują?
Poniżej przedstawiam mój kod.
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>
#define PORTKa PORTB
#define PINKa PINB
#define DDRKa DDRB
int straznik = 1; //straznik, informuje czy wystapilo przerwanie, czy nie
uint8_t tab[]= {11,2,3,4,5,6,0};
uint8_t war; //watrosc z tablicy tab
int i = 0; //licznik zewnetrzny (inteks tablicy tab)
uint8_t tmp;
uint8_t tmp2;
uint8_t tmp3;
SIGNAL(SIG_OVERFLOW0){
straznik = 0;
cli();
}
void przerwaniePoBicie(){
TCNT0=(256-19); //ustawienie wartosci poczatkowej licznika (do przepelnienia licznika zostaje ~5ms)
TCCR0B=0x05; //zapisanie 'ustawien' do ukladu czasowego i aktywacja
sei();
while(straznik == 1){};
}
void przerwaniePoBajcie(){
TCNT0=(256-195); //ustawienie wartosci poczatkowej licznika (do przepelnienia licznika zostaje ~50ms)
TCCR0B=0x05; //zapisanie 'ustawien' do ukladu czasowego i aktywacja
sei();
}
void wyswietlBit(){
war=tab[i];
while(war!=0)
{
tmp=0;
PORTKa=0xFF;
for(int j=0; j<8; ++j)
{
tmp2=1<<j; //dodawanie kolejnych bitow do wartosci tmp
tmp3= tmp2 & war;
tmp2= tmp + tmp3;
tmp= tmp2;
PORTKa= ~tmp; //wysylanie na port B calego bajtu
przerwaniePoBicie();
}
++i;
war=tab[i];
przerwaniePoBajcie();
}
}
int main (void){
TIMSK0=0x01; //pozwoli to na obsluge przerwan
PORTKa=0xFF;
DDRKa = 0xFF;
wyswietlBit();
return 0;
}
