; Assembly PIC18 - Versione 0.1 - 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/timer0.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 ; Esegue il codice corrispondente btfsc INTCON, RBIF ; Interruzione dal cambiamento di un bit di RB ? bra GestioneRB0 ; Esegue il codice corrispondente ; ... retfie FAST ; Nessuna interrupt riconosciuta... Indizio di un errore? GestioneINT0 ; Non implementato bcf INTCON, INT0IF retfie FAST GestioneTimer0 ; Interrupt da Timer0 btg LATC, 0 ; Fa lampeggiare il LED bcf INTCON, TMR0IF ; Azzera il flag che segnala l'interrupt generato da Timer0 retfie FAST ; Torna ad eseguire il codice principale 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 bcf T0CON, T08BIT ; Configura Timer0 per funzionare a 16 bit bcf T0CON, T0CS ; Configura il clock di Timer0 interno (250 kHz) bsf T0CON, PSA ; Disattivo il prescaler bsf INTCON, TMR0IE ; Abilito Timer0 a generare interruzioni bsf T0CON, TMR0ON ; "Accendo" Timer0 bsf INTCON, GIE ; Abilito la CPU a ricevere interruzioni ; Superloop repeat nop ; non fa nulla (No OPeration), per sempre nop bra repeat END