Datorteknik TSIU02 Lab 2 Morsesändare v0.7

Relevanta dokument
Laboration Datorteknik TSIU02 2. I/O-programmering

Datorteknik Hyfsa kod

Arduinokurs. Kurstillfälle 4

LEU240 Mikrodatorsystem

Datorteknik TSIU02 Kursinformation

Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7 Mikrodatorteknik

Datorteknik. Tomas Nordström. Föreläsning 6. För utveckling av verksamhet, produkter och livskvalitet.

TENTAMEN Datorteknik (DO2005) D1/E1/Mek1/Ö1

PC-teknik, 5 p LABORATION ASSEMBLERINTRODUKTION

Linköpings Tekniska Högskola Instutitionen för Datavetenskap (IDA) Torbjörn Jonsson, Erik Nilsson Lab 2: Underprogram

ENKEL Programmering 3

CE_O3. Nios II. Inför lab nios2time

Enkla datatyper minne

Maskinorienterad programmering

Kapitel 2 o 3 Information och bitar Att skicka signaler på en länk. Att sända information mellan datorer. Information och binärdata

Datorteknik 1 (AVR 1)

Föreläsning 2. Operativsystem och programmering

Datorlaborationer, Programmering i C++ (EDAF30)

Multipel tilldelning. Introduktion till programmering D0009E. Föreläsning 6: Iteration. while-satsen. Kom ihåg. Snurror kontra rekursion

Datorteknik 2 (AVR 2)

C++ Lektion Tecken och teckenfält

AVR 3 - datorteknik. Avbrott. Digitala system 15 hp. Förberedelser

A. Datorn från grunden

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

Systemkonstruktion LABORATION REALTIDSPROGRAMMERING

Sekvensnät i VHDL del 2

Tentamen i EIT070 Datorteknik

Studera databladen för LCD på sid 4, 5, 7, 8, 14, 18, 19, 20 och 23. Datablad finns på kurshemsidan.

Lösningar till tentamen i EIT070 Datorteknik

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy cards. Slingor

Kapitel 2 o 3. Att skicka signaler på en länk. (Maria Kihl)

Optimala koder. Övre gräns för optimala koder. Gränser. Övre gräns för optimala koder, forts.

Optimala koder. Det existerar förstås flera koder som har samma kodordsmedellängd. Enklaste fallet är att bara byta 0:or mot 1:or.

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Övning 6. Komprimering, kryptering, dokumentering & testning

STRÄNGAR DATATYPEN. Om du vill baka in variabler eller escape-tecken måste du använda dubbla citattecken. strängar

i LabVIEW. Några programmeringstekniska grundbegrepp

Föreläsning 13 Testning och strängar

"Crash Course in Programming"

F5: Högnivåprogrammering

F5: Högnivåprogrammering

Dagens föreläsning (F15)

kl Tentaupplägg

Tentamen, Algoritmer och datastrukturer

Kontrollskrivning Mikrodatorteknik CDT S2-704

Introduktion till programmering och Python Grundkurs i programmering med Python

Tentamen i IE1204/5 Digital Design onsdagen den 5/

Tentamen i IE1204/5 Digital Design onsdagen den 5/

Användarhandledning Version 1.2

Skurlängdskodning. aaaabbbbbbbccbbbbaaaa. Man beskriver alltså sekvensen med ett annat alfabet än det ursprungliga.

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Drivrutiner för att hantera teckenfönster.

Kapitel 2 o 3 Information och bitar Att skicka signaler på en länk. Jens A Andersson

CPU. Carry/Borrow IX. Programräknare

General Purpose registers ALU I T H S V N Z C SREG. Antag att vi behöver skriva in talet 25 till register R18

JavaScript Block Editor:

Digital- och datorteknik

Kapitel 2 o 3 Information och bitar Att skicka signaler på en länk. Jens A Andersson

TDP Regler

Övning2 Datorteknik, HH vt12 - Programmering

PROGRAMMERING AV MCU LABORATION6. Laborationens syfte

Enchipsdatorer med tillämpningar LABORATION 7, ROBOT

Kapitel 2 o 3 Information och bitar Att skicka signaler på en länk. Jens A Andersson

Övning 6 - Tillämpad datalogi 2012

Datorteknik Övningsuppgifter

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Laboration nr2 med enchipsdatorn PIC-16F877

LABORATION. Datorteknik Y

Maskinorienterad Programmering LP3-2017/2018

Assemblerprogrammering för ARM del 2

Grunderna i stegkodsprogrammering

Laboration 4: Knappstuds Drivrutiner för att eliminera störningar.

DIGITALTEKNIK. Laboration D164. Logiska funktioner med mikroprocessor Kombinatoriska funktioner med PIC16F84 Sekvensfunktioner med PIC16F84

Kort beskrivning av Sveriges första dator BESK

Systemkonstruktion SERIEKOMMUNIKATION

Introduktion till logik

Föreläsning 9: Turingmaskiner och oavgörbarhet. Turingmaskinen. Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen.

