PERFECTO. He modificado un poco la configuracion que me dice KILLERJC porque el LCD esta puesto en el puerto C. He encendido tambien un led con un pulsador.
Y como también dice Joseph90 he modificado primero el fichero LCD.c. Ha quedado así:
#define LCD_ENABLE_PIN PIN_C0
#define LCD_RS_PIN PIN_C1
#define LCD_RW_PIN PIN_C2
#define LCD_DATA4 PIN_C4
#define LCD_DATA5 PIN_C5
#define LCD_DATA6 PIN_C6
#define LCD_DATA7 PIN_C7
Muchas gracias a KILLERJC y a Joseph90, y a todo el foro.
El programa en c ha quedado de la siguiente manera:
#include <16f876.h>
#fuses XT,NOWDT
#use delay(clock=4000000)
/////////////////////////////////////////////////////////
//Configuramos el puerto B para el led y el pulsador
#BYTE TRISB = 0X86
#BYTE PORTB = 0X06
//////////////////////////////////////////////////////////
#define LCD_ENABLE_PIN PIN_C0
#define LCD_RS_PIN PIN_C1
#define LCD_RW_PIN PIN_C2
#define LCD_DATA4 PIN_C4
#define LCD_DATA5 PIN_C5
#define LCD_DATA6 PIN_C6
#define LCD_DATA7 PIN_C7
#include <lcd.c>
Int16 TFB; // Tiempo flanco de bajada
float AP; // Valor final del ancho de pulso
int1 nuevopulso=0; // Entra otro pulso
int1 cambio=0; //Cambio de flanco de disparo
#int_ext
void funcion_ext_int(){ //Función Interrupción
if(cambio==0){ // Flanco de Subida
set_timer1(0); //Inicializa TMR1
ext_int_edge(0,H_TO_L); // Configurar para flanco bajada
cambio=1; // Control de cambio de flanco
} else { // Flanco de Bajada
TFB=get_timer1(); //Valor del Timer1 para el Flanco de bajada
ext_int_edge(0,L_TO_H); //Configurar para flanco subida
cambio=0; //Control de cambio de flanco
if(nuevopulso==0){ //Fin de pulso...
nuevopulso=1; //Pulso a calcular
}
}
}
void main() {
lcd_init();
setup_timer_1(T1_INTERNAL | T1_DIV_BY_1); // Configuración TIMER1
ext_int_edge(0,L_TO_H); // Configurar para flanco subida
cambio = 0; // Control de cambio de flanco
enable_interrupts(int_ext); //Habilitación interrupción RB0
enable_interrupts(global); //Habilitación general
do {
//////////////////////////////////////////////////////////////////
bit_set (TRISB , 3); // B3 como entrada, para el pulsador
bit_clear(TRISB , 2); // B2 como salida, para el led
if( bit_test(PORTB,3) ==1) bit_set(portb,2);// Si pulsamos el led-on
if( bit_test(PORTB,3) ==0) bit_clear(portb,2);// Si no pulsamos el led-off
/////////////////////////////////////////////////////////////////
if(nuevopulso==1){ // ¿Pulso nuevo?
AP = TFB*1.0; // Ancho de pulso en microsegundos de Timer1…
// a 4MHZ el T=1us*Timer1
printf(lcd_putc,"\nPulso = %6.1fuS ", AP); //Visualiza medida en LCD
nuevopulso=0; //Pulso medido
}
} while (TRUE); //Bucle Infinito
}