; ********************************************************************************
; sorgente
; PROGRAMMA DI
;
; MICROCONTROLLORE PIC 16F877A
; A.S. 2013-2014
; IST. SUP. " S. D'ARZO "
; LINGUAGGIO DI PROGRAMMAZIONE : ASSEMBLER
; NOME SORGENTE : prog_vac.asm
; **********************************************************************ROMEI*****
;DEFINIZIONE DEI PIN DEL MICROCONTROLLORE
;
; INGRESSI
; RB0 : pulsante P1
; RB1 : pulsante P2
; RB2 : pulsante P3
; USCITE
; RB5 : uscita led DL1
; RB6 : uscita led DL2
; RB7 : uscita led DL3
;
; N.B. TRA PARENTESI SONO INDICATI I PIN DEL PACKAGING DIP DEL uC
;
;
#INCLUDE "p16F877A.inc"
LIST P=16F877A, F=INHX8M
__CONFIG 0X3F3A
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
BSF STATUS,5 ;passo al banco 1
BCF STATUS,6;
MOVLW 0x1F ;definisco I/O sulla PORTB
MOVWF TRISB;
;
BCF STATUS,5 ; passo al banco 0
BCF PORTB,5 ; azzero le uscite
BCF PORTB,6;
BCF PORTB,7;
;
MAIN:
BTFSC PORTB,0 ;controllo se è premuto P1
GOTO Pulsante1;
BTFSC PORTB,1 ;controllo se è premuto P2
GOTO Pulsante2;
BTFSC PORTB,2 ;controllo se è premuto P3
GOTO Pulsante3;
GOTO MAIN;
Pulsante1: ;subroutine che gestisce il pulsante 1
BTFSC PORTB,2 ; è premuto anche P3
GOTO Pulsanti13 ;
BCF PORTB,5 ;spengo il DL1
BSF PORTB,6 ;accendo il DL2
BCF PORTB,7 ;spengo il DL3
GOTO MAIN;
Pulsante2: ;subroutine che gestisce il pulsante 2
BSF PORTB,5 ;accendo il DL1
BCF PORTB,6 ;spengo il DL2
BSF PORTB,7 ;accendo il DL3
GOTO MAIN;
Pulsante3: ;subroutine che gestisce il pulsante 3
BTFSC PORTB,0 ; è premuto anche P3
GOTO Pulsanti13 ;
BSF PORTB,5 ;accendo il DL1
BSF PORTB,6 ;accendo il DL2
BSF PORTB,7 ;accendo il DL3
GOTO MAIN;
Pulsanti13: ;subroutine che gestisce il pulsante 1+3
BCF PORTB,5 ;accendo il DL1
BCF PORTB,6 ;accendo il DL2
BCF PORTB,7 ;accendo il DL3
GOTO MAIN;
END ;ISTRUZIONE CHE INDICA AL COMPILATORE CHE E' FINITO
Consegna:
1- se premi P1 si accende il led 2
2- se premi P2 si accendono i led 1 e 3
3- se premi P3 si accendono i led 1, 2 e 3
se premo P1+P3 si spengono tutti i led
Mi dite dove sbaglio perfavore? io proprio non riesco a capire......