El código presentado está diseñado para configurar y manejar el temporizador TMR0 en un microcontrolador PIC18F4620. Se detalla la configuración de varios parámetros del microcontrolador, incluyendo el oscilador interno, el temporizador de encendido y diferentes opciones de configuración como la protección de memoria y la configuración de puertos.
LIST P=18F4620; PIC
INCLUDE ;LIBRERIA DEL REGISTRO
CONFIG OSC = INTIO67; OSCILADOR INTERNO
CONFIG FCMEN = OFF ;FAIL-SAFE CLOCK
CONFIG IESO = OFF;OSCILADOR SWITCH
CONFIG PWRT = ON;POWER UP TIMER
CONFIG BOREN = OFF
CONFIG BORV = 3
CONFIG WDT = OFF
CONFIG WDTPS = 1
CONFIG CCP2MX = PORTBE
CONFIG PBADEN = OFF
CONFIG LPT1OSC = OFF
CONFIG MCLRE = OFF
CONFIG STVREN = OFF
CONFIG LVP = OFF
CONFIG XINST = OFF
CONFIG CP0=OFF, CP1=OFF, CP2=OFF, CP3=OFF
CONFIG CPB = OFF
CONFIG CPD = OFF
CONFIG WRT0=OFF, WRT1=OFF, WRT2=OFF, WRT3=OFF
CONFIG WRTC = OFF
CONFIG WRTB = OFF
CONFIG WRTD = OFF
CONFIG EBTR0 = OFF
CONFIG EBTR1 = OFF
CONFIG EBTR2 = OFF
CONFIG EBTR3 = OFF
CONFIG EBTRB = OFF
CBLOCK 0X100
ENDC
ORG 0X00
X EQU 0x20
Y EQU 0x21
CONTADOR EQU 0x22
BEGIN
CALL _ALLDIGITAL
CALL _OSCILADOR
CALL _TRIS
REPEAT
CALL _TMRO2
MOVF CONTADOR,W
MOVWF PORTB
GOTO REPEAT
;******************************OSCILADOR INTERNO***********************************
_OSCILADOR
MOVLW B'0001111'
MOVWF BSR
BCF OSCCON,IDLEN
BSF OSCCON,IRCF2
BSF OSCCON,IRCF1
BCF OSCCON,IRCF0
BCF OSCCON,SCS1
BCF OSCCON,SCS0
BCF OSCTUNE,INTSRC
BCF OSCTUNE,PLLEN
BCF OSCTUNE,TUN4
BCF OSCTUNE,TUN3
BCF OSCTUNE,TUN2
BCF OSCTUNE,TUN1
BCF OSCTUNE,TUN0
RETURN
;*******************************TODO DIGITAL******************************************
_ALLDIGITAL
MOVLW B'00001111'
MOVWF BSR
BCF ADCON0,ADON
BSF ADCON1,PCFG3
BSF ADCON1,PCFG2
BSF ADCON1,PCFG1
BSF ADCON1,PCFG0
BSF CMCON,CM2
BSF CMCON,CM1
BSF CMCON,CM0
BCF CVRCON,CVREN
RETURN
;***************************PUERTOS*****************************************************
_TRIS
MOVLW B'00001111'
MOVWF BSR
MOVLW B'00000000'
MOVWF TRISA
MOVLW B'00000000'
MOVWF TRISB
MOVLW B'11111111'
MOVWF TRISC
MOVLW B'00000000'
MOVWF TRISD
MOVLW B'00000000'
MOVWF TRISE
RETURN
;************************TMR0 PRUEBA TAREA**********************************
_TMRO2
MOVLW B'00001111'
MOVWF BSR
BSF T0CON,TMR0ON
BCF T0CON,T08BIT
BCF T0CON,T0CS
BCF T0CON,T0SE
BCF T0CON,PSA
BCF T0CON,T0PS2
BSF T0CON,T0PS1
BSF T0CON,T0PS0
BTFSS INTCON,TMR0IF
GOTO _NO_7
GOTO _SI_7
_NO_7
RETURN
_SI_7
BCF INTCON,TMR0IF ;LIMPIA BANDERA
INCF CONTADOR
MOVLW .64
CPFSEQ CONTADOR,W
RETURN
CLRF CONTADOR
RETURN
ENDa
Conclusión
Al poner el microcontrolador en el modo de reposo se apaga el oscilador de reloj. No puede ocurrir el desbordamiento ya que no hay pulsos a contar. Es la razón por la que la interrupción por el desbordamiento del TMR0 no puede“despertar” al procesador del modo de reposo.
Capturas e implementación
Visto Bueno
Introducción
En este mapa se explica sobre un temporizador TMR0 con el pic18F4620 (implementado), configurando el registro T0CON del microcontrolador como un oscilador interno realizando retardos en un contador binario cada segundo.
Contenido
El temporizador Timer0 tiene una amplia gama de aplicaciones en la práctica. Sólo unos pocos programas no lo utilizan de alguna forma. Es muy conveniente y fácil de utilizar en programas o subrutinas para generar pulsos de duración arbitraria, en medir tiempo o en contar los pulsos externos (eventos) casi sin limitaciones. El módulo del temporizador Timer0 es un temporizador/contador de 8 bits con las siguientes características:
Temporizador/contador de 8 bits;
Pre-escalador de 8 bits (lo comparte con el temporizador perro guardián);
Fuente de reloj interna o externa programable;
Generación de interrupción por desbordamiento; y
Selección del flanco de reloj externo programable.