#include <xc.h>
#pragma config FOSC = HS
#pragma config MCLRE = ON
#pragma config PWRT = ON
#pragma config LVP = OFF
#define _XTAL_FREQ 20000000
void main(void) {
TRISDbits.RD0 = 0;
LATDbits.LATD0 = 0;
while(1){
__delay_ms(500);
LATDbits.LATD0 = !LATDbits.LATD0;
}
}#include <xc.h>
#include <stdbool.h>
#pragma config FOSC = HS
#pragma config MCLRE = ON
#pragma config PWRT = ON
#pragma config LVP = OFF
#define SAMPLING_F 500
#define _XTAL_FREQ 20000000
/*
*
*/
int contador = 1;
bool tmrflag = 0;
void __interrupt() myISR(){
if(INTCONbits.TMR0IF){
//El contador se desborda cad 1ms
INTCONbits.TMR0IF = 0;
contador++;
if(contador == SAMPLING_F){
contador = 1;
tmrflag = 1;
}
}
}
void main(void) {
//OSCCON = 0b01110000;
TRISDbits.RD0 = 0;
LATDbits.LATD0 = 0;
//Prescaller 1:32, 8-bit mode
T0CON = 0b11000100;
//Precarga para 0.9984ms aprox 1ms
TMR0 = 0x64;
INTCONbits.TMR0IF = 0;
INTCONbits.TMR0IE = 1;
INTCONbits.GIE = 1;
INTCONbits.PEIE = 1;
while(1){
if(tmrflag){
LATDbits.LATD0 = !LATDbits.LATD0;
tmrflag = 0;
}
}
}void __interrupt() myISR(){
TMR0 = 0x64; //<<<<<<<<<<<
if(INTCONbits.TMR0IF){
//El contador se desborda cad 1ms
.........
La precarga tenés que repetirla en cada interrupción, sino los siguientes desbordes son cada 1.6msCódigo: [Seleccionar]void __interrupt() myISR(){
TMR0 = 0x64; //<<<<<<<<<<<
if(INTCONbits.TMR0IF){
//El contador se desborda cad 1ms
.........