Gracias por el aporte pero estuve viendo el código, el cual tiene errores y algunos detalles.
El error más grave es declarar una variable de 8 bits (int) y usarla como una variable de 16 bits.
La declaración
int en PIC C Compiler es igual a
int8 y es de 8 bits.
El segundo error no tan grave es incluir una ruta de archivo que únicamente se encuentra en tu PC:
#include "D:\Proyectos\Contador Vueltas\Programa v1.1-Economica\Contador_Vueltas_v1.1.h"
Si el archivo "Contador_Vueltas_v1.1.h" se encuentra en la carpeta del proyecto, basta con incluirlo sin ruta:
#include "Contador_Vueltas_v1.1.h"
El tercer error es algo grave y está en la palabra de configuración.
Siempre les he dicho que un PIC de este tipo tiene una configuración especial, que si no se establece bien, el microcontrolador no funcionará correctamente.
Todo lo que se encuentra en el archivo "Contador_Vueltas_v1.1.h" no sirve para usar una frecuencia de reloj con cristal de 20 MHz.
Tampoco sirve configurar el ADC a 8 bits porque ese es el valor por defecto, aparte de que no se está usando el conversor AD.
También tiene declarado el uso de RS-232 por software que tampoco se está usando.
Si declaras lo siguiente en la cabecera del programa, te evitas todo el código inservible en ella:
C:
#include <18F2550.h>
#fuses NOFCMEN, NOIESO, NOVREGEN
#use delay(CRYSTAL = 20 MHz)
Los varios detalles en el programa:
#use fast_io(B) No tiene sentido su uso en tu programa.
ext_isr() debe precederse con
void
Así:
void ext_isr (
void) y el segundo void es opcional porque en este caso es un servicio de interrupción y no tiene parámetros.
vueltas=vueltas+1; Es del lenguaje Basic y en C es más cómodo así:
vueltas += 1;
set_tris_B(0x01); Resulta irrelevante porque por defecto todos los pines son entradas.
port_b_pullups(TRUE); No tiene sentido usarlo porque únicamente tienes a RB0 como entrada y RB6 y RB7 como salidas.
Aparte, ya estás colocando una resistencia pull-up en RB0 que está en el colector del transistor.
Esta parte de código para hacer parpadear un LED, la puedes hacer con uno de los timers del microcontrolador:
C:
if(aux==1000)
{
output_toggle(pin_B6);
aux=0;
}
else aux++;
Aquí es precisamente donde comparas 1000 con una variable de 8 bits que nada más sirve hasta 255.
Y si también usas la variable "vueltas" para el conteo, se tendrá un límite de 255 vueltas.
Además modifiqué la librería lcd.c para trabajar con los puertos A y C
No es necesario modificar la librería lcd.c nativa porque con unos cuantos agregados antes de incluirla, se logra que funcione con los pines que uno quiera.
En el caso de tu programa y que
no incluiste la librería que modificaste, quedaría así:
C:
#define LCD_ENABLE_PIN PIN_A0
#define LCD_RS_PIN PIN_A1
#define LCD_RW_PIN PIN_A2
#define LCD_DATA4 PIN_A3
#define LCD_DATA5 PIN_A4
#define LCD_DATA6 PIN_A5
#define LCD_DATA7 PIN_C0
#include <lcd.c>
Con el agregado de esas definiciones ya no es necesario modificar la librería.
Podría ser que en tu caso la tengas que modificar porque estás usando una versión muy antigua de PIC C Compiler (v4.104) y no recuerdo si en esa versión aún no se realizan mejoras en la librería lcd.c
Bueno, como dijo
Cortana: Como introducción, creo que ya es suficiente.
Saludos y a seguir estudiando.