AVR studio 4 mega88 problem
Postat: 23 september 2009, 11:28:06
Jag har ett lite lustigt problem som jag inte vet hur jag skall lösa... Jag har ett program där jag läser in från PINB och ena gången fungerar det bra och i nästa program med samma kod bara utökat fungerar det inte...
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:
Icke fungerande kod:
Jag har provat att skapa nytt program och växlat mellan simulator 1 och 2 men inget har fått den nedre koden att fungera... Någon som har någon ide?
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;
}