PIC 16 F 84 Assembly IO Assembly Il
PIC 16 F 84 Assembly I/O
Assembly � � � Il linguaggio Assembly è classificato come linguaggio a basso livello Un file in Assembly ha estensione. asm Una volta processato il programma scritto in assembly, viene generato un file in esadecimale con estensione. hex Il file esadecimale viene inserito nel microcontrollore Un programma in assembly, si divide in: dichiarazioni, commenti e corpo del programma Si vuole scrivere un programma per fare accendere dei led
Accensione di un led � Per fare accendere un led tramite un microcontrollore, bisogna: � Dichiarare di output il pin dove il led è collegato � Porre a livello logico alto il pin dove è collegato il led � Tutti questi dati vengono posti all’interno dei registri: Il registro tris per il verso dei dati (Input/Output) Il registro port per il livello logico
Memoria Registri Bank 0 Bank 1 Port a 0 x 05 Port b 0 x 06 Port a e port b definiscono il livello logico dei singoli pin Tris a e tris b definiscono se i pin sono di input o di output Tris a 0 x 85 Tris b 0 x 86
Esempio Vogliamo accendere tre led due sulla porta a e uno sulla porta b; le due porte devono essere dichiarate di OUTPUT Tris a, indirizzo 0 x 85 � 0 0 0 0 Tris b, indirizzo 0 x 86 0 0 0 0
Esempio Supponiamo che i led devono essere accesi sui pi RA 0 e RA 2 e RB 5 Port a � 0 0 1 Port b 0 0 1 0 0 0
Programma � Movlw 0 x 00 � Movwf 0 x 85 � Movlw 0 x 05 W 0000 PC 0 Tris a 0000 PC 1 Port a 0000 PC 2 PC=Program Counter – incrementa ogni volta che viene eseguita una riga programma
Bank 0 e Bank 1 � � � Gli indirizzi di bank 1 possono creare dei problemi nel codice assembly perché possono portare a superare i 14 bit della riga programma Per evitare ciò, si possono indirizzare i registri in base alla posizione di ria distinguendo solo i banchi Es, il registro di indirizzo 0 x 86 del bank 1, si trova alla posizione 0 x 06; il suo indirizzo potrebbe essere 0 x 06 bank 1
Bank 0 e bank TRISB=0 x 86 Selezionando il bank 1 TRISB=0 x 06 bank 1
Bank 0 e bank 1 � � � Per selezionare bank 0 o bank 1, bisogna lavorare sul bit 0 x 05 o RP 0 del registro 0 x 03 o registro STATUS: � RP 0=0 si seleziona bank 0 � RP 0=1 si seleziona bank 1 In generale, per porre un bit a 1, si scrive il seguente codice: bsf indirizzo registro, indirizzo del bit Per porre un bit a zero, si scrive: bcf indirizzo registro, indirizzo del bit bsf= bit set file bcf= bit clear file Nel nostro caso: bsf 0 x 05, 0 x 03 ; si seleziona il bank 1 bcf 0 x 05, 0 x 03 ; si seleziona il bank 0
Programma per far accendere un led sul pin B 0 __config 0 x 3 D 18 ORG 0 x 00 ; il programma parte dalla prima riga della memoria programma bsf 0 x 03, 0 x 05 ; viene posto a 1 il bit 5 dell'indirizzo 3 bank 0, viene cioè ; selezionato il bank 1 movlw 0 x 05 ; l'accumulatore acuisisce valore 5 movf 0 x 06 ; si passa il valore dell'accumulatore al registro 0 x 06 bank 1=0 x 86 bcf 0 x 03, 0 x 05 ; viene posto a 0 il bit 5 dell'indirizzo 3 bank 0, viene cioè selezionato ; il bank 0 movlw 0 x 01 ; si pone il valore 0 x 01 nell'accumulatore movwf 0 x 06 ; si passa il valore dell'accumulatore in 0 x 06 del bank 0 END
Mplab. X
New project
Selezionare: project embedded
Standalone project
Midrange MCU
Pic family
Simulator
Mpasm
Nome del progetto
Creazione del source file
New file
Assembler
Nome file
Scrittura programma
Compilazione programma
Visualizzazione dei file register e memoria flash
Simulazione: dopo l’avvio del debug, selezionare i breakpoint
Simulazione: per visualizzare lo stato dell’accumulatore, il bank e pc: tasto destro del mouse e run to Cursor Vengono visualizzati I registri RP 0, l’accumulatore e il PC
- Slides: 30