Permalänk
Medlem

Avkodare i Assembler

Hej!
Skulle behöva lite hjälp på traven att förstå mig på hur jag ska tänka ang programmering i assembler.
Har en uppgift som går ut på att man ska tillverka en avkodare för en IR-signal som kommer från ett tangentbord enligt följande bild;
https://imgur.com/lncqAxO

Jag har kommit så långt som att jag tror att jag vet följande; Om man skulle trycka på tangent 4 så skickas den binära talet 0100 till PINA. Dock så kommer det binära talet in baklänges, dvs 0010, men denna har även en startbit 1, vilket skulle leda till att det blir 10010. Tänker jag rätt?
För att indatan ska lagras någonstans behöver jag skriva följande kod;
in r16, PINA ;tar in hela porten och lägger i registret r16.

Sen blir jag väldigt förvirrad över hur jag ska få fram så bitarna hamnar på rätt plats så tal 4 kan skrivas ut på displayen. Jag har läst att man kan använda sig av maskning, skip-funktion och även rotation, men förstår inte riktigt hur jag ska få ihop det.
Hur ska jag tänk för att komma vidare?

Permalänk
Medlem

Det känns som att det är två olika frågor här som blandats ihop, är det assembler eller digital logik du undrar över?
Assembler beror på vad det är för assembler och vad chipet har för funktioner och om det är assembler eller bara något i stil med C mm, digital logik i hur du ska tänka;

Om den har en digital high som init så ja då är den före allt annat, sedan ska du vända på de efterkommande. Därefter avkoda och från det sätta high/low på rätt pins

Skickades från m.sweclockers.com

Visa signatur

"One is always considered mad, when one discovers something that others cannot grasp."
- Ed Wood

Permalänk
Medlem
Skrivet av Ferrat:

Det känns som att det är två olika frågor här som blandats ihop, är det assembler eller digital logik du undrar över?
Assembler beror på vad det är för assembler och vad chipet har för funktioner och om det är assembler eller bara något i stil med C mm, digital logik i hur du ska tänka;

Om den har en digital high som init så ja då är den före allt annat, sedan ska du vända på de efterkommande. Därefter avkoda och från det sätta high/low på rätt pins

Skickades från m.sweclockers.com

Det kanske blir lite av en mix av dom två, men främst hur jag ska koda i assembly för att få insignalen att visas på displayen. Koden ska vara på runt 50 rader.
Jag ska alltså kunna ta in en input, utföra det som behövs för att input ska visas på displayen.
Nu är jag totalt nybörjare på detta så jag har säkert lyckats att röra till det en hel del.

Permalänk
Medlem
Skrivet av thronell:

Det kanske blir lite av en mix av dom två, men främst hur jag ska koda i assembly för att få insignalen att visas på displayen. Koden ska vara på runt 50 rader.
Jag ska alltså kunna ta in en input, utföra det som behövs för att input ska visas på displayen.
Nu är jag totalt nybörjare på detta så jag har säkert lyckats att röra till det en hel del.

Ingen fara vi börjar med det då, vad heter chipet du ska programmera för? Vet du instruktionssetet?

Skickades från m.sweclockers.com

Visa signatur

"One is always considered mad, when one discovers something that others cannot grasp."
- Ed Wood

Permalänk

Detta luktar skoluppgift...

Problemet verkar inte så svårt. Du måste bryta ner det i behändiga bitar.

1) Vänta på input.
2) Översätt dina fyra bitar till sju bitar. Här handlar det om att sätta de bitar i LED-displayen som ger rätt siffra. Du får sexton olika inputs och det skall resultera i sexton olika bitmönster som motsvarar segmenten i displayen. Du behöver inte bry dig om att vända på värdet om bitarna kommer i fel ordning. Du skall bara översätta ett bitmönster till ett annat. Kan exempelvis lösas genom att du slår upp rätt värde i en tabell med sexton värden eller genom att testa dig fram till rätt värde (if input == 0 ... else if input == 1 ... else if input == 2 ... osv). (Jag skulle satsa på tabellen.)
3) Skicka detta värde till displayen.
4) GOTO 1

Poängen med uppgiften är väl att du skall lära dig att programmera lite assembler så det får du göra själv.