PicManía by RedRaven
 

Búsqueda personalizada

 

PROYECTOS : RROS v 1.0

 

 

  RROS v1.0  
  //////////////////////////////////////////////////////////////////////////
//
// RROS para RRBOARD1 v.1.0
//
// © 08.12.2005 By RedRaven
//
// Hardware: PIC16F628
//
// RA0..RA3 Leds
// RB1 USART RX
// RB2 USART TX
// RB5 Buzzer Driver
//
// Xtal 4 Mhz
//
// Idioma: CCS PICC v.3.150
//
// Comandos:
//
//
//////////////////////////////////////////////////////////////////////////


#include <16f628.h>
#fuses XT,NOWDT,NOPROTECT,PUT,BROWNOUT
#use delay(clock=4000000)
#use standard_io(A)
#use standard_io(B)
#use fixed_io(a_outputs=PIN_A0,PIN_A1,PIN_A2,PIN_A3)
#use fixed_io(b_outputs=PIN_B5)
#use rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B1)

// Constantes y definiciones //////////////////////////////////////////////////

Long const tt=500; // Periodo retardo en milisegundos Largo
Long const tm=250; // Periodo retardo en milisegundos medio
Long const tz=125; // Periodo reatrdo en milisegundos Corto

// Declaracion de Funciones ----------------------------------------------

// De RROS ----------------------------

void on_reset(void); // Inicializacion del Micro
void pres_telnet(void); // Presenta ménu TELNET
void pres_cursor(void); // Presenta el Cursor
void echo_command(char cmmd); // Echo command recibido
void echo_ucommand(char cmmd); // Echo command recibido desconocido
void procesa_command(void); // Procesa comando, si lo hay ...
void retardo_ms(long t); // Rutina de retardo para embeber procesa_command()

// De Hardware ------------------------

void buzzer_on(void); // Activa buzzer en PORTB.5
void buzzer_off(void); // Desactiva buzzer en PORTB.5
void buzzer_one(void); // Emite un beep en el buzzer
void buzzer_three(void); // Emite tres beep en el buzzer

void derecha(void); // ilumina led's derecha a izquierda
void izquierda(void); // ilumina led's izquierda a derecha
void enciende(void); // ilumina todos los led's
void apaga(void); // apaga todos los led's

// Variables Globales ////////////////////////////////////////////////////

char rcvcommand =0x00;
char command =0x00;
char lightsmode=0x00;

// INTERRUPCIONES ////////////////////////////////////////////////////////

// INTERRUPCION RDA - Recepción USART -

#int_rda
void serial_isr() {

  rcvcommand=0x00; // Limpia recepción

  if(kbhit()){ // Si hay algo en la USART pdte de recibir ...
    rcvcommand=getc(); // ... lo recibe
    if(rcvcommand!=0x00){ // si ha recibido algo distinto de #0 ...
      if((rcvcommand=='?')| // ... lo filtra para ver si es válido
         (rcvcommand=='e')|
         (rcvcommand=='E')|
         (rcvcommand=='b')|
         (rcvcommand=='B')|
         (rcvcommand=='0')|
         (rcvcommand=='1')|
         (rcvcommand=='2')){
         command=rcvcommand; // Lo guarda como Comando Válido y ...
         echo_command(command); // ... hace eco.
      }
      else {
        echo_ucommand(rcvcommand); // ¿Qué te passa en la boquitaaaa?
      }
    }
  }
}

// Rutinas y Funciones de RROS ///////////////////////////////////////////

void pres_telnet(void){ // Presenta Menú TELNET

  delay_ms(100);
  printf("\r\n");
  printf("RROS v1.0 over 16F628\r\n");
  printf("listen on RS232\r\n\r\n");
  printf("?: Valid used commands\r\n");
  printf("B: Buzzer ON\r\n");
  printf("b: Buzzer OFF\r\n");
  printf("E: Buzzer Three Beeps\r\n");
  printf("e: Buzzer One Beep\r\n");
  printf("0: No Lights\r\n");
  printf("1: Lights mode Kit\r\n");
  printf("2: Lights mode Blinking\r\n");

  printf("\r\n");
  pres_cursor();
}

void echo_command(char cmmd){ // Echo command recibido

  printf("%c\r\n",cmmd);
  pres_cursor();
}

void echo_ucommand(char cmmd){ // Echo command recibido desconocido

  printf("%c?\r\n",cmmd);
  pres_cursor();
}

void pres_cursor(void){ // Presenta el cursor

  printf("Command>");
}

void retardo_ms(long t){ // Rutina de retardo para embeber procesa_command()

  procesa_command();
  delay_ms(t);
  procesa_command();
}

