Esercizio 1 in assembler per PIC16F877A
Realizzare un programma che gestisca il circuito sotto. In pratica c'è un pulsante normalmente aperto sul pin RA0 e un led sul pin RB0.
Il funzionamento è il seguente :
Se si preme S1 (pulsante ON) il led DL1 deve essere spento;
Se non si preme S1 (pulsante OFF) il led DL1 si deve accendere.
Sorgente in assembler
; ********************************************************************************
; sorgente
; PROGRAMMA DI Senatore Pasquale classe 4B
; MICROCONTROLLORE PIC 16F877A
; A.S. 20xx-20xx
; IST. SUP. " S. D'ARZO "
; LINGUAGGIO DI PROGRAMMAZIONE : ASSEMBLER
; NOME SORGENTE : prova1.asm
; ********************************************************************************
;DEFINIZIONE DEI PIN DEL MICROCONTROLLORE
;
; INGRESSI
; RA0 : (pin 2) ingresso interruttore on/off
; USCITE
; RA1 : (pin 3) uscita led
;
; N.B. TRA PARENTESI SONO INDICATI I PIN DEL PACKAGING DIP DEL uC
;
;
#INCLUDE "p16F877A.inc"
LIST P=16F877A, F=INHX8M
__CONFIG 0X3F3A ;sa se usiamo il watch dog
NOMEVAR EQU 20H ; DEFINIRE VARIABILE E LOCAZIONE DI MEMORIA (NOME MAX 6 CARATTERI)
;
;
ORG 00 ; INDIRIZZO INIZIO PROGRAMMA
GOTO INIZIO ; SALTA SUBROUTINE INTERRUPT
ORG 04 ; INDIRIZZO SUBROUTINE INTERRUPT
;
;
;
RETFIE ; RITORNA AL PUNTO IN CUI L'INTERRUPT E' STATO ATTIVATO
INIZIO: ; PROGRAMMA PRINCIPALE, VIENE ESEGUITO DOPO UN RESET O BLACK OUT
; DA QUI IN AVANTI VA SCRITTO IL PROGRAMMA
BCF STATUS,6; }bank1
BSF STATUS,5; }
MOVLW 0x07;
MOVWF ADCON1;
MOVLW 0xFF;
MOVWF TRISA;
MOVLW 0xFC;
MOVWF TRISB;
main:
bcf STATUS,5; passo al bank0
BTFSS PORTA,0; legge se è premuto il pulsante
goto prova0;
goto prova1;
prova0:
BTFSS PORTA,1;
goto usc2;
bcf PORTA,0; spengo il led quando l'interrutore è aperto
bcf PORTA,1; spengo il led quando l'interrutore è aperto
goto main;
usc2:
bsf PORTB,1; metto a "1" l'uscita RA1 se l'interruttore è premuto
goto main;
prova1:
BTFSC PORTA,1;
goto usc1;
bcf PORTA,0; spengo il led quando l'interrutore è aperto
bcf PORTA,1; spengo il led quando l'interrutore è aperto
goto main;
usc1:
bsf PORTB,0; metto a "1" l'uscita RA1 se l'interruttore è premuto
goto main;
END ;ISTRUZIONE CHE INDICA AL COMPILATORE CHE E' FINITO IL PROGRAMMA