Autor Tema: Ejemplitos en C para 16F648A  (Leído 418684 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2390
Ejemplitos en C para 16F648A
« en: 13 de Agosto de 2005, 16:33:00 »
Buenass!!! aqui podreis encontrar programas realizados en C con el compilador de la casa CCS para los microcontroladores PIC de Microchip.

En este caso, para los programas se ha utilizado el pic 16F648A, se ha usado dicho pic por su precio, por su memoria, sus perifericos.....y porque tenia unos cuantos por aqui tirados sin usar!jeje

     INDICE:

        1. Parpadeo de un led cada 0,5s       
        2. Parpadeo de un led cada 0,5s 16F628A     
        3. Parpadeo de tres led"s cada 0,5s       
        4. Parpadeo de cuatro led"s cada 0,5s     
        5. Coche Fantastico v.I       
        6. Coche Fantastico v.II funcion rotar     
        7. Coche Fantastico v.III bucle while       
        8. Coche Fantastico vIV bucle for       
        8. Juego de luces         
       10. Luces. Como realizar una libreria       
       11. Contador ascendente 0a9   (7seg)         
       12. Contador descendente 9a0 (7seg)       
       13. Contador reversible 0a9 con switch (7seg)         
       14. Contador 00a99. (7seg) uso del TMR0         
       15. Contador 00a99 automatico (7seg)         
       16. Contador 0a9 BCD&Boton       
       17. Contador 0a9 BCD 2pulsadores(1.Inc  2.Decr)       
       18. Super contador 0000a9999 (7seg)         
       19. BETI parpadeo (7seg)         
       20. AUPA DEPO (7seg)       
       21. HOLA rotar hacia izquierda (7seg)     
       22. Animacion limites (7seg)       
       23. Dado digital (7seg)       
       24. Hola mundo (LCD)         
       25. Hola mundo ahorrando 1 pin (LCD)     
       26. Abecedario (LCD)       
       27. Mover palabra por pantalla LCD       
       28. Limites LCD       
       29. Escribir&Leer eeprom interna del pic (LCD)     
       30. Contador 0a9 buzzer&boton (LCD)       
       31. Escribir&Leer eeprom 24LC256 (LCD)       
       32. Dado digital (LCD)       
       33. Reloj-Calendario DS1302 (LCD)       
       34. RS232: PIC->PC         
       35. Reloj-Calendario RS232      
       36. RS232 & teclado 3x4     
       37. LCD & Teclado 3x4        
       38. Clave (LCD&Teclado 4x4)         
       39. RS232: PC->PIC        
       40. Manejo INT/RB0 interrupcion externa       
       41. Manejo ccp1 mod.comparacion flanco asc/des genera int     
       42. Animacion bateria lcd2x16     
       43. Animacion come-cocos RS232->lcd 2x16       
       44. Temperatura con ds1620 BETA        
       45. Manejo del periferico CCP1 modo PWM       
       46. CCP1 modo PWM al 50% y 75% utilizacion y creacion .h     
       47. C & ASM         
       48. Interrupcion de los pines <4:7> portb       
       49. Abecedario(1 Matriz de led"s 5x7)     
       50. Reloj digital(display"s 7seg)         
       51. Interrupcion RS-232. Lectura/Escritura eeprom interna       
       52. Interrupcion RS-232. Lectura/Escritura eeprom 24LC256   
       53. SAA1064 modo DINAMICO       
       54. SAA1064 modo ESTATICO       
       55. PCF8591 modo D/A         
       56. PCF8591 modo A/D         
       57. Manejo 16 display's 7seg con dos pines del micro (4 SAA1064 en bus i2c)   
       58. Termometro digital con ds1620      

     HERRAMIENTAS:

       MPlab IDE  -> Entorno de trabajo
       CCS Plug-in MPlab -> Integrar nuestro compilador CCS al entrono MPlab
       CCS Demo -> Una version demo de nuestro compilador
       Como integrar CCS en Proteus -> CCS en PROTEUS
       Como simular CCS en Proteus -> Debug con codigo .c
       CCS manual -> Manual CCS en ingles(ultima version)
       Manual CCS -> Manual de nuestro compilador en español
       7Seg -> Programa que genera el codigo de display"s 7segmentos(ac & cc)
       LCD 5x7 -> Programa que genera codigo para caracteres cgram LCD 5x7
       ASCII & RCC -> Programas para obtener codigo ASCII y RCC para colores resistor


     REVISIONES:

        1. El programa 51 es la revision del programa 29
        2. El programa 52 es la revision del programa 31



Recordar que estos programas fueron pensados para usar las funciones del compilador CCS manejando los perifericos del pic, por lo tanto, estos programas son validos para cualquier pic, eso si, con las modificaciuones oportunas y sus respectivas especificaciones y limitaciones del propio pic!

PD: Aqui os dejo un enlace a mi disco duro virtual para la descarga completa de los programitas y demas cosas!!! VsZeNeR-Disco Duro Virtual

Suerte!!! :wink:
« Última modificación: 11 de Abril de 2008, 10:18:27 por vszener »
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2390
RE: Ejemplitos en C para 16F648A
« Respuesta #1 en: 13 de Agosto de 2005, 16:38:00 »
El primer ejemplo como no!!! la iluminacion de un led!!!jeje alguien alguna vez a visto programa similar???jeje bueno fuera de bromas por alguno hay que empezar y este es el nivel inferior jeje. El programa consiste en el encendido y apagado d eun led cada 0.5s por el pin RB0 del pueto B:

////////////////////////////////////////////////////////////////////////////////////
//   VsZeNeR"05      
//             6/Agosto/05
//
//Programa:   Parpadeo de un led cada 0.5s
//Version:   0.0
//
//Dispositivo: PIC 16F648A      Compilador:    CCS vs3.227
//Entorno IDE: MPLAB IDE v7.20   Simulador:    Proteus 6.7sp3
//
//Notas: Parpadeo de un led cada 0.5s por el pin RB0 del puerto B
//////////////////////////////////////////////////////////////////////////////////

#include <16f648a.h>         //pic a utilizar          
#fuses XT,NOWDT,NOPROTECT,PUT      //ordenes para el programador
#use delay (clock=4000000)         //Fosc=4Mhz
#use fast_io(b)

///PROGRAMA
void main(void)
{
   set_tris_b(0xFE);   //portb como salida(RB0,las demas desactivadas)
   disable_interrupts(GLOBAL);   //todas las interrupciones desactivadas
   
   do{   
      output_low(PIN_B0);          //led off
      delay_ms(500);            
      output_high(PIN_B0);        //led on
      delay_ms(500);
   }while(TRUE);                //bucle infinito
}

Seguimos en contacto!Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
RE: Ejemplitos en C para 16F648A
« Respuesta #2 en: 14 de Agosto de 2005, 00:30:00 »
Hola:

Que bien.... con ejemplos es como a mi parecer se aprende mas rapido.... yo tambien estoy colgando ejemplos pero en el foro PBP y PROTON+, estaba queriendo aprender a programar en C, ya tengo el compilador y ahora solo queda seguir uno a uno los ejemplos que vayas colgando... y de ves en cuando o si no es muy seguido ire haciendote preguntas de "NOVATO", puedo este mismo programa utilizarlo para un pic 16F628...?

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2390
RE: Ejemplitos en C para 16F648A
« Respuesta #3 en: 14 de Agosto de 2005, 05:35:00 »
Hola lordlafebre!!!por supuesto que puedes ir haciendo preguntas, asi entre todos podremos aprender juntos jeje(que bien suena), bueno con respecto hacia el pic 16F628 decirte que microchip sugiere que utilicemos la version 16F628A y claro que se puede utilizar este ejemplito para el pic que mencionaste, solamente tendremos que adecuarlo a sus necesidades, y esta vez adecuarlo es bastante facil, solamente tendremos que cambiar el include a nustro pic seleccionado(para asi poder utilizar las variables y funciones definidas para este dispositivo) y nada mas!!!!(nada mas por ser el ejmeplito muy facil jeje en otros dsipositivos tendriamos que ver si tienen los mismos perifericos etc), y aqui esta el programa modificado para el PIC 16F628A:

////////////////////////////////////////////////////////////////////////////////////
//      VsZeNeR"05      
//                14/Agosto/05
//
//Programa:   Parpadeo de un led cada 0.5s
//Version:   0.0 revision del 16F628a
//
//Dispositivo: PIC 16F628A      Compilador: CCS vs3.227
//Entorno IDE: MPLAB IDE v7.20   Simulador:   Proteus 6.7sp3
//
//Notas: Parpadeo de un led cada 0.5s por el pin RB0 del puerto B
//////////////////////////////////////////////////////////////////////////////////

#include <16f628a.h>         //pic a utilizar          
#fuses XT,NOWDT,NOPROTECT,PUT      //ordenes para el programador
#use delay (clock=4000000)         //Fosc=4Mhz
#use fast_io(b)

///PROGRAMA
void main(void)
{
   set_tris_b(0xFE);   //portb como salida(RB0,las demas desactivadas)
   disable_interrupts(GLOBAL);   //todas las interrupciones desactivadas
   
   do{   
      output_low(PIN_B0);   //led off
      delay_ms(500);            
      output_high(PIN_B0);   //led on
      delay_ms(500);
   }while(TRUE);         //bucle infinito
}

Decir que aqui esta el enlace a la pagina que microchip a dedicado para el dispositivo 16F628a:
http://www.microchip.com/stellent/idcplgidcplg?IdcService=SS_GET_PAGE&nodeId=1335&dDocName=en010210
Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2390
RE: Ejemplitos en C para 16F648A
« Respuesta #4 en: 14 de Agosto de 2005, 05:44:00 »
Desde esta direccion se podeis descargas el programa en c, el archivo hex y la simulacion en proteus


Suerte!!! :wink:
« Última modificación: 25 de Mayo de 2006, 09:58:04 por vszener »
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2390
RE: Ejemplitos en C para 16F648A
« Respuesta #5 en: 14 de Agosto de 2005, 05:49:00 »
Aqui otro ejemplito mas de led"s, esta vez como encender tres led"s por el port b de tres formas distintas...asi podreis elegir la que os guste mas jeje:

////////////////////////////////////////////////////////////////////////////////////
//      VsZeNeR"05      
//      6/Agosto/05
//
//Programa: Parpadeo de tres leds cada 0.5s
//Version:   0.1
//
//Dispositivo: PIC 16F648A      Compilador: CCS vs3.227
//Entorno IDE: MPLAB IDE v7.20   Simulador: Proteus 6.7sp3
//
//Notas: Parpadeo de tres leds cada 0.5s de tres formas diferentes:
//   RB0 -> con la funcion output_high()/output_low()
//   RB1 -> definiendo el pin RB1
//   RB2 -> con la funcion output_bit()
//////////////////////////////////////////////////////////////////////////////////

#include <16f648a.h>   //pic a utilizar          
#fuses XT,NOCPD,NOWDT,NOPUT,NOLVP,NOBROWNOUT  //ordenes programador  
#use delay (clock=4000000)   //Fosc=4Mhz
#use fast_io(b)                  
#bit RB1=0x106.1   //definicion pin potrb B1

///PROGRAMA
void main(void)
{
   set_tris_b(0xF8);   //puerto b como salida
   disable_interrupts(GLOBAL);   //todas interrupciones desactivadas
   
   RB1=0;   //valor inicial B1 para que los led"s se iluminen igual
   do{
      output_high(PIN_B0);        //led"s on
      RB1=!RB1;
      output_bit(PIN_B2,1);
      delay_ms(500);
      
      output_low(PIN_B0);        //led"s off
      RB1=!RB1;
      output_bit(PIN_B2,0);
      delay_ms(500);
      }while(TRUE);           //bucle infinito
}

Ya vamos manejando esto de los led"s jeje.....Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2390
RE: Ejemplitos en C para 16F648A
« Respuesta #6 en: 14 de Agosto de 2005, 05:54:00 »
En esta dire podeis descargaros los archivos: c, hex, dsn(proteus) del programa anterior del encendido de tres led"s de tres formas diferentes

http://miarroba.com/foros/ver.php?foroid=348538&temaid=3484219

Pokito a poko la "juani" me volvio loko!!!jejeGiño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
RE: Ejemplitos en C para 16F648A
« Respuesta #7 en: 14 de Agosto de 2005, 11:24:00 »
Hola:

Va quedando claro los ejemplos, solo dos preguntitas:

set_tris_b(0xF8); para configurar el puerto como entradas o salidas puedo utilizar valores binarios y decimales..? o solo lo puedo hacer en Hex...?

RB1=!RB1; aqui no me a quedado clara esta asignacion porque se utiliza en signo de admiracion...?

Lo siento si mis preguntas son un poco tontas pero de C no "C NADA" Llorica

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2390
RE: Ejemplitos en C para 16F648A
« Respuesta #8 en: 14 de Agosto de 2005, 12:37:00 »
Ke pasa lordlafebre!!!jeje haber lo del set_tris_b....se puede utilizar el formato que quieras eso si, siempre que uses la directiva adecuada:
       ·Para HEXADECIMAL: 0xNUMERO_HEXADECIMAL -> 0x00
       ·Para DECIMAL: EL_NUMERO_DECIMAL -> 0
       ·Para BINARIO: 0bNUMERO_BINARIO -> 0b000000
Aunque aconsejo que uses la hexadecimal que es la mas usada, pero la forma binaria es util para solamente elegir ciertos pines!!!!.
Bien sobre lo del comando RB1=!RB1 decirte que realiza la negacion logica, es decir si RB1=0 entonces cuando llega a realizarse la instruccion RB1=!RB1 sera RB1=1, el simbolito ! cumple la funcion de complemento igual que la funcion comf f,d en el esamblador.
Bien revisando el codigo del parpadeo de los tres led"s de tres formas distintas, decir que se me olvido una cuarta formaa diistinta de encenderlos!!!!jeje aqui va el programa completo de como encender 4 led"s de 4 formas distintas:

////////////////////////////////////////////////////////////////////////////////////
//   VsZeNeR"05      
//            14/Agosto/05
//
//   Programa:   Parpadeo de cuatro leds cada 0.5s
//   Version:   0.2
//
//   Dispositivo: PIC 16F648A         Compilador:    CCS vs3.227
//   Entorno IDE: MPLAB IDE v7.20      Simulador:    Proteus 6.7sp3
//
//   Notas: Parpadeo de cuatro leds cada 0.5s de cuatro formas diferentes:
//            RB0 -> con la funcion output_high()/output_low()
//            RB1 -> definiendo el pin RB1
//            RB2 -> con la funcion output_bit()
//            RB3 -> con la funcion bit_set()/bit_clear()
//////////////////////////////////////////////////////////////////////////////////

#include <16f648a.h>            //pic a utilizar          
#fuses XT,NOCPD,NOWDT,NOPUT,NOLVP,NOBROWNOUT      //ordenes para el programador
#use delay (clock=4000000)         //Fosc=4Mhz
#use fixed_io(b_outputs=PIN_B0,PIN_B1,PIN_B2,PIN_B3) //pin de salida portb   
#bit RB1=0x106.1               //definicion pin potrb B1
#byte portb=06

///PROGRAMA
void main(void)
{
   set_tris_b(0x00);            //puerto b como salida
   disable_interrupts(GLOBAL);      //todas interrupciones desactivadas
   
   RB1=0;                     //valor inicial B1 para que los led"s se iluminen igual
   do{
      output_high(PIN_B0);      //led"s on
      RB1=!RB1;
      output_bit(PIN_B2,1);
      bit_set(portb,3);
      delay_ms(500);
      
      output_low(PIN_B0);         //led"s off
      RB1=!RB1;
      output_bit(PIN_B2,0);
      bit_clear(portb,3);
      delay_ms(500);
      }while(TRUE);            //bucle infinito
}

Jeje..ya no hay excusas de poder encender un led ennnn jejeGiño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2390
RE: Ejemplitos en C para 16F648A
« Respuesta #9 en: 14 de Agosto de 2005, 12:42:00 »
Aqui esta el enlace para descargaros el archivo en c, hex y el dsn(para proteus) del programa anterior: parpadeo de cuatro led"s de cuatro formas diferentes



Suerte!!! :wink:
« Última modificación: 25 de Mayo de 2006, 10:03:13 por vszener »
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2390
RE: Ejemplitos en C para 16F648A
« Respuesta #10 en: 14 de Agosto de 2005, 12:52:00 »
Una mas de led"s jeje!!!¿quien no vio la serie de tv del coche fantastico??¿quien no soño algun dia con tener uno?¿quien no hablo alguna que otra vez al volante del coche haber si le respondia Kit?? jeje (yo le hababa en su momento al coche de mi papi un opel corsa de los antiguos jeje peor nunca me respondioEnfurruñado), pues el siguiente ejemplito va dedicado a las luces del coche fantastico, ese movimiento de un lateral a otro y viceversa:

////////////////////////////////////////////////////////////////////////////////////
//                     VsZeNeR"04      
//                     7/Agosto/05
//
//   Programa:   Coche Fantastico
//   Version:   0.0
//
//   Dispositivo: PIC 16F648A         Compilador:    CCS vs3.227
//   Entorno IDE: MPLAB IDE v7.20      Simulador:    Proteus 6.7sp3
//
//   Notas: Barrido de led"s simulando la iluminacion del coche fantastico por el
//         puerto A
//
//            RA0 -> 1º Led
//            RA1 -> 2º Led
//            RA2 -> 3º Led
//            RA3 -> 4º Led
//////////////////////////////////////////////////////////////////////////////////

#include <16f648a.h>            //pic a utilizar          
#fuses XT,NOWDT,NOPROTECT,PUT      //ordenes para el programador
#use delay (clock=4000000)         //Fosc=4Mhz
#use standard_io(A)               //puerto A como salida

///DECLARACIONES DE FUNCIONES
void derecha(void);               //ilumina led"s derecha a izquierda      
void izquierda(void);            //ilumina led"s izquierda a derecha

///PROGRAMA
void main(void)
{
   set_tris_a(0xF0);            //porta como salida menos RA4(desactivado)
   disable_interrupts(GLOBAL);      //todas las interrupciones desactivadas
   
   do{                        //bucle...
      derecha();
      izquierda();   
      }while(TRUE);            //...infinito
}

void derecha(void)
{
   output_high(PIN_A0);
   delay_ms(300);
   output_low(PIN_A0);
   output_high(PIN_A1);
   delay_ms(300);
   output_low(PIN_A1);
   output_high(PIN_A2);
   delay_ms(300);
   output_low(PIN_A2);
   output_high(PIN_A3);
   delay_ms(300);
}

void izquierda(void)
{
   output_low(PIN_A3);
   output_high(PIN_A2);
   delay_ms(300);
   output_low(PIN_A2);
   output_high(PIN_A1);
   delay_ms(300);
   output_low(PIN_A1);
}

Pondre el mismo programa pero realizado de otra manera.....Kit!!!te necesito!Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2390
RE: Ejemplitos en C para 16F648A
« Respuesta #11 en: 14 de Agosto de 2005, 12:57:00 »
De esta direccion podeis descargaros los ficheros c,hex y el dsn(proteus) del programa anterios: coche fantastico I



Que alegria que alboroto......toma otro perrito pilotooo!!! :wink:
« Última modificación: 25 de Mayo de 2006, 10:05:55 por vszener »
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
RE: Ejemplitos en C para 16F648A
« Respuesta #12 en: 14 de Agosto de 2005, 13:49:00 »
Hola:

Una cosita mas que no me a quedado claro es esto:

#bit RB1=0x106.1

Que es lo que hace?

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2390
RE: Ejemplitos en C para 16F648A
« Respuesta #13 en: 14 de Agosto de 2005, 14:19:00 »
La instruccion #bit RB1=0x106.1 define el pin RB1 del portb, si vas al data sheet del micro:
http://www.microchip.com/stellent/idcplgidcplg?IdcService=SS_GET_PAGE&nodeId=1335&dDocName=en010212
y miras en el mapa de memoria del portb veras que se puede definir el portb como la direccion 06h o la 106h, y veras que el pin RB1 es el bit 1 de dicho puerto, por lo tanto para definir el pin RB1 primero decimos que puerto queremos definir, en este caso el puerto b (ponemos 0x106) y despues definimos el pin seleccionado, en este caso el pin RB1(ponemos un puntito para especificar el pin y su bit que le corresponde, en este caso la instruccion quedaria asi: 0x106.1) y para poder manejarlo en el programa definimos un bit con la instruccion en c #bit, y todo en total quedara #bit RB1=0x106.1....asi se define el portb y concretamente un bit concreto(en este caso el RB1), asi tendremos definido el pin RB1 del portb para poder manejarlo en nuestro programa!, si me he explicado mal dimelo!!!!jejeGiño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2390
RE: Ejemplitos en C para 16F648A
« Respuesta #14 en: 14 de Agosto de 2005, 14:25:00 »
Bien lo prometido es deuda!!!jeje aqui pongo otra forma d hacer el colorido del coche fantastico con led"s......las cosas con estos cacharros no s elimitan a una sola manera sino a las maneras x-proporcionales de los que se paran a pensarlo jeje pos aqui esta:

////////////////////////////////////////////////////////////////////////////////////
//                     VsZeNeR"05      
//                     12/Agosto/05
//
//   Programa:   Coche Fantastico
//   Version:   1.0
//
//   Dispositivo: PIC 16F648A         Compilador:    CCS vs3.227
//   Entorno IDE: MPLAB IDE v7.20      Simulador:    Proteus 6.7sp3
//
//   Notas: Barrido de led"s simulando la iluminacion del coche fantastico por el
//         puerto B por medio de la instruccion de rotar.
//
//            RB0 -> 1º Led
//            RB1 -> 2º Led
//            RB2 -> 3º Led
//            RB3 -> 4º Led
//////////////////////////////////////////////////////////////////////////////////

#include <16f648a.h>            //pic a utilizar          
#fuses XT,NOWDT,NOPROTECT,PUT      //ordenes para el programador
#use delay (clock=4000000)         //Fosc=4Mhz
#use standard_io(B)               //puerto B como salida
#byte  portb= 0x6               //direccion port b

///PROGRAMA
void main(void)
{
   int led_on=0b0001;            //led a iluminar
   set_tris_b(0xf0);            //portb como salida (algunas desactivadas)
   disable_interrupts(GLOBAL);      //todas las interrupciones desactivadas
   
   do{                        //bucle...
      
      do{      //iluminacion hacia izquierda
         portb=led_on;
         rotate_left(&led_on,1);
         delay_ms(300);
         }while(bit_test(led_on,3)==0);
      
      do{      //iluminacion hacia derecha
         portb=led_on;
         rotate_right(&led_on,1);
         delay_ms(300);
         }while(bit_test(led_on,0)==0);
         
      }while(TRUE);            //...infinito
}

La diferencia con el otro es que se ha utilizado una variable y sa usado la funcion de rotar hacia la derecha y hacia la izquierda...Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte


 

anything