| 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 } |
||
Esta página se modificó el 27/12/2008
|