; Assembly PIC18 - Versione 0.3 - Aprile 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/subroutines.htm ; Riferimento: fogli tecnici del PIC18F2XK20/4XK20 ; Uso di subroutines e stack - Seconda versone ; PIC18F26K20 / MPLAB X 3.26 / MPASM v5.66 #include "p18f26k20.inc" ; il file con la definizine dei registri specifici del PIC in uso AccesData UDATA_ACS WREG_TEMP res 1 ; Copia temporanea di WREG, usata da STATUS_TEMP res 1 ; Copia temporanea dei flags di stato, usata da ;BSR_TEMP res 1 ; Copia temporanea di BSR CODE 0x0000 ; vettore di reset, indirizzo 0. Il codice inizia qui clrf TRISC ; imposta PORTC come uscita (azzera TRISC) - Paragrafo 10.4 clrf LATC ; tutti i LED spenti (azzera LATC)- Paragrafo 10.4 ciclo btg LATC, RC0 ; Toggle RC0 call ritardo_lungo ; attendi circa 300 ms (@ 1 MHz) bra ciclo ; ciclo infinito ; ***************************************************************************** ritardo_breve ; introduce un ritardo di circa 3 ms (@ 1 MHz) movff WREG, WREG_TEMP ; salva il registro W nella variabile "temporanea" movff STATUS, STATUS_TEMP ; salva i flag nella variabile "temporanea" ; movff BSR, BSR_TEMP ; salva il registro BSR (inutile, in questo caso. Perché?) clrf WREG ; azzera il registro W ripeti decfsz WREG ; decrementa il registro W e salta l'istruzione seguente ; quanto W=0 bra ripeti ; ripeti movff STATUS_TEMP, STATUS ; ripristina i flags movff WREG_TEMP, WREG ; ripristina il registro W ; movff BSR_TEMP, BSR ; ripristina il registro BSR return ; torna all'istruzione dopo la "call ritardo_breve" ; ***************************************************************************** ritardo_lungo ; introduce un ritardo di circa 300 ms (@ 1 MHz) movlw .100 ; carica 100 in WREG ripeti2 call ritardo_breve ; introduce un ritardo di circa 3 ms decfsz WREG ; ripeti per 100 volte bra ripeti2 return ; torna all'istruzione dopo la "call ritardo_lungo" ; ***************************************************************************** END ; Fine del file