contador TMR1. Ayuda con el codigo

#1
No encuentro el error en un programa tan sencillo como el que esta a continuacion:

#include <htc.h>
#include <pic.h>
#include "lcd.h"
#include "delay.h"
#include "stdio.h"
#include "stdlib.h"

__CONFIG(XT & WDTDIS & PWRTDIS & LVPDIS & DEBUGDIS & UNPROTECT );

void mostrar_int(int val);
void retardo(int n);

bit banderasssTMR1=0;
int aux=0;

void main(){
GIE=1;
T1CON=0;
TMR1H=0;
TMR1L=0;
TMR1ON=1;
TMR1IE=1;
TMR1IF=1;

lcd_init();
lcd_goto(0x00);

while(1){
if(banderasssTMR1==1){
banderasssTMR1=0;
lcd_goto(0x00);
mostrar_int(45);
}
//lcd_goto(0x00);
//mostrar_int(TMR1H);
}
}

void retardo(int n){
for(int i=0;i<=n;i++){
DelayMs(100);
}
}

void mostrar_int(int val){
int n=5;
if(val<10)n=1;
else if(val<100)n=2;
else if(val<1000)n=3;
else if(val<10000)n=4;
else if(val<100000)n=5;

char buf[10];
int base=10;
itoa(buf,val,base);
for(int i=0; i<n;i++){
lcd_putch(buf);
}
}

void interrupt ISR(void){
if(TMR1IF==1){
TMR1IF=0;
banderasssTMR1=1;
}
}





simplemente corro el programa y no hace nada :(
 
#2
Hola, que compilador estas usando, pero mas alla de eso en esta parte

if(val<10)n=1;
else if(val<100)n=2;
else if(val<1000)n=3;
else if(val<10000)n=4;
else if(val<100000)n=5;

si por ejemplo val=50 siempre va a ser menor que 100, 1000, 10000 etc, cual eligue el programa
 
#3
ricber gracias por el interes en ayudarme, pero ya encontre el error del programa, simplemente me faltaba colocar PEIE=1 que es un bit del registro INTCON del pic 16f877a para habilitar las interrupciones de los perifericos.

Por otro lado atendiendo su pregunta el programa elegira n=2 para ingresar esto en el for de manera que cuando se utilize la funcion puts de la libreria lcd.c no salgan simbolos raros como me ocurrio una vez.

se me olvido decirle que el compilador que estoy utilizando es HI-TECH en mplab
 
Última edición:

Temas similares

Arriba