Bueno, como el tema ya lo expuse en este subforo (ya pedi disculpas por ello), voy a continuar con el en su lugar de origen ( no quiero liar mas la madeja).
En cuanto al compilador que utilizo es efectivamente de CCS.
Adjunto 2 ficheros, que son 2 programas que hacen lo mismo, uno con una comunicación serie asíncrona y el otro con una LCD. El de la comunicación serie asincrona funciona perfectamente (rpm) y en el de la LCD (rpmlcd) no compila. La conexion que realizo con la LCD es la que trae la PICDEM-2 demo board.
Bueno, como no hay suficiente espacio...los pego. Este es el rpmlcd:
#include "16F876.h"
#device PIC16f876 ADC=10
#use delay (clock=4000000)
#include <LCD.c>
#fuses HS,NOWDT,PUT,BROWNOUT,NOLVP,NOPROTECT,NOCPD,NOWRT
#byte PORTA=0x05
#byte PORTB=0X06
#byte PORTC=0x07
static int cont=0;
long int pto=0,pulse=0;
main()
{
set_tris_A(0b001010);
set_tris_B(0b11000000);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
setup_adc_ports(A_ANALOG_RA3_REF);
setup_adc(ADC_CLOCK_INTERNAL);
SET_ADC_CHANNEL(1);
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("r.p.m.:");
INICIO:
portb=(0b00000001);
pulse=0;cont=0;pto=0;
set_timer1(3036);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
while(cont<10)
{
output_low(PIN_B1);
while((pto<160)&&(cont<10))
{delay_us(5);
pto=read_adc();
}
printf("
pto=%ld",pto);
output_high(PIN_B1);
while((pto>=155)&&(cont<10))
{
delay_us(5);
pto=read_adc();
}
pulse++;
}
pulse--;
pulse=pulse*12;
lcd_gotoxy(1,2);
printf(lcd_putc,"%ld",pulse);
setup_timer_1(T1_DISABLED);
goto inicio;
}
#INT_TIMER1
interrupcion_timer1()
{
setup_timer_1(T1_DISABLED);
cont++;
set_timer1(3036);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
}