Al recibir un comando por RS232 debo encender 3 pines, uno de esos 3 es siempre B5 o A5, pero estos no se encienden en ningun caso.
Aquí el código:
#include <18F2550.h>
#include <stdlib.h>
#use delay(internal=4000000)
#fuses INTRC_IO, NOWDT, PUT, BROWNOUT, MCLR, NOLVP
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, STREAM=XBEE, parity=N, bits=8)
#define CL 17
//variables
int16 sum = 0, chs = 0;
int1 newcommand = 0;
int16 k = 0, pic = 0, picsaved = 0;
int16 op1 = 0, op2 = 0, op3 = 0, op4 = 0;
char p, command[CL] = "", term[2] = "";
//interrupcion por usart del pic
#INT_RDA
void usart_modem(void)
{
p = fgetc(XBEE);
if(p == '#') {
newcommand = 1;
command[k] = '\0';
k = 0;
}else if(p){
command[k] = p;
k++;
}
}
//verifica si el comando recibido es válido
int1 is_valid(){
sum = pic+op1+op2+op3+op4;
if(sum == chs){
return 1;
}else{
return 0;
}
}
/********* Programa Principal *********/
void main(void)
{
enable_interrupts(INT_TIMER1);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
while(TRUE)
{
if(newcommand){
newcommand = 0;
picsaved = 127;
strcpy(term, "|");
pic = atoi(strtok(command, term));
op1 = atoi(strtok(0, term));
op2 = atoi(strtok(0, term));
op3 = atoi(strtok(0, term));
op4 = atoi(strtok(0, term));
chs = atoi(strtok(0, term));
if(is_valid())
{
if(pic == picsaved)
{
if(op1 == 1){
output_bit(PIN_B5, 1);
output_bit(PIN_B4, 1);
output_bit(PIN_C2, 1);
}else{
output_bit(PIN_B5, 0);
output_bit(PIN_B4, 0);
output_bit(PIN_C2, 0);
}
if(op2 == 1){
output_bit(PIN_B5, 1);
output_bit(PIN_B2, 1);
output_bit(PIN_C1, 1);
}else{
output_bit(PIN_B5, 0);
output_bit(PIN_B2, 0);
output_bit(PIN_C1, 0);
}
if(op3 == 1){
output_bit(PIN_A5, 1);
output_bit(PIN_B1, 1);
output_bit(PIN_A2, 1);
}else{
output_bit(PIN_A5, 0);
output_bit(PIN_B1, 0);
output_bit(PIN_A2, 0);
}
if(op4 == 1){
output_bit(PIN_A5, 1);
output_bit(PIN_B0, 1);
output_bit(PIN_A1, 1);
}else{
output_bit(PIN_A5, 0);
output_bit(PIN_B0, 0);
output_bit(PIN_A1, 0);
}
printf("EQUA");
}
}
}
}
}