Datakommunikation med IR-ljus.

Uppgift 1 (grundläggande konstruktioner)

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

Exempeluppgift i Logikstyrning. 1 Inledning. 2 Insignaler och utsignaler

Planering Programmering grundkurs HI1024 HT 2014

Digital- och datorteknik

TDIU01 - Programmering i C++, grundkurs

Tentamen PC-teknik 5 p

RIKSSEMIFINAL 2018 LAGEN

Ansvarig lärare: Olof Andersson, Telefon (besöker skrivsalen)

Programmerings & Användarmanual Smile VDS

Program. Kapitel make Program Interpreterande och kompilerande program

Hantering av textsträngar och talsträngar. William Sandqvist

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Här ska jag presentera en variant

Mätningar med avancerade metoder

I denna laboration undersöker vi hur aritmetiska beräkningar utförs. Vi tittar på olika variabeltyper: 8-bitars, 16-bitars, 32-bitars och flyttal.

JavaScript del 3 If, Operatorer och Confirm

RIKSSEMIFINAL 2018 DOMARE

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,

Transkript:

Inledning För att skriva program i något programspråk förenklar det att ha ett strukturerat angreppssätt. I assembler får man strukturen genom omsorgsfull användning av subrutiner. Som exempel på en mer avancerad programmeringsuppgift som dessutom utnyttjar fördelarna med strukturerad programmering skall du i denna laboration tillverka en morsesändare. Morsealfabetet uppfanns på 1850-talet av Samuel Morse som ett sätt att överföra information över telefontråd 1. Den internationella varianten av alfabetet bestämdes något senare och innehåller vad informationsteoretikerna idag kallar huffmankodning. I detta laboration-pm finns en beskrivning av hur morsetecknet kodas i binärkod, hur denna kodning skall tolkas till ljud, samt JSP-notationen för det slutliga programmets struktur. Datorteknik TSIU02 Lab 2 Morsesändare v0.7 Laborationsuppgifter Laborationen består av tre uppgifter där den tredje är en extrauppgift. När Uppgift 1 är klar har du en apparat som kan sända morsekod till en högtalare. I Uppgift 2 och Uppgift 3 genomför du sedan några modifikationer med JSP-notation som underlag. Uppgift 1 Skriv ett program som, i morsekod, sänder ut den text som återfinns under labeln MESSAGE. Ljudet skall höras i en högtalare. Ditt program skall ansluta till den övergripande JSP-strukturen i detta labhäfte. Du får själv komplettera med saknade subrutiner för tabelluppslagning och ljudgenerering. Programmet måste vara helt förberett innan laborationen. Fördröjningsrutinen från förra laborationen är lämplig att användas för att skicka en ton till högtalaren. Tidsenheten för sändningshastighet och tonfrekvens skall definieras på ett ställe i programmets början (med.equ ). Rutinerna för BEEP och NOBEEP skall vara i huvudsak samma kodrader. Längden (N, 2N,... ) skall anges som argument till dem. 1 Mikrofonen var ännu inte uppfunnen... Uppgift 2 Hur tar ditt program hand om ett mellanslag (ascii $20) i textsträngen? Studera strukturdiagrammet och implementera en ändring så att mellanslag utförs korrekt, dvs med totalt 7 tidsenheters tystnad mellan orden. Uppgift 3 (Extra). Om det inte finns binärkod för ett önskat tecken skall programmet sända ett mellanslag i stället. Ett strukturdiagram för denna modifiering är given. Finns det någon annan (bättre?) modifiering för detta? Programmets modulära struktur underlättar denna typ av ändringar. Ändringen skall kunna utföras som en modifikation utan större ingrepp i det befintliga programflödet. Skriv kompletterande assemblerkod för din lösning och provkör. 1

