Misoxeny Skrevet 24. april 2013 Del Skrevet 24. april 2013 Heisann. Har noen oppgaver i C hvor man skal få lamper til å lyse blant annet utifra hvilke brytere som er inne. Jobber med en ATMega128, 8bit. "Deklarer og initialiser variablene ”teller” og ”tellerkopi” til null og gå deretter i evig løkke. I løkka skal du øke verdien av ”teller” med 1, manipulere ”teller”, vise resul¬tatet på lampene." Oppgave 1: Les teller og vis bitene på lamper, bortsett fra L0 som alltid skal være slukket. NB! Du skal ikke manipulere selve variablen teller, bare det som vises på lampene(tellerkopi). Koden ser slik ut: #include <avr/io.h>x #include <util/delay.h> int main(void) { DDRA = 0x00; DDRB = 0xff; char teller = 0; char tellerkopi = 0; while(1) { teller ++; tellerkopi = teller; tellerkopi=tellerkopi|0x01; PORTB = tellerkopi; } } Jeg har tegnet opp et eksempel på hvordan dette da vil se ut: Såvidt jeg kan se blir dette riktig. Alle verdiene er like som utgangspunktet, bortsett fra L0 som er 1 (slukket). Så er det neste oppgave, som gjør at jeg blir ganske mindfucked. Les teller og kopier bit 1-4 ut på LEDs L3-L6. Alle andre LEDs skal være slukket uansett verdien på de øvrige bitene. Her ser koden ser slik ut: #include <avr/io.h> #include <util/delay.h> int main(void) { DDRA = 0x00; DDRB = 0xff; char teller = 0; char tellerkopi = 0; while(1) { teller ++; tellerkopi = teller; tellerkopi<<2; tellerkopi=~tellerkopi; tellerkopi=tellerkopi|0x87; PORTB = tellerkopi; } } Her forstår jeg ikke hvorfor man i det hele tatt skal invertere. Hvis jeg tar samme eks som i sted: Da har jeg endt opp slik at L3-L6 viser det motsatte av det bit 1-4 gjorde i utgangspunktet. Hvorfor er dette riktig? Oppgaven ber jo om at bit 1-4 skal vise samme verdi, men på L3-L6 i stedet. Dette er jo ikke tilfelle? Hvorfor kunne jeg ikke bare ha gjort det slik: - Flytter alt to mot venstre - Manipulerer med 10000111 Og voila. Da vil jeg jo være i mål? L3-L6 viser det som opprinnelig var på bit 1-4, mens resten er slukket. Ser bare ikke hvorfor man skal invertere osv, og ende opp med verdier som er motsatt av utgangspunktet. Hvis noen skjønner hva jeg prøver å si her og kan forklare meg hvorfor det er slik, blir jeg veldig takknemlig. Lenke til kommentar
jonny Skrevet 24. april 2013 Del Skrevet 24. april 2013 Hvis "1" er slukket, bør du ikke invertere i første oppgave også? Slik at resultatet blir 10100011 for eksempelet ditt? Lenke til kommentar
JaBBe Skrevet 24. april 2013 Del Skrevet 24. april 2013 Svaret er enkelt at utgangen er invertert. Med din skisserte løsning på slutten viser L3-L6 motsatt av innholdet til bit 1-4. Lenke til kommentar
Misoxeny Skrevet 25. april 2013 Forfatter Del Skrevet 25. april 2013 Så det man sender ut til output skal alltid være det inverterte av input? Isåfall, hvorfor blir ikke dette gjort i opgave 1? Lenke til kommentar
JaBBe Skrevet 25. april 2013 Del Skrevet 25. april 2013 Nei, det er avhengig av hva som er på output. Feks så har leds på stk500 interverte leds. Oppgave 1 er også feil, i ditt eksempel vil L7, L5 og L1 lyse, når meningen med oppgaven var å få L2, L3, L4 og L6 til å lyse når tellerkopi har verdien 0x5C (ditt eksempel). Lenke til kommentar
Misoxeny Skrevet 25. april 2013 Forfatter Del Skrevet 25. april 2013 Meningen med oppgaven er vel at L0 alltid skal være slukket, mens L1-L6 skal være uendret? Ser ikke hvordan det er feil. Er oppgave 2 riktig da? Lenke til kommentar
JaBBe Skrevet 25. april 2013 Del Skrevet 25. april 2013 Ja l0 skal være slukket, men du skal vise verdien til teller, ikke la de være uendret. dvs du må invertere teller før du OR 0x01 og skriver ut på porten. oppg2 er riktig 1 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå