Maskinnära programmering i C och assembler
Maskinnära programmering i C och assembler
Maskinnära programmering i C och assembler
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Arbetsbok för MC12<br />
Absolut adressering i C<br />
Portar med fasta adresser i minnet kan adresseras<br />
genom att tillämpa en typkonvertering på<br />
konstanten, minns att typdeklarationer "läses<br />
bakifrån" <strong>och</strong> betrakta följande:<br />
*((char *)Portadress)<br />
Portadress, är den fysiska adressen (en<br />
konstant).<br />
(char *) anger att Portadress är adressen till<br />
en 8-bitars port, om det är en 16-bitars port<br />
använder vi konverteringen (short int *), för<br />
en 32-bitars port används (long int *).<br />
Slutligen, * framför yttersta parentesen anger helt<br />
enkelt att det är innehållet på denna adress som<br />
avses.<br />
Vill vi ange innehållet på ML4’s inport får vi då<br />
*((char *) ML4IN)<br />
Vi definierar nu följande macros:<br />
#define ML4IN 0x0600<br />
#define ML4OUT 0x0400<br />
#define ML4READ *((char *) ML4IN)<br />
#define ML4WRITE *((char *) ML4OUT)<br />
UPPGIFT 120:<br />
Skapa en ”headerfil” PORTADD.H med<br />
ovanstående macros/definitioner<br />
SLUT PÅ UPPGIFT 120.<br />
Följande sekvens visar hur vi sedan deklarerar en<br />
variabel, tilldelar denna värde från ML4’s inport,<br />
skiftar variabeln ett steg åt höger <strong>och</strong> slutligen<br />
skriver variabelns värde till ML4’s utport:<br />
90<br />
char c;<br />
c = ML4READ;<br />
c = c >> 1;<br />
ML4WRITE = c;<br />
UPPGIFT 121:<br />
Skapa en fil ML4.C med ett huvudprogram (main)<br />
som kontinuerligt läser från ML4’s inport, skiftar,<br />
<strong>och</strong> skriver resultatet till ML4’s utport. Använd<br />
PORTADD.H för definitioner.<br />
SLUT PÅ UPPGIFT 121.<br />
UPPGIFT 122:<br />
Det är dags att skapa projektet – ”bygga” <strong>och</strong> testa<br />
vår lilla stand-alone applikation<br />
Skapa ett nytt projekt ML4 ('Insert New Project<br />
into Workspace').<br />
Följande inställningar är lämpliga för den fristående<br />
applikation vi nu ska skapa:<br />
Observera speciellt att startadressen för<br />
programmet är angivet med ett direktiv till<br />
länkaren.<br />
-R startupseg:0x2000<br />
Vi har alltså försäkrat oss om att vårt programs<br />
första exekveringspunkt (instruktion) finns på<br />
adress 2000.<br />
Notera också att vi avmarkerat alla<br />
standardalternativ för projektet (’Use standard<br />
startup’, ’Use default libraries’, Use standard<br />
include path’).<br />
a. Skapa den exekverbara filen, dvs "bygg"<br />
projektet med:<br />
Build | Build All<br />
b. Starta debugger'n<br />
Debug | Source Level | Simulator<br />
c. Från simulatorn, koppla ML4 Dip-Switch<br />
Input till adress $0600.<br />
d. Koppla ML4 Parallel Output till adress $0400.<br />
e. Spara simulatorkonfigurationen under namnet<br />
'ml4-simple'.<br />
Testa programmet genom att stega (rad för rad) <strong>och</strong><br />
kontrollera funktionen. Ställ in något värde på Dip-<br />
Switchen, observera hur variabeln 'c' ändras (i<br />
fönstret 'Local Watch').<br />
SLUT PÅ UPPGIFT 122.<br />
UPPGIFT 123:<br />
Ändra nu testprogrammet så att ett vänsterskift<br />
utförs. Innan du startar debuggern, koppla din<br />
färdiga simulatorkonfiguration till projektet genom<br />
att välja:<br />
Debug | Source Level | Select<br />
Simulator Configuration<br />
Testa <strong>och</strong> kontrollera som tidigare.<br />
SLUT PÅ UPPGIFT 123.