; Assembly PIC18 - Versione 0.1a - Maggio 2016 ; Copyright (c) 2016, Vincenzo Villa ; Creative Commons | Attribuzione - Condividi allo stesso modo 4.0 Internazionale (CC BY-SA 4.0) ; Creative Commons | Attribution-Share Alike 4.0 Unported ; https://www.vincenzov.net/tutorial/PIC18/Assembly/interrupt.htm ; PIC18F26K20 / MPLAB X 3.30 / MPASM v5.67 #include "p18f26k20.inc" ; RES_VECT CODE 0x0000 ; Vettore di Reset bra Inizio ; Va ll'inizio del programma ; Routine per la gestione delle interruzioni (Interrupt Service Routine) ISR CODE 0x0008 btfsc INTCON, INT0IF ; Interruzione causata da INT0 ? bra GestioneINT0 ; Esegue il codice corrispondente btfsc INTCON, TMR0IF ; Interruzione da Timer0 ? bra GestioneTimer0 ; btfsc INTCON, RBIF ; Interruzione dal cambiamento di un bit di RB ? bra GestioneRB0 ; ; ... retfie FAST ; Nessuna interrupt riconosciuta... Indizio di un errore? GestioneINT0 rlncf LATC ; "Ruota" i LED bcf INTCON, INT0IF ; Azzera il flag che segnala INT0 retfie FAST ; Torna ad eseguire il codice principale GestioneTimer0 ; Non implementato bcf INTCON, TMR0IF retfie FAST GestioneRB0 ; Non implementato bcf INTCON, RBIF retfie FAST MAIN_PROG CODE Inizio ; Configurazione delle porte di I/O clrf TRISC ; PORTC come uscita, tutti gli 8 pin movlw B'00000001' ; LED0 acceso; LED1-7 spenti movwf LATC movlw 0xFF ; PORTB come ingresso, tutti gli 8 pin movwf TRISB bsf WPUB, INT0 ; Abilita il pull-up interno su INT0 bcf INTCON2, RBPU ; Pull-up attivo su tutti i pin abilitati ; Configirazione delle interrupt bsf INTCON, INT0IE ; Abilito INT0 a generare interruzioni bsf INTCON, GIE ; Abilito la CPU a ricevere interruzioni ; Superloop repeat nop ; non fa nulla (No OPeration), per sempre nop bra repeat END