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