Ahora que parece que ya termine con el MC145026 (no probado) y que parece que tiene buena pinta.
Vamos a empecar con el MC145027 que es el decoder, aqui dejo el codigo que he hecho, haver si alguien se lo puede mirar y opinan sobre ello, ya que no se si el array lo tengo bien hecho o no ustedes que creen???
Muchas gracias.
#include <16f870.h>
#device adc=8
#FUSES NOWDT, XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
#USE FAST_IO (A)
#USE FAST_IO (B)
#USE FAST_IO (C)
//ROGRAMA PER EMULAR PROTOCOL MC145027
/////////////////////////////
////////////////////////////
// Definició de Pins
//////////////////////////
/////////////////////////
// ***** IN-CIRCUIT SERIAL PROGRAMING ***** //
// PGM ==> PIN_B3 (24)
// PGC ==> PIN_B6 (26)
// PGD ==> PIN_B7 (28)
// VDD ==> (20)
// VSS ==> (8,19)
////////////////////
//***VARIABLES***//
//////////////////
int bit = 0; //esto es para guardar los tiempos de los bits en el array.
int num = 0; //para guardar la palabra (primera o segunda).
int digit=0; //para guardar los bits en el digito correspondiente.
/////////////////
//***ARRAYS***//
///////////////
long paraula[2][2][9]; //array para guardar los 2 tiempos de cada DT o digito
//iremos incrementando las variables para que cada vez se
//vaya guardando en las siguientes posiciones:
//(0,0,0)-(0,1,0)-(0,0,1)-(0,1,1)-(0,0,2)-(0,1,2)-(0,0,3)etc...
//DECLARACIO DE FUNCIONS
void guardar(void); //almacenar las dos palabras en un array
void comparar(void); //compara las dos palabras guardadas anteriormente
//////DEFINICIO DE PINS////
#DEFINE envia_codi PIN_C6 //port per enviar el codi
#define rebre PIN_C3 //Pulsador para enviar los datos
//DEFINICO D'INTERRUPCIONS//
void main()
{
set_tris_a (0b00000000); //todas los puertos como salidas
set_tris_b (0b00000000); //todas los puertos como salidas
set_tris_c (0b00001000); //todas los puertos como salidas menos
//el pin C3 como entrada
setup_psp(PSP_DISABLED);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
//habilitacio d'interrupcions//
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_INTERNAL | T1_DIV_BY_1); //configuramos el timer1 con el prescaler a 1
//asi cuenta de 1us en 1us
setup_timer_2(T2_DISABLED,0,1);
enable_interrupts (int_timer1); //habilitamos el timer1
enable_interrupts (global);
while(1)
{
guardar();
comparar();
}
}
void guardar()
{ for ( ; !input(rebre); ); //Esperamos el inicio del pulso (flanco subida)
set_timer1(0); //Cuando llegue se pone a cero el Timer1
for ( ; input(rebre); ); //Esperamos al final del pulso (flanco de bajada)
paraula[num][bit][digit]= get_timer1();//Capturamos el intervalo de tiempo que tarda
//en hacer el cambio y lo guardamos en 0,0,0, quando
++bit; //passamos por aqui aumentamos en 1 "bit" y la segunda vez que pase por arriba
//lo guardará en 0,1,0. Quando vuelva a pasar por ++bit lo incrementara y bit será=2.
if (bit<=2);//esto se cumplira y como bit será =2
{
bit=0; //pondremos bit a 0
++digit; //y aumentaremos digit en 1, porque al volver a empezar la seqüencia lo guarde en 0,0,1.
if(digit<=9);
{
digit=0;
++num;
if(num<=2)num=0;
}
}
}
void comparar()
{
}