Sunteți pe pagina 1din 4

Finalmente se requiere transferir datos de entrada a las salidas del puerto.

Esto se consigue con una correcta programacin que realice una asignacin de datos correcta usando los registros asociados a los pines de los puertos.

Problema 3
Este problema exige configuracin de puertos, lectura de datos digitales y fijacin de datos de salida. Para la realizacin de los distintos procesos del programa se crearon mtodos (funciones) que ayudan a dividir el programa en mdulos, facilitando la programacin. La definicin de mtodos en C se realiza de la siguiente manera: Tipo_de_dato Nombre_funcin (Tipo_de_dato Nombre_Dato) { Sentencias; } La divisin natural que se realiza en el problema es un mtodo por cada proceso de control. El problema define 4 procedimientos a realizar, abrir portn, cerrar portn, precaucin, objeto cercano. Los detalles especficos de cada proceso estn especificados en la definicin del problema en la seccin anterior.

Problema 3
#include <htc.h> //Incluye el pic para la configuracin #include "delay.h" //Incluye mtodos para conteo de tiempo #define _XTAL_FREQ 4000000 // Cristal 4MHz

int abrir(int estado){ //este mtodo evala el estado del portn //y enciende los leds de salida de derecha a //izquierda if (estado==0) //Si el portn ya est abierto, {return (estado);} //no ejecuta operacin y retorna //el estado original PORTC=0x08; DelayBigMs(250); PORTC=0x04; DelayBigMs(250); PORTC=0x02; DelayBigMs(250); PORTC=0x01; DelayBigMs(250); PORTC=0x00; return (0); } //1 lgico en el pin del ultimo led //Tiempo de espera //1 lgico en el pin del tercer led //Tiempo de espera //1 lgico en el pin del segundo led //Tiempo de espera //1 lgico en el pin del primer led //Tiempo de espera //0 lgico todos los pines de salida //retorna nuevo estado del portn (abierta)

int cerrar(int estado){

//este mtodo evala el estado del portn //y enciende los leds de salida de derecha a //izquierda

if (estado==1) //Si el portn ya est cerrado, {return (estado);} //no ejecuta operacin y retorna //el estado original PORTC=0x01; DelayBigMs(250); PORTC=0x02; DelayBigMs(250); PORTC=0x04; DelayBigMs(250); PORTC=0x08; DelayBigMs(250); PORTC=0x00; return (1); //1 lgico en el pin del primer led //Tiempo de espera //1 lgico en el pin del segundo led //Tiempo de espera //1 lgico en el pin del tercer led //Tiempo de espera //1 lgico en el pin del ultimo led //Tiempo de espera //0 lgico todos los pines de salida //retorna nuevo estado del portn (cerrado)

10

void precaucion (){

//Mtodo que activa las salidas predefinidas //cuando se activa la seal de precaucin

int a=1; //Contador de parpadeo while (a<=3){ PORTC=0xFF; //Enciende todos los leds DelayBigMs(250); //Tiempo de espera PORTC=0x00; //Apaga todos los leds DelayBigMs(250); //Tiempo de espera a=a+1; //Incrementa contador } } void objeto(void) { //Mtodo que ejecuta las salidas predefinidas //cuando se activa la seal de objeto cercano

int a=1; //Contador de parpadeos while (a<=3){ //Activa primer y ltimo led PORTC=0x09; DelayBigMs(250); //Tiempo de espera PORTC=0x00; //Apaga todos los leds DelayBigMs(250); //Tiempo de espera a=a+1; //Incrementa contador de parpadeo } a=1; //Resetea el contador de parpadeo

while (a<=3){ PORTC=0x06; DelayBigMs(250); PORTC=0x00; DelayBigMs(250); a=a+1; } } main(void){ //Mtodo principal

//Activa led centrales //Tiempo de espera //Apaga todos los leds //Tiempo de espera //Incrementa contador de parpadeo

ANSEL=0; ANSELH=0; CM1CON0=0; CM2CON0=0;

//PUERTOS INFERIORES DIGITALES //PUERTOS SUPERIORES DIGITALES //APAGA COMPARADOR 1 //APAGA COMPARADOR 2

TRISB=0xFF; //Fija puerto B como entrada TRISC=0x00; //Fija puerto C como salida int estado_puerta=1; //Flag de estado de puerta //1:cerrado 0:abierto

while (1)

//Ciclo continuo

11

{ //Si se activa seal de apertura, ejecuta proceso abrir() // y actualiza flag de estado de porton if (RB4==1) {estado_puerta=abrir(estado_puerta);} //Si se activa seal de cierre, ejecuta proceso abrir() // y actualiza flag de estado de portn if (RB5==1) {estado_puerta=cerrar(estado_puerta);} //Si se activa seal de precaucin, ejecuta //proceso precaucion() if (RB6==1) {precaucion();} //Si se activa seal de objeto cercano, ejecuta // proceso objeto() if (RB7==1) {objeto();} } }

12

S-ar putea să vă placă și