Jag har inte testat om det bara är simuleringen det är fel på men det känns konstigt att simuleringen fungerar ena gången men inte andra utan orsak
Fungerande kod:
Kod: Markera allt
#include <avr/io.h>
unsigned char get_value();
unsigned char et_value();
void init()
{
DDRD=0xFF; //alla portar utgångar
PORTD=0x00; //sätter portarna till 0V
DDRB=0x00; //alla portar ingångar
PORTB=0xFF; //pullup aktiverat
}
int main()
{
init();
unsigned char tal;
while(1)
{
tal = get_value();
et_value(tal);
}
}
unsigned char get_value() //hämtar värde på portB
{
unsigned char a;
a = PINB;
return a;
}
unsigned char et_value(tal)
{
PORTD=tal;
return 0;
}
Kod: Markera allt
#include <avr/io.h>
unsigned char get_value();
unsigned char merge();
int main()
{
init(); //samma init som ovan har plockat bort koden för att göra det lite kortare
unsigned char tal;
while(1)
{
tal = get_value(); //<-- kommer aldrig från denna funktion
merge(tal);
}
}
unsigned char get_value()
{
unsigned char a;
a = PINB; //<-- fastnar här
return a;
}
unsigned char merge(tal)
{
unsigned char tal2, resultat;
if(tal<8)
tal2=3;
else if(tal==8)
tal2=2;
else if(tal>8)
tal2=1;
resultat=(tal2<<4)|tal; //shiftar resultatet och ellrar med orginalvärdet
return resultat;
}