Академический Документы
Профессиональный Документы
Культура Документы
Entrega N 9.
La secuencia de nuestro programa ser muy simple; leer los pulsadores y en funcin del pulsador que accionemos, cambiaremos la funcin del dispositivo. Las funciones de la aplicacin estarn controladas por 2 Flags (banderas) internos, los cuales se implementan mediante la creacin de 2 variables de 1 bit, y a las que llamaremos FLAG_RUN y FLAG_FWRW. La aplicacin estar constituida por 2 rutinas o funciones del tipo void-void, que leern 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 tambin estudiados en los apartados anteriores.
//archivo de cabecera del procesador #include <16f1939.H> //seteamos la frecuencia del delay #use delay(internal, clock=4000000) //fusibles de configuracin #fuses INTRC_IO //oscilador Interno con Puertos IO #fuses NOPROTECT//sin proteccin de cdigo #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 proteccin contra escritura #fuses NOVCAP//regulador para el MTOUCH desactivado #fuses NOSTVREN//reset por desborde del stack desactivado #fuses NOLVP//programacin 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) { // Configuramos el oscilador interno setup_oscillator(OSC_4MHZ|OSC_PLL_OFF|OSC_INTRC); // Configuramos los puertos analgicos como digitales setup_adc_ports(NO_ANALOGS); // Bucle principal while(true){ ScanKey(); //llamada a la funcin de lectura de los pulsadores MotorControl();//llamada a la funcin de control del motor } }
//Rutinas auxiliares: void ScanKey(void) { if(input(BTN1)) //lee el estado del pulsador { //si el mismo est accionado FlagRUN=!FlagRUN;//cambia el estado de FlagRUN MotorControl();//llamada a la funcin que controla el motor delay_ms(2);//espera para evitar leer el rebote al oprimir while(input(BTN1));//re-lectura espera que se suelte delay_ms(2);//espera para evitar leer el rebote al soltar } if(input(BTN2)) //lee el estado del pulsador { //si el mismo est accionado FlagFWRW=!FlagFWRW;//cambia el estado de FlagFWRW MotorControl();//llamada a la funcin que controla el motor delay_ms(2);//espera para evitar leer el rebote al oprimer while(input(BTN2));//re-lectura espera que se suelte delay_ms(2);//espera para evitar leer el rebote al soltar }
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 output_high(FW);//enciende } else // Sino { output_low(FW);//apaga FW delay_ms(50); //espera un output_high(RW);//enciende } }
un tiempo FW
tiempo RW
El programa est realizado usando un algoritmo denominado multitarea cooperativa, ya que el main esta constituido por llamadas a funciones sucesivas, donde cada funcin realiza una tarea determinada y cooperan entre s para generar como resultado final la aplicacin requerida. Continuar .....