Hola chicos que tal!! estoy con un programa en el que tengo un atasco
Bueno el programa obtiene una cadena enviada por rs232 que va de 0-255, el problema es que viene en este formato con un decimal y lo he tenido que suprimir, después lo manda de nuevo por 232 al PC para poder saber cual es valor del trama, esto lo reconozco bien! pero tambien me llega por el mismo canal otras tramas: A, B, C, D, .... y si llega, por ejemplo A encienda un led y si llega B lo apague.
Tal y como está el programa me aparece esto tal cual por el terminal rs232:
la cosa es que si cambio dentro del
printf el
%s (de y)por
%u o
%c me entrega solo
50 o
1F por el terminal, entre el valor que sea por rs232 (A-F). Lo suyo es poder transformar la variable
y o
string en el código ascii de A,B,C,D,.... para asi poder compararlo dentro del if pero no se como hacerlo!!!
Aquí dejo el programa completo:
#include <18F25K20.h>
#include <stdlib.h>
//////////////////////////////////////////////////////////////////////
// CONFIGURACION DEL PIC //
//////////////////////////////////////////////////////////////////////
#FUSES hs // High speed Osc (> 4mhz for PCM/PCH) (>10mhz
// for PCD)
#FUSES MCLR // Master Clear pin enabled
#FUSES NOBROWNOUT // No brownout reset
#FUSES NOCPD // No EE protection
#FUSES NOPUT // No Power Up Timer
#FUSES NOPROTECT // Code not protected from reading
#FUSES NOWDT // No Watch Dog Timer
#USE delay(clock=16000000) // Frecuencia de 4Mhz
#USE standard_io(B)
#USE standard_io(C) // Configuramos el PORTB
#DEFINE Retardo 500 // Definimos 500 como "Retardo"
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
//////////////////////////////////////////////////////////////////////
// CUERPO PRINCIAPAL FIRMWARE //
//////////////////////////////////////////////////////////////////////
int string;
int x,y;
#int_rda
void serial_isr(){
y=string;
}
void main(){
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
while(1){
if(y=='A'){
output_high(PIN_B0);
}
if(y=='B'){
output_low(PIN_B0);
}
} //...infinito
}