Como es sabido el uC PIC16F84A no cuenta con USART, sin embargo para controlar un motor de pasos bipolar en posición bidireccional, podemos usar un pequeño artilugio para hacer responder a una interrupcion al PIC, usando el protocolo rs232
bueno el codigo fuente es el siguiente
#include <16F84a.h>
#fuses XT,NOWDT
#use delay (clock=4000000)
//#use fixed_io(b_outputs=pin_b3)
//#use fixed_io(a_outputs=pin_a0,pin_a1,pin_a2,pin_a3)
#use rs232(xmit=PIN_B3,rcv=PIN_A4,bits=8)
//variables globales
int1 flagA=FALSE, flagB=FALSE;
int value=50;
//Interrupciones
#INT_EXT
void int_rb0(void){
char letra;
disable_interrupts(GLOBAL);
delay_ms(10);
letra=getc();
letra= toupper(letra);
switch(letra){
case 'D':printf("Derecha\r\n");
flagA=TRUE;
flagB=FALSE;
break;
case 'I':printf("Izquierda\r\n");
flagA=FALSE;
flagB=TRUE;
break;
}
enable_interrupts(GLOBAL);
}
//prototipos
void adelante(void);
void atras(void);
main(){
enable_interrupts(GLOBAL);
ext_int_edge(L_TO_H); //interrupcion en flanco de bajada
enable_interrupts(int_ext); //habilitada interrupcion Externa RB0
printf("Control de\n\r Motor de pasos Bipolar");
while(1){
if(flagA==TRUE)
adelante();
if(flagB==TRUE)
atras();
};
return 0;
}
void adelante(void){
Output_A(input_A()|0x05);
delay_ms(value);
Output_A(input_A()|0x06);
delay_ms(value);
Output_A(input_A()|0x0A);
delay_ms(value);
Output_A(input_A()|0x09);
delay_ms(value);
}
void atras(void){
Output_A(input_A()|0x09);
delay_ms(value);
Output_A(input_A()|0x0A);
delay_ms(value);
Output_A(input_A()|0x06);
delay_ms(value);
Output_A(input_A()|0x05);
delay_ms(value);
}
Aqui el circuito