hola Flugplatz
La opción que tu me dices no la puedo seleccionar ya que solo me sale Microchip 12 bits. y no me deja seleccionar otra opción, y eso que tengo el software original y he instalado todo el pack completo.
por otro lado, si que tengo puesto el include del PIC que estoy utilizando, en mi caso es el pic16F876 pero cuando me sale el error, precisamente me queda seleccionado:
#device PIC16F876
del archivo 16F876.h y no del mío (en mi código también esta cargado)
Ya empecé el proyecto con el Wizard pero ni así conseguí que me dejara compilar.
Os incluyo el código actual que no me deja compilar y del cual gran parte he de agradecer ha maunix y Marcelo que sin su ayuda aun estaría buscando que includes había de utilizar.
#include <16F876.h> //libreria que carga el pic a utilizar
#device adc=8 //resolución 8 bits para el comversor ADC
#FUSES HS,NOWDT // Fusibles, El Contador Watch Dog esta desabilitado
#include <string.h> //libreria necesaria para trabajar con caracters
#include <stdio.h> //libreria necesaria para trabajar con la UART
#use delay(clock=20000000) //Velocidad del cristal
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
//Prepara la UART para trabajar con el protocolo rs232
///////////////////// ENTRADAS ////////////////////////////////////////////////
#define odometro_A PIN_B0 //la entrada del encoder en el pin RB0
#define odometro_B PIN_B1 //(entrada de interrupción externa)
//////////////////// SALIDAS /////////////////////////////////////////////////
#define salida PIN_B2
//////////////////// VARIABLES GLOBALES y CONSTANTES /////////////////////////
#define freq 50 // resetea el contador cada 50ms 20 veces por segundo
#define delayTMR1us(x) (int16)(65536 - (x * 0.625)) //Para que el compilador
// calcule el solito la constante para cargar en el timer
static signed int16 cuenta;
static short int transmitir;
int sentido=0;
//////////////////// FUNCIONES Y RUTINAS //////////////////////////////////////
#INT_EXT
void ext_isr()
{
if(input(odometro_B)) //la otra entrada del encoder está en RB1
{ cuenta += 1;
sentido = 1; //de acuerdo a su estado se considera la rotación en un sentido
}else{
cuenta += 1;
sentido = 2; //u otro
}
}
#int_TIMER1
void TIMER1_isr(){
set_timer1(delayTMR1us(50000)); //recargar otros 50ms
transmitir = 1; //indicar transmitir
}
#int_TBE
TBE_isr()
{signed int16 numero;
int direccion;
char num[8],ascii;
ascii="A"; //letra que concadenar en la trama
numero=direccion=0; //inicializamos los valores de las variables.
numero=cuenta; //copiamos el valor del contador
direccion=sentido; //almacenamos el sentido de la rueda
cuenta=sentido=0; //inicializamos el contador
if(sentido==1)
{sprintf(num,"%u",numero};
num=strcat (num, "1"); //introducimos el sentido en la trama
num=strcat (ascii, num);
num=strcat (num, ascii);}
else
{if(sentido==2)
{sprintf(num,"%u",numero};
num=strcat (num, "2"); //introducimos el sentido en la trama
num=strcat (ascii, num);
num=strcat (num, ascii);}
}
}
///////////////////// PROGRAMA PRINCIPAL ///////////////////////////////////////
void main(void)
{
setup_adc_ports(NO_ANALOGS); //Puertos desconectados
setup_adc(ADC_OFF);
setup_spi(FALSE);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); //activar el timer1
set_timer1(delayTMR1us(50000));
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); //timers 0 conectado
setup_timer_2(T2_DISABLED,0,1); //Timer 2 desconectado
enable_interrupts(INT_RTCC); //se activan las interrupciones
enable_interrupts(INT_TBE);
enable_interrupts(INT_TIMER0);
enable_interrupts(INT_TIMER1);
ext_int_edge(L_TO_H); //definir el flanco de interrupción
enable_interrupts(INT_EXT);//encender la interrupción
enable_interrupts(GLOBAL);
for(;
//loop infinito
{ext_isr();
TBE_isr();
//aqui se ha de activar la bandera de transmisión
if(transmitir)
{//hacer los procesos de transmisión
//borrar la bandera de transmisión para que no se transmita hasta
//pasados otros 50ms
transmitir = 0; }
}
}
Ahora estoy preparando otro ordenador para instalar tanto el CCS como el proteus ya que en este no acaban de funcionar correctamente y empiezo a sospechar que no todo es culpa mia
sino que este ordenador tiene gran parte de culpa
Saludos
Cris