22.08.2013 Views

Maskinnära programmering i C och assembler

Maskinnära programmering i C och assembler

Maskinnära programmering i C och assembler

SHOW MORE
SHOW LESS

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.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!