void procesa_command(void){ // Procesa comando, si lo hay ...

  if(command!=0x00){ // ¡ Hay Comando ! :-)
    switch(command){
      case '?': pres_telnet(); // Comando "?: Valid used commands"
                break;
      case 'B': buzzer_on(); // Comando "B: Buzzer ON"
                break;
      case 'b': buzzer_off(); // Comando "b: Buzzer OFF"
                break;
      case 'E': buzzer_three(); // Comando "E: Buzzer Three Beeps"
                break;
      case 'e': buzzer_one(); // Comando "e: Buzzer One Beeps"
                break;
      case '0': lightsmode='0'; // Comando "0: No Lights"
                break;
      case '1': lightsmode='1'; // Comando "1: Lights mode Kit"
                break;
      case '2': lightsmode='2'; // Comando "2: Lights mode Blinking"
                break;
    }
  }
  command=0x00; // Ya no hay commando :-(
}

// RUTINAS de HARDWARE Específico ////////////////////////////////////////

void on_reset(void){ // Inicializacion del Micro tras RESET

  disable_interrupts(GLOBAL); // todas las interrupciones desactivadas

  output_low(PIN_A0); // RA0..RB3 a 0
  output_low(PIN_A1);
  output_low(PIN_A2);
  output_low(PIN_A3);
  output_low(PIN_B5); // RB5 a 0

  rcvcommand=0x00; // inicializa variables on reset
  command=0x00;
  lightsmode=0x00;

  enable_interrupts(global); // todas las interrupciones activadas
  enable_interrupts(int_rda); // interrupcion RDA habilitada

  pres_telnet();

}

void buzzer_on(void){ // Activa buzzer en PORTB.5

  output_high(PIN_B5);

}
void buzzer_off(void){ // Desactiva buzzer en PORTB.5

  output_low(PIN_B5);

}
void buzzer_one(void){ // Emite un beep en el buzzer

  output_high(PIN_B5);
  delay_ms(tz);
  output_low(PIN_B5);
  delay_ms(tz);
}
void buzzer_three(void){ // Emite tres beep en el buzzer

  buzzer_one();
  buzzer_one();
  buzzer_one();

}

void derecha(void) // Mueve los Leds de Izquierda a Derecha
{
  output_high(PIN_A0);
  retardo_ms(tt);
  output_low(PIN_A0);
  output_high(PIN_A1);
  retardo_ms(tt);
  output_low(PIN_A1);
  output_high(PIN_A2);
  retardo_ms(tt);
  output_low(PIN_A2);
  output_high(PIN_A3);
  retardo_ms(tt);
}

void izquierda(void) // Mueve los Leds de Derecha a Izquierda
{
  output_low(PIN_A3);
  output_high(PIN_A2);
  retardo_ms(tt);
  output_low(PIN_A2);
  output_high(PIN_A1);
  retardo_ms(tt);
  output_low(PIN_A1);

}

void enciende(void) // enciende todos los Leds
{
  output_high(PIN_A0);
  output_high(PIN_A1);
  output_high(PIN_A2);
  output_high(PIN_A3);
  retardo_ms(tt);
}

void apaga(void) // apaga todos los Leds
{
  output_low(PIN_A0);
  output_low(PIN_A1);
  output_low(PIN_A2);
  output_low(PIN_A3);
  retardo_ms(tt);
}

// MAIN Programa Principal ///////////////////////////////////////////////

void main(void){

  on_reset();

  do{ // bucle...

    if(lightsmode==0x00){ // Sin luces
      apaga();
    }

    if(lightsmode=='1'){ // Modelo Kit
      derecha();
      izquierda();
    }

    if(lightsmode=='2'){ // Modelo blink
      apaga();
      enciende();
    }

    procesa_command();

  }while(TRUE); // ...infinito
}
 
 
 

Fuentes de RROS v1.0    El Rincón del C

 

 

Esta página se modificó el 27/12/2008


Esta página usa la letra Ñ

Nota pública importante sobre las consultas al Webmaster de PicManía.


Sugerencias a Picmanía... (que serán leídas pero seguramente no podrán ser contestadas)

Esta página pertenece al grupo de páginas de Diego RedRaven

 

 



Nota: Esta página Web esta repleta de imágenes, textos, logotipos y demás material extraídos de los mas variados medios de los que no soy ni autor ni depositario de los correspondientes derechos de autor, uso y/o reproducción. Si Ud. es depositario de dichos derechos y desea que el material correspondiente sea eliminado de esta Web no dude en ponerse en contacto conmigo mediante e-mail y será inmediatamente retirado. Gracias.
 
Visitas
Totales : 4512 Hoy: 1 Activas: 1 Vistas: 4512

Esta página fue modificada el 07-08-2010 15:42:20

           
 DmSoft WAMP Escribir Unreal