TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: avumadden en 25 de Febrero de 2015, 21:47:21
-
Hola me gustaría saber si alguien ayuda a utilizar esta función. He intentado muchos métodos y no puedo encontrar una solución.
Estaría muy agradecido si alguien me da un ejemplo.
Pretendo comparar la línea de texto introducida con el valor de una variable y después realizar cualquier sentencia cuando esta se cumpla.
void UART_Init(const long int baudrate){
unsigned int br;
br = (_XTAL_FREQ/(16*baudrate))-1;
TX1STAbits.TXEN = 1;
TX1STAbits.BRGH = 1;
RC1STAbits.SPEN = 1;
RC1STAbits.CREN = 1;
// configure I/O pins
ANSELCbits.ANSC5 = 0;
TRISCbits.TRISC5 = 1;
TRISCbits.TRISC4 = 1;
SP1BRGL = br;
PIE1bits.RCIE = 1;
}
/****Reception Functions****/
char UART_Data_Ready(){
return PIR1bits.RCIF;
}
char UART_Read(){
while(!PIR1bits.RCIF);
return RCREG;
}
void UART_Read_Text(char *Output, unsigned int length){
unsigned int i;
for(int i=0;i<length;i++)
Output[i] = UART_Read();
Gracias :), Espero puedan ayudarme.
-
UART_Init(baudrate)
Configura el UART a el baudrate que le pones Ejemplo : UART_Init(9600);
Tambien configura los pines para eso, si te fijas usa el puerto C
UART_Data_Ready()
Indica si se recibio algun dato.. si se recibio un dato esa fucnion te devuelve un 1..
uint8_t recibido = UART_Data_Ready();
o podes ponerlo en un if
if (UART_Data_Ready()) { //Aca hago algo }
UART_Read() devuelve el valor que llego.. es de notar que si no existe nada, la funcion se queda esperando que llegue algo ( por lo que si no llega nada se queda colgado ahi )
Ej: Recibi una "A", entonces en la variable recibido se alamcenaria esa "A"
char recibido = UART_Read()
UART_Read_Text(char *Output, unsigned int length)
Es para recibir todo un string, a comparacion del anterior que era una sola letra, ahi especificas el vector donde lo guardas y el largo del string que esperas. Es de notar que usa la anterior funcion por lo tanto si pones que reciba 20 caracteres y envias 10, se va a quedar esperando mas.
char recibido[10]
UART_Read_Text(recibido, 10);
o
UART_Read_Text(&recibido[0], 10);
De todas formas esto es muy simple tanto en la programacion C como en lo que es respecto a la UART ( flag de interrupcion / registros ) y si lo copiaste y pegaste pueda que los registros no sean los mismos o tengas que configurar otras cosas en UART_Init()
-
UART_Read_Text(char *Output, unsigned int length)
Es para recibir todo un string, a comparacion del anterior que era una sola letra, ahi especificas el vector donde lo guardas y el largo del string que esperas. Es de notar que usa la anterior funcion por lo tanto si pones que reciba 20 caracteres y envias 10, se va a quedar esperando mas.
char recibido[10]
UART_Read_Text(recibido, 10);
o
UART_Read_Text(&recibido[0], 10);
Muchas gracias amigo, otra duda: para comparar una string ya definida con la de entrada, cómo podría hacerla citando "char recibido[10]" como la variable de entrada a comparar?
char recibido[10];
char compara[10]={"1234567890"};
-Cuerpo del programa-
void UART_Text_Read(compara, 10);
if(compara[10] == recibido[10]){
-Haz algo-
}
No se si sea correcto el uso de los arrays de esa manera, ya que casi no tengo experiencia con ellos.
Muchas gracias de antemano KILLERJC
-
char recibido[10];
char compara[10]="1234567890";
-Cuerpo del programa-
UART_Text_Read(recibido, 10);
//Aqui lo que llego se guarda en "recibido" luego lo comparas... un string son varios caracteres, o usas strcmp() de stdio.h o te haces tu propia funcion
if(ComparaString(compara,recibido,10)){
-Haz algo-
}
Este seria masomenos el codigo del comparar ( lo hice al aire peude que tenga errores )
int ComparaString(char *Array1,char *Array2, uint8_t largo)
{
for(i=0;i<largo;i++)
{
if(Array1[i]!=Array2[i]) { return 0; }
}
return 1
}
Basicamente ese codigo pasa por cada una de las letras y las compara, de encontrar una diferencia directamente retorna un 0.