Introduktionsuppgift till enchipsdatorn. I den här övningen skall du bekanta dig med enchipsdatorn MC68HC908JL och utvecklingssystemet CESAM-Flash. Du skall läsa in data från en tryckströmställare och mata ut data på ett antal lysdioder. Som slutövning skall du skriva ut lite text på en LCD-display. Vi kommer att använda lab-modul nr.1. Enchipsdatorn MC68HC908JL har tre portar, kallade A,B och D, via vilka datorn hämtar in data från omvärlden och skickar ut sina resultat. Enchipsdatorn sitter monterad i en hållare på ett litet kretskort där även strömförsörjningen och kommunikation till en PC är ordnad. Vi kallar detta kort för modermodulen. Till detta kort kan man sedan ansluta olika dottermoduler anpassade för olika uppgifter. Vi skall arbeta med modul 1, som är ett enkelt in- och utmatningskort. På detta kort är port D ansluten till 8 lysdioder, där man alltså kan skicka ut ett resultat. På porten B sitter en 8-bitars DIP-switch, via vilken man kan mata in infomation, och på bit 0 i A-porten sitter en tryckströmställare. Den exakta kopplingen framgår av schemat. Alla ingångar är försedda med pullup-motstånd på 4. kohm. 1 DS181 VCC RST 0.1u 8 0.1u 14 Vcc 8 4 Out OSC 5 1 VDD RST OSC1 OSC IRQ VSS MC68HC908JL AC 0.1u +10V A0 6 A1 8 A 9 A A4 A5 1 B0 0 B1 18 B 1 B 15 B4 1 B5 11 B6 10 B 16 D0 19 D1 4 D D 6 D4 5 D5 14 D6 1 D J9 B4 A4 B1 A1 B A A +5v B16 A16 A6 A PA 0 A8 PA 1 PA A9 A15 PA A5 PA 4 PA 5 A10 A11 A1 B15 A14 B14 A1 B1 B1 B11 B10 B9 B8 B B6 B5 B UREG AC PB0 PB1 PB PB PB4 PB5 PB6 PB PD0 PD1 PD PD PD4 PD5 PD6 PD INT J10 +5v UREG AC PA0 PA1 PA PA PA4 PA5 PB0 PB1 PB PB PB4 PB5 PB6 PB PD0 PD1 PD PD PD4 PD5 PD6 PD INT B4 A4 B1 A1 B A A B16 A16 A6 A A8 A9 A15 A5 A10 A11 A1 B15 A14 B14 A1 B1 B1 B11 B10 B9 B8 B B6 B5 B 5V 9 8 6 5 4 1 1 4 5 6 8 16 15 14 1 1 11 10 9 PINJL PINJ L 5V Lysdioder och omkopplare anslutna till datorns portar. Vi kommer att använda utvecklingssystemet CESAM-Flash för att skriva, översätta, simulera och promma ditt program. Utvecklingssystemet består av ett program och moderkortet som ansluts till en COM-port på datorn. Hela programmet är menystyrt, med en huvudmeny och ett antal undermenyer. Från huvudmenyn kan du starta editorn, assemblatorn, simulatorn och utföra promningen. 00-09-01 Introduktion- 1 PN
Vi skall gå igenom uppgiften steg för steg för att visa hur du löser en uppgift: 1. Din första uppgift blir att tända lysdioderna 0,,4,6 och släcka de övriga. Starta CESAM-Flash-programmet genom att dubbelklicka på ikonen. Du kommer då att få upp programmets huvudmeny. Programmet minns vilket projekt du sist arbetade med, och föreslår det som projekt. Vill du i stället skapa ett nytt projekt gör du det genom att skriva in ett nytt namn, och därefter klicka på OK. Då kommer du tillbaka till programmets huvudmeny. Härifrån kan man välja att starta editorn, att uföra översättningen till maskinkod (assemblera), att simulera programmet eller att bränna in koden i enchipsdatorns minne. Editering. Starta editorn. I setup-menyn har du kunnat välja mellan några olika editorer, t.ex. den i windows inbyggda Notepad (Anteckningar). Du har också möjlighet att använda Uedit som har s.k syntax-färgning, dvs reserverade ord och andra delar av programmet får olika färger. Pröva den, det underlättar avsevärt Förattgöradetlättattkommaigångfrånbörjanharviskrivitstommentillettprogram, där det mesta man behöver redan finns deklarerat. Direkt efter det att du startat editorn, importerar du denna stomme, kallad FRAME.JL, genom att klicka på Special Function och Insert File. Så letar du dig fram till filen Frame.jl, markerar den och klickarpå Öppna.Dåkopierasfilenframeinidittprojekt,ochduslipperskrivadessa rader själv. Om du använder Notepad öppnar du filen Frame.P6 och markerar all text. Därefter öppnar du ditt nya program och klistrar in textem med hjälp av paste. Lämna filen Frame.JL utan att spara några ändringar i den. I alla program måste vissa satser alltid finnas, bl.a. dessa: Definiera de symboler som behövs. I detta fall PORTD och DDRD. Definiera startvektorn. Sätt en label på första exekverbara satsen i programmet. Denna label utnyttjar du även vid definitionen av startvektorn. Avsluta programmet med END. Du ser att det är just dessa delar som den inlästa filen FRAME.JL innehåller. Nu skall du skriva de satser som utför uppgiften. För att tända och släcka lysdioderna på PortD skall du skicka ut information på portens alla bitar. Portens alla bitar skall alltså riktas utåt. Det åstadkomms genom att skriva ettor till portens riktningsregister. Det gör vi i med en MOV-sats. Vi får alltså följande: MOV #%11111111,DDRD ;Rikta hela PortD utåt Tänk på den syntax (grammatik) som är definierad för det här programmeringsspråket. Den finns beskriven i Appendix C i läroboken Konstruera med Enchipsdatorer. Alla satser, utom lägen och andra namn, måste börja minst ett mellanslag in på raden. Nu har du riktat dataflödet utåt på PortD. Nu skall vi skicka ut själva data som tänder eller släcker lysdioderna. Som framgår av kopplingsschemat sitter lysdioderna 00-09-01 Introduktion- PN
kopplade till via ett motstånd på 0 Ohm. För att få ström genom en lysdiod och därmed tända den, måste du lägga ut en låg spänning, dvs en nolla på biten i porten. Vi skall alltså lägga ut nollor på bitarna 0,,4,6 i porten och ettor på de övriga. Även här använder vi oss av en MOV-sats. MOV #%10101010,PORTD ;skicka ut data på portens dataregister När du skrivit programmet med hjälp av utvecklingssystemets editor, sparar du programmet och går tillbaka till huvudmenyn. Assemblering Begär sedan assemblering av programmet genom att klicka på knappen Assemble. Då läser assemblatorn igenom raderna i ditt program och skriver ut eventuella felmeddelanden. Läs felmeddelandena och försök att förstå vad du har gjort för fel. Om du får felmeddelanden startar du åter editorn samtidigt som du har fönstret med felmeddelandena uppe. Iblandkanettendafeldramedsigföljdfelsåattdetservärreutändetär.Rättadefeldu ser, spara filen och assemblera om. Efter några vändor har du säkert klarat av dina syntaxfel. Eftersom felmeddelandena refererar till radnummer är det ju ytterst lämpligt att använda en editor som visar radnummer. Simulering När du kommit igenom assembleringen utan fel, är det dags att börja provköra ditt program. Det gör du med hjälp av simulatorn. Simulatorn att ett program som efterliknar själva enchipsdatorn in i minsta detalj, men som körs i PCn. Det ger dig möjligheten att exakt följa vad som händer i datorn när du kör programmet. Du kan se vad som händer i register och portar och hur mikro-sekunderna tickar fram. Starta simulatorn genom att klicka på knappen Simulate. Du uppmanas då att klicka på knappen Reset så att ditt programs maskinkod laddas in i simulatorn, klar för simulering. Stega dig sedan igenom programmet instruktion för instruktion (single stepping) genom att klicka på knappen Step och se att ditt program går rätt. Du ser i PORT-fönstret hur först riktningen på alla bitar i D-porten vänds utåt. (innehållet växlar från iiiiiiii till oooooooo). Därefter blir databitarna satta till 10101010. Vad händer när datorn kommit till sista satsen i ditt program?? Just det - du får konstiga felmeddelanden. Det beror på att processorn hela tiden fortsätter och hämtar och utför operationskoder från minnet, även om du inte har skrivit dit några. Du måste därför hela tiden sysselsätta processorn även om det inte finns något mera att göra. Du måste avsluta programmet genom att kommendera processorn på stället marsch. Det gör du genom att skriva en sats där processorn hela tiden hoppar tillbaka till samma sats. Det gör du så här: HIT: BRA HIT ;Gå in i en oändlig loop Närduärnöjdmedsimuleringenavdittprogram,ärdetdagsattprovadetihårdvaran. Promning. Som sista steg i utvecklingen av ditt program skall du överföra maskinkoden in i enchipsdatorns programminne och provköra labkortet med enchipsdatorn monterad. 00-09-01 Introduktion- PN
Det gör du genom att ansluta moderkortet till en av datorns COM-port och klicka på prom -knappen. Då öppnas programmeringsmenyn. Där anger du vilken port som programmeraren sitter ansluten till. Först måste enchipsdatorns Flash-minne raderas. Det gör du genom att klicka på Erase. Du kommer då att få en uppmaning att göra en s.k. Power Up Reset. Det innebär att du skall stänga av matningsspänningen från pluggtransformatorn under några sekunder och koppla bort eventuella dottermoduler. Därefter ansluter du åter matningsspänningen. Då kommer Flash-minnet att raderas. Därefter klickar du på prom - knappen. Då kommer maskinkoden att föras över till enchipsdatorn och brännas in i enchipsdatorns Flash-minne. När du fått meddelande om att enchipsdatorn är programmerad, måste du åter göra en Power Up Reset för att få enchipsdatorn att starta med ditt program.. När du ansluter matningsspänningen startar enchipsdatorn från början av programmet (power up reset), och lysdioderna börjar nu lysa så vackert. När programmet är färdigtestat tar du ut assembleringslistan på printern och sparar den i din kurspärm.. Nästa program skall ligga i en oändlig loop och läsa in statusen från tryckomkopplaren. Om den är uppsläppt skall alla lysdioder lysa, och om man trycker ned knappen skall lysdioderna slockna. Börja ett nytt program genom att ladda in FRAME.JL till ditt nya program. Tänk på att när du läser av tryckomkopplaren så går informationen in i datorn, så biten 0 i A-porten måste programmeras att vara riktade inåt. Gå igenom samma procedur med editering, assemblering, simulering och promning som i första uppgiften, och spara assembleringslistan när du är klar. Som du ser i kopplingsschemat sitter tryckomkopplaren ansluten till bit 0 i A-porten. Börja med att programmera upp riktningarna på portarna: START: LDA #%11111111 ;Rikta hela Port D utåt STA DDRD LDA #%0000 ;Rikta hela Port A inåt STA DDRA Närportarnanuärinitieradelåterduprogrammetgåruntienoändligloop.Inutiloopen känner du av statusen på bit 0 i A-porten och beroende på om den är en 1 eller 0 skickar du ut åtta nollor eller ettor på lysdioderna: LOOP: BRSET 0,PORTA,NOLL ;Är knappen uppsläppt BRCLR 0,PORTA,ETT ;eller nedtryckt? NOLL: MOV #%00000000,PORTD ;Tänd lysdioderna BRA LOOP ;Gå runt i programmet ETT: MOV #%11111111,PORTD ;Släck lysdioderna 00-09-01 Introduktion-4 PN
BRA LOOP ;loopa i programmet Assemblera och provkör programmet.. I den sista introduktionsuppgiften skall du skriva ditt eget namn på en display av flytande kristaller ansluten till enchipsdatorn. En display av flytande kristaller (Liquid Crystal Display - LCD) är uppbyggd av två glasskivor mellan vilka den vätska finns som är det aktiva mediet (de flytande kristallerna). Om vätskan utsätts för en elektrisk spänning ändrar den sina optiska egenskaper, bl.a. sin transmissionsförmåga för ljus. För att kunna lägga spänningen över vätskan har man lagt ett mycket tunnt metallmönster på insidan av de båda glasen. Detta metallmönster leder ström och gör att man kan få spänningen över olika partier av vätskan. Elektroderna i metallmönstret är utformade som punktmatriser och genom att aktivera olika punkter kan man generera olika bokstäver, siffror och tecken. För att kunna hantera displayen på ett enkelt sätt är den utrustad med ett kretskort med styrelektronik. För att skriva tecken på displayen, behöver enchipsdatorn bara skicka ut ASCII-tecken till LCD-displayens styrelektronik. Denna tar sedan hand om tecknen och aktiverar de olika punkterna i displayen så att det bildas motsvarande tecken på displayen. För att underlätta programmeringen av LCD-displayen finns det en programbiblioteksmodul kallad LCDflash.LIB. Där finns alla de rutiner du behöver för att initiera displayen och sedan använda den. Kopiera in denna biblioteksmodul i slutetavdittegetprogramsåattdusedankananropadeolikasubrutinerdubehöver,på samma sätt som du tidigare kopierade in programramverket FRAME. Innan man kan börja skriva tecken på displayen måste den initieras. Det sker genom att du helt enkelt anropar subrutinen LCDINI i biblioteksmodulenmed satsen: JSR LCDINI ;Tvåradig display Om du fortfarande använder den enradiga displayen initierar du den med satsen: JSR LCDINI ;Enradig display Därefter kan du skicka ut enstaka tecken eller hela textsträngar till displayen genom att använda olika subrutiner i modulen. Läs igenom den inledande texten i biblioteksmodulen så att du vet vilka subrutiner som finns och hur de skall användas. Därefter skall du skriva ut ditt eget namn på displayen. Då måste du först lagra ditt namn i enchipsdatorns minne. Det gör du enklast med satsen: NAMN: DB Kalle Anka,0 Obs! att denna sats för att definiera minnesinnehåll inte får ligga insprängd bland de körbara satserna, utan skall ligga före eller efter dessa. Ett lämpligt ställe är där det står: Här läggs programmets konstanter, textsträngar och tabeller. Nollan på slutet på textsträngen måste finnas för att utskriftsrutinen skall veta att det är slut på texten. Labeln NAMN har du satt på texten för att du skall kunna veta var i minnet (vid vilken adress) som texten ligger. 00-09-01 Introduktion- 5 PN
När du anropar rutinen för utskrift av en textsträng till LCD-displayen, måste du tala omförrutinenvariminnetsomtextenligger.detgördugenomattladdaindexregistret med adressen till texten innan du anropar rutinen. Den laddningen av indexregistret gör du med satsen: LDHX #NAMN LDHX innebär att du laddar indexregistret, och #NAMN att du laddar med adressen till labeln NAMN. När denna förberedelse är klar kan du anropa utskriftsrutinen med satsen: JSR LCDSTR SubrutinenLCDSTRkommerdåattskrivautdeteckensomdenhittariminnetvid den adress som indexregistret pekar på, ända tills den stöter på nollan som avslutade ditt namn. Då avslutas utskrifts-subrutinen och datorn hoppar tillbaka till ditt huvudprogram. Eftersom uppgiften är klar i och med utskriften av namnet måste du stanna processorn på något sätt. Det kan du exempelvis göra genom att låta programmet gå in i en oändlig loop där man hela tiden hoppar tillbaka till samma sats, så här: HIT: BRA HIT Som sista sats i hela programmet måste det finnas ett END för att tala om för assemblatorn att nu är det slut på texten i programmet. Assemblera, simulera och promma ditt program på samma sätt som i de tidigare uppgifterna. I rutinen för initiering av LCD-displayen finns en vänterutin som kommer att ta några sekunder att utföra i simulatorn, men hav tålamod! 00-09-01 Introduktion- 6 PN