Pic16f84 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 Bank0 Bank1 Port a 0x05 Tris a 0x85 Port b 0x06 Tris b 0x86 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
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 0x85 Tris b, indirizzo 0x86
Esempio Supponiamo che i led devono essere accesi sui pi RA0 e RA2 e RB5 Port a Port b 1 1
Programma Movlw 0x00 Movwf 0x85 Movlw 0x05 PC 0 W 00000000 PC 1 Tris a 00000000 PC 2 Port a 00000000 PC=Program Counter – incrementa ogni volta che viene eseguita una riga programma
Bank0 e Bank1 Gli indirizzi di bank1 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 0x86 del bank1, si trova alla posizione 0x06; il suo indirizzo potrebbe essere 0x06 bank1
Bank0 e bank TRISB=0x86 Selezionando il bank1 TRISB=0x06 bank1
Bank0 e bank1 Per selezionare bank0 o bank1, bisogna lavorare sul bit 0x05 o RP0 del registro 0x03 o registro STATUS: RP0=0 si seleziona bank0 RP0=1 si seleziona bank1 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 0x05, 0x03 ; si seleziona il bank1 bcf 0x05, 0x03 ; si seleziona il bank0
Programma per far accendere un led sul pin B0 __config 0x3D18 ORG 0x00 ;il programma parte dalla prima riga della memoria programma bsf 0x03, 0x05 ; viene posto a 1 il bit 5 dell'indirizzo 3 bank0, viene cioè ;selezionato il bank1 movlw 0x05 ;l'accumulatore acuisisce valore 5 movf 0x06 ; si passa il valore dell'accumulatore al registro 0x06 bank1=0x86 bcf 0x03, 0x05 ;viene posto a 0 il bit 5 dell'indirizzo 3 bank0,viene cioè selezionato ;il bank0 movlw 0x01 ; si pone il valore 0x01 nell'accumulatore movwf 0x06 ; si passa il valore dell'accumulatore in 0x06 del bank0 END
MplabX
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 RP0, l’accumulatore e il PC