Espero cualquier mejora o sugerencia.
Archivo Control_Motor_CC.h
- Código: Seleccionar todo
#include <16F84A.h>
#FUSES NOWDT, XT, NOPUT
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_A0,rcv=PIN_A1,bits=8)
#bit RB1=0x06.1 // Identificadores de bits
#bit RB2=0x06.2
//Prototipos de las funciones
void instrucciones(void);
void derecha(void);
void izquierda(void);
void parar(void);
void mensaje(void);
Archivo Control_Motor_CC.c
- Código: Seleccionar todo
/*--------------------------------------------------------*\
| Control de un motor de CC por medio de la Terminal |
| autor: biblioman |
| www.aquihayapuntes.com |
\*--------------------------------------------------------*/
#include "Control_Motor_CC.h"
int marcha=0;//variables globales
char sentido;
void main()
{
char M;
set_tris_b( 0b11111001 ); // Se configura la puerta B
RB1 = 0; // Se inicializa los bits de salida
RB2 = 0;
//llamada a la función instrucciones();
instrucciones();
while (true)
{
M=getc();
switch (M) {
case 'i':
izquierda();
sentido='i';
break;
case 'd':
derecha();
sentido='d';
break;
case 'p':
parar();
break;
default :
mensaje();
break;
}
}
}
//Definición de funciones
void instrucciones() //instrucciones para el control del Motor
{
puts("========= Control de un Motor de CC ==========");
puts("Pulsa 'i' para giro a la izquierda");
puts("Pulsa 'd' para giro a la derecha");
puts("Pulsa 'p' para parar el motor");
}
void izquierda ()
{
if ((marcha==1) && (sentido=='d')){ //si motor está en marcha -->derecha paro y espero 3s
parar();
delay_ms(3000);
RB1=0;
RB2=1;
marcha=1;
}
else{
RB1=0;
RB2=1;
marcha=1;
}
}
void derecha ()
{
if ((marcha==1)&& (sentido=='i')){ //motor en marcha --> izquierda, paro y espero 3s
parar();
delay_ms(3000);
RB1=1;
RB2=0;
marcha=1;
}
else{
RB1=1;
RB2=0;
marcha=1;
}
}
void parar ()
{
RB1=0;
RB2=0;
marcha=0;
}
void mensaje ()
{
puts("Prueba de nuevo");
}
Un saludo
EL DNS lo tenéis aquí:
