Necesito enviar números enteros desde mi placa de microcontrolador ( PIC16F877
) a la PC. Estoy usando MAX232
para esto. Necesito usar un código similar a este (codificado usando mikroc 8.2) .
Tenga en cuenta que esto no es correcto (en realidad, la línea Usart_Write(count);
no funcionará según lo previsto ). Pero mostrará lo que estoy tratando de hacer.
#define BAUD_RATE 57600
#define DELAY 500
int count;
void interrupt(){
if(INTCON.INTF == 1 ){
count++;
INTCON.INTF = 0;
}
}
void setup(){
INTCON = 0x90;
TRISB = 0x01;
Usart_Init(BAUD_RATE);
count = 0;
}
void main() {
setup();
while(1){
Usart_Write('>');
Usart_Write(count);
Usart_Write('<');
count = 0;
delay_ms(DELAY);
}
}
La aplicación es sencilla. La variable counter
se incrementa con PORTB0
la interrupción y counter
se necesita enviar el valor a PC
.
¿Puede alguien mostrarme una forma correcta (y simple) de hacer esto?
Según tengo entendido, su problema es cómo imprimir una secuencia de caracteres ASCII que representan un número entero.
Ya tiene una función que puede imprimir un carácter, por lo que desea algo como lo siguiente:
char buf[16];
char *p;
sprintf(buf, "%d", count);
p = buf;
while(*p)
Usart_Write(*p++);
Si no tiene sprintf()
en su biblioteca C, intente itoa()
.
(Nota para los pedantes, snprintf()
es más seguro, pero no universalmente compatible)
Siempre que necesite verificar si algo funciona o no, intente concentrarse en sus partes específicas. Al igual que en este código, no perderá un mayor valor de conteo: -
void main() {
setup();
while(1){
if(count)
{
Usart_Write('>');
Usart_Write(count); //Your syntax is correct
Usart_Write('<');
count = 0;
}
delay_ms(DELAY);
}
}
¿Por qué no envías bytes de enteros?
char *p =(char*)&count;
send(*p);p++;
send(*p);p++;
send(*p);p++;
send(*p);
y, por otro lado, puede recopilar bytes y formar un número entero, esto probablemente sea más rápido que convertirlo en una matriz de caracteres.
Saludos, Luka
Oli Glaser
chwi
Anubis
count
cada vez que reciba una señal. Pero leo elcount
valor a intervalos fijos y envío los valores a la PC. Entonces, por supuesto, debo reiniciar el contador. Puede haber una mejor manera de lograr esto, pero este método no está mal. El problema es que no sé cómo enviar el valor entero a través de USART...Oli Glaser