Sei sulla pagina 1di 7

Parziale 3

Come fare una procedura

push

pop

Orologio (interrupt)

Preparare un PIC (costanti, parole di comando, inizializzazione):


Seriali:

Inizializzare porte seriali:

nel main si mette “call init_COM1” ad esempio, questa è una chiamata a questa
procedura:

Slide 20 e 19 del pacco “comunicazioni seriali” per vedere come si legge o si scrive su
una porta seriale a polling. Slide 21 e 22 per la gestione delle seriali ad interrupt.

Interfaccia in input, esempio interruttori:


Interfaccia in output, esempio led:

Interfaccia seriale:8250

Interfaccia PIC, 8259: (le IR vanno da 0 a 7 con priorità decrescente)


Interfaccia verso l’orologio:

Come trovare l’interrupt type e cercare cosa contiene: si sceglie con cosa
programmare ICW2(che deve essere un multiplo di 8 poiché gli interrupt possibili in
ogni PIC sono otto e devono essere tutti configurati con lo stesso ICW2), quello ti dà
l’interrupt type, si
moltiplica per
quattro,poiché ogni cella
contiene 4 byte, dentro
la cella del valore
moltiplicato troviamo un
indirizzo in cui è
contenuta la procedura.

La IVT arriva fino a 3FFH

Supponiamo che la
tabella dei task(che
contiene quindi le
procedure si trovi subito
dopo la IVT) .

Vogliamo chiamare la procedura contenuta dentro un certo indirizzo della task table
allora dobbiamo fornire l’inizio della tasktable che chiameremo tasktable e un indice
che ci dica quale procedura prendere, bisognerà utilizzare questo codice:

Parte software:

Come è fatto un intero programma:


;DIRETTIVE AL COMPILATORE (DEFINIZIONI EQU E COMPANY)
------

;DICHIARAZIONE VARIABILI
------

main:
;INIZIALIZZAZIONE PERIFERICHE
;INIZIALIZZAZIONE VARIABILI E QUANT'ALTRO
;SISTEMAGGIO DI TUTTA LA ROBA CHE DEV'ESSERE FATTA SOLO UNA VOLTA
ALL'ACCENSIONE DEL SISTEMA
mainloop: ;loop infinito, pezzo principale del programma
-----
----
;programma vero e proprio
-----
-----
J mainloop: ;ripeto all'infinito

;la roba che scrivi qui non verrà mai fatta a meno che non fai delle jump strane ma non si fa
di solito perchè se passi di qua il programma termina e si blocca e non fa più niente anzi
rischi che si impalli mezzo mondo

;PROCEDURE
PROC pippo1
-----
ENDP

PROC pippo2
-----
ENDP

;ROUTINE DI INTERRUPT
INT_bo1
-----
RFE

INT_bo2
-----
RFE

ecc..

Isa dell’MSP430

Istruzione MOV(ce ne sono 7 tipi):


cmq possiamo scrivere ad esempio:
MOV PIPPO,R10 sposta pippo il R10
MOV &PIPPO,R10
Che non cambia nientre

Poi per creare le costanti:


MOV #13H,PIPPO
MOV #10,R5 (in binario) queste valgono per una word(2byte)
MOV.b per un byte
Double operand:
Single operand:

Jump:

Slide 25 e 25 di isa MSP430 per e istruzioni emulate.


Numero Numero Numero 2⁵=32
decimale binario esadecimale
2⁶=64
0 0000 0
2⁷=128
1 0001 1
2⁸=256
2 0010 2
2⁹=512
3 0011 3
2¹⁰=1024= 1KB
4 0100 4
2²⁰=1MB
5 0101 5

6 0110 6 2³⁰=1GB

7 0111 7 2³²=4GB

8 1000 8

9 1001 9

10 1010 A

11 1011 B

12 1100 C

13 1101 D

14 1110 E

15 1111 F