/*
* File: test_TMR0.c
* Author: miquel-padawan
* Microcontrolador: PIC16F88
* Created on 7 de enero de 2018, 21:43
*/
#include <xc.h>
#define _XTAL_FREQ 4000000 // Indicamos a que frecuencia de reloj esta funcionando el micro
//#define LED PORTAbits.RA0
// PIC16F88 Configuration Bit Settings
// CONFIG1
#pragma config FOSC = XT // Oscillator Selection bits (XT oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = ON // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EE Memory Code Protection bit (Code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off)
#pragma config CCPMX = RB0 // CCP1 Pin Selection bit (CCP1 function on RB0)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
// CONFIG2
#pragma config FCMEN = ON // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor enabled)
#pragma config IESO = ON // Internal External Switchover bit (Internal External Switchover mode enabled)
//unsigned char cuenta; // Declaro una variable "cuenta"
// FUNCION DE INTERRUPCION
void interrupt ISR(void) {
//cuenta++; // Incremento variable
//if(cuenta == 10){ // Comprobamos si la variable "cuenta" ha llegado a 10
PORTAbits.RA0 = PORTAbits.RA0+1;
//LED = LED+1; // Cambiamos el led de estado
//cuenta = 0; // Reiniciamos contador
//}
TMR0 = 0; // Inicializamos TMR0
INTCONbits.TMR0IF = 0; // Limpiamos bandera de desborde
}
// FUNCION PRINCIPAL
void main(void) {
// CONFIGURAMOS PUERTOS
TRISA = 0b00000000; // Puerto A todo salidas
PORTA = 0; // Limpiamos todo el puerto A
// CONFIGURAMOS TMR0 & INTERRUPCION
INTCONbits.TMR0IE = 1; // Habilitamos interrupcion TMR0
OPTION_REGbits.PSA = 0; // Asignamos prescaler al Timer
OPTION_REGbits.PS0 = 1;
OPTION_REGbits.PS1 = 1;
OPTION_REGbits.PS2 = 1; // Usamos prescaler 1:256
OPTION_REGbits.T0CS = 0; // Internal instruction cycle clock (CLKO)
INTCONbits.TMR0IF = 0; // Limpiamos bandera de desborde
INTCONbits.GIE = 1; // Habilitamos interrupcion global
TMR0 = 0; // Inicializamos el timer a 0
while (1); // Bucle infinito
}