Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Programando PICs CCS 09 PDF
Programando PICs CCS 09 PDF
Microcontroladores PIC en
Lenguaje C con CCS
Entrega Nº 9.
El circuito lo implementaremos sobre una placa del tipo pertinax multiperforada paso
2.54mm, muy comunes actualmente, y generalmente usadas para la implementación de
circuitos experimentales.
La aplicación estará constituida por 2 rutinas o funciones del tipo void-void, que leerán
el estado de los pulsadores (ScanKey) y controlaran el funcionamiento del motor
(MotorControl).
Para implementar el programa usaremos las funciones embebidas estudiadas
anteriormente y los recursos del lenguaje C también estudiados en los apartados
anteriores.
El listado del programa con su respectivo comentario lo presentamos aquí:
//fusibles de configuración
#fuses INTRC_IO //oscilador Interno con Puertos IO
#fuses NOPROTECT//sin protección de código
#fuses PUT//Power Up Timer activado
#fuses NOBROWNOUT//Sin Brown Out
#fuses NOWDT//sin WDT
#fuses MCLR//master clear
#fuses NOCLKOUT//no sale la frecuencia del clock
#fuses NOIESO//cambio de clock desactivado
#fuses NOFCMEN//sin monitor de falla de clock
#fuses NOWRT//sin protección contra escritura
#fuses NOVCAP//regulador para el MTOUCH desactivado
#fuses NOSTVREN//reset por desborde del stack desactivado
#fuses NOLVP//programación en bajo voltaje desactivado
//definiciones de etiquetas
#define BTN1 PIN_A0
#define BTN2 PIN_A1
#define RUN PIN_B0
#define FW PIN_B1
#define RW PIN_B2
//funciones prototipo
void ScanKey(void);
void MotorControl(void);
//variables globales
short FlagRUN=0;
short FlagFWRW=0;
//programa principal
void main(void)
{
// Bucle principal
while(true){
ScanKey(); //llamada a la función de lectura de los
pulsadores
MotorControl();//llamada a la función de control del motor
}
}
//Rutinas auxiliares:
void ScanKey(void)
{
void MotorControl(void)
{
if(FlagRun==1)// FlagRUN=1 ?
output_high(RUN);//habilita el motor
else
{
output_low(RUN);//sino desactiva el L293
output_low(FW);//apagamos FW y RW
output_low(RW);
}
if(FlagRun==1)// FlagRUN=1 ?
{
if(FlagFWRW==1)// FlagFWRW=1?
{
output_low(RW); //apaga RW
delay_ms(50); //espera un tiempo
output_high(FW);//enciende FW
}
else // Sino
{
output_low(FW);//apaga FW
delay_ms(50); //espera un tiempo
output_high(RW);//enciende RW
}
}
}
Continuará .....