Morseteckenkodning Morsetecknen består av korta och långa teckendelar i form av tonsignaler i olika kombinationer. Varje bokstav och siffra motsvaras av ett morsetecken som byggs upp av korta och långa tonsignaler. En kort signal ( prick / dit ) är 1 tidsenhet lång, och en lång signal ( streck / dah ) är 3 tidsenheter. Mellan teckendelarna skall det vara 1 tidsenhets tystnad, mellan tecknen 3 tidsenheters tystnad och mellan ord 7 tidsenheters tystnad. Tidsenheten bör vara ganska lång med datormått mätt, omkring 20 ms, för att sändningen skall kunna avlyssnas av människor. 2 Morsetecknen är olika långa varför en speciell bytevis binärkodning används för dem i laborationen. I denna kodning är ettan längst till höger i byten en slutmarkering, S, som inte ingår i själva morsekoden. Till exempel blir binärkoden för bokstaven F ( ), med slutmarkering S: S C 0 0 1 0 1 0 0 0 = $28 Med denna kodning kan man skifta bitarna ett steg i taget åt vänster och låta innehållet i C- flaggan bestämma om man skall sända ut kort eller lång ton. När den sista ettan, S, skiftats ut i C-flaggan är byten i övrigt noll, och man kan på så sätt detektera när hela tecknet är sänt. Nedan visas detta, efter ett inledande vänsterskift, bit för bit på bokstaven F : 0 0 1 0 1 0 0 0 0 = $50 (vänsterskift bit för bit) Hårdvara Laborationen använder hårdvaran: Högtalarmodul Innan laborationen måste du skriva och simulera kod för: Hur man genererar en ton med enbart digital utsignal Hur data lagras i programminnet Hur data nås om det ligger i programminnet Texten MESSAGE Texten som skall sändas, MESSAGE, skriver du själv in i mikrokontrollerns programminne, flash. För uppgift 1 kan texten vara: MESSAGE:.db "DATORTEKNIK", $00 För uppgift 2 3 måste texten dessutom innehålla mellanslag och/eller okända tecken som till exempel HEJ HOPP eller HEJ HÖPP. Strängen anges alltid i versaler 3 och avslutas med ett NUL-tecken, en byte som är binärt noll. Binärkodning i programminne Översättningen mellan ascii och den nödvändiga binärkodningen återfinns i slutet av detta häfte. Tabellen skall ligga i mikrokontrollerns programminne under labeln BTAB (för BinärTABell) och det är din uppgift att lägga den där. Med kännedom om adressen för tabellstarten BTAB, kan programmet sedan nå rätt binärkod med indexerad adressering. 0 1 1 0 0 0 0 0 0 0 = $80 0 0 0 0 0 0 0 0 = $00 2 En överföringshastighet på 60 150 tecken per minut är rimlig. 3 Hur kan du tillåta även gemener i texten? Tips: Studera ascii-tabellen. 2

Programstruktur JSP Använd strukturdiagrammet när du skriver assemblerkoden. Som ledtråd till lösning finns pseudokod på nästa sida. Komplettera med de rutiner och variabler som behövs för ett komplett program. Övertyga dig om att strukturdiagrammet faktiskt löser uppgiften. MORSE SEND_IT ONE_CHAR* tecken BEEP_CHAR LOOKUP SEND NOBEEP(2N) SEND_BITS BIT * bitar BEEP NOBEEP(N) KORT BEEP(N) LÅNG BEEP(3N) 3

Programstruktur Pseudokod Pseudokoden nedan är skriven utgående från strukturdiagrammet. Det kan vara onödigt att använda subrutiner för varje enskild ruta i diagrammet och pseudokoden har på detta sätt slagits ihop till två större kodavsnitt. Notera att detta inte betyder att man bryter mot det strukturerade programflödet. MORSE{ CALL ; while( char!= 0){ CALL LOOKUP; CALL SEND; CALL NOBEEP(2N); CALL ; // Tills NUL // 2N tystnad SEND{ CALL ; // Hämta nästa bit while ( Z!= 0){ // tills hela sänt if bit==0 CALL BEEP(N); // 1N ljud, dit else CALL BEEP(3N); // 3N ljud, dah CALL NOBEEP(N); // 1N tystnad CALL ; Med bra namn på rutiner och variabler behöver man inte ha så många kommentarer. Om de valda namnen ändå skulle vara otydliga kommer här en kort beskrivning av namnen i strukturdiagrammet och pseudokoden. Rutinnamn Beskrivning MORSE Huvudprogrammet som sänder hela strängen. Hämtar nästa ascii-tecken ur strängen. ONE_CHAR Ombesörjer sändandet av ett ascii-tecken. BEEP_CHAR Sänder ett morsetecken. LOOKUP Översätter ascii-tecken till binärkod. SEND Skickar iväg ett tecken. Hämtar nästa bit för sändning. SEND_BITS Skickar iväg alla bitar för ett tecken. BIT Sänder kort eller lång bit med efterföljande tystnad. BEEP(N) Piper i högtalaren tiden N. NOBEEP(N) Piper inte i högtalaren tiden N. Du får själv hantera programmets variabler, tabelluppslagning, subrutinernas argument och så vidare. Du kan även göra en annan uppdelning än pseudokoden ovan så länge du inte bryter mot det givna programflödet. 4

Internationella morsealfabetet och binärkodning i laborationen Använd tabellinnehållet för BTAB. Notera att ascii-tecknet för mellanslag $20 saknas i tabellen. Detta faktum hanteras i uppgift 2. Programmet i laborationen skall kunna hantera samtliga bokstäver i tabellen. 5

Strukturdiagram för uppgift 3 Strukturdiagrammet nedan är modifierat enligt uppgift 3. De tillkomna rutorna är gråade. Vad skall x vara i NOBEEP(xN)? MORSE SEND_IT ONE_CHAR* tecken BEEP_CHAR LOOKUP Finns kod? Ja SEND NOBEEP(2N) Nä NOBEEP(xN) SEND_BITS BIT * bitar BEEP NOBEEP(N) KORT BEEP(N) LÅNG BEEP(3N) -o-o-o- 6