TODOPIC
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?
24 de Noviembre de 2014, 00:40:37

Ingresar con nombre de usuario, contraseña y duración de la sesión
Buscar:     Búsqueda Avanzada
351512 Mensajes en 39445 Temas por 41195 Usuarios
Último usuario: stecklerdav
* Inicio Ayuda Buscar Calendario Ingresar Registrarse
Buscar en TodoPIC
+  TODOPIC
|-+  Microcontroladores PIC
| |-+  Lenguaje C para microcontroladores PIC (Moderadores: Modulay, pikman, pocher, vszener, Suky)
| | |-+  Ejemplitos en C para 16F648A
0 Usuarios y 2 Visitantes están viendo este tema. « anterior próximo »
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ... 25 Marcar como favorito Imprimir
Autor Tema: Ejemplitos en C para 16F648A  (Leído 286199 veces)
vszener
Moderador Local
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
España España

Mensajes: 2384


VsZeNeR


« : 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 » En línea

Nos vemos en los bares!!!!!
vszener
Moderador Local
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
España España

Mensajes: 2384


VsZeNeR


« Respuesta #1 : 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
En línea

Nos vemos en los bares!!!!!
LordLafebre
Giovanni Lafebre
Moderador Global
DsPIC30
*****
Desconectado Desconectado

Sexo: Masculino
Ecuador Ecuador

Mensajes: 3533


Micros y micros


WWW
« Respuesta #2 : 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...?
En línea

vszener
Moderador Local
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
España España

Mensajes: 2384


VsZeNeR


« Respuesta #3 : 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
En línea

Nos vemos en los bares!!!!!
vszener
Moderador Local
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
España España

Mensajes: 2384


VsZeNeR


« Respuesta #4 : 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 » En línea

Nos vemos en los bares!!!!!
vszener
Moderador Local
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
España España

Mensajes: 2384


VsZeNeR


« Respuesta #5 : 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
En línea

Nos vemos en los bares!!!!!
vszener
Moderador Local
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
España España

Mensajes: 2384


VsZeNeR


« Respuesta #6 : 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
En línea

Nos vemos en los bares!!!!!
LordLafebre
Giovanni Lafebre
Moderador Global
DsPIC30
*****
Desconectado Desconectado

Sexo: Masculino
Ecuador Ecuador

Mensajes: 3533


Micros y micros


WWW
« Respuesta #7 : 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
En línea

vszener
Moderador Local
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
España España

Mensajes: 2384


VsZeNeR


« Respuesta #8 : 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
En línea

Nos vemos en los bares!!!!!
vszener
Moderador Local
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
España España

Mensajes: 2384


VsZeNeR


« Respuesta #9 : 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 » En línea

Nos vemos en los bares!!!!!
vszener
Moderador Local
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
España España

Mensajes: 2384


VsZeNeR


« Respuesta #10 : 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
En línea

Nos vemos en los bares!!!!!
vszener
Moderador Local
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
España España

Mensajes: 2384


VsZeNeR


« Respuesta #11 : 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 » En línea

Nos vemos en los bares!!!!!
LordLafebre
Giovanni Lafebre
Moderador Global
DsPIC30
*****
Desconectado Desconectado

Sexo: Masculino
Ecuador Ecuador

Mensajes: 3533


Micros y micros


WWW
« Respuesta #12 : 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?
En línea

vszener
Moderador Local
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
España España

Mensajes: 2384


VsZeNeR


« Respuesta #13 : 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
En línea

Nos vemos en los bares!!!!!
vszener
Moderador Local
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
España España

Mensajes: 2384


VsZeNeR


« Respuesta #14 : 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
En línea

Nos vemos en los bares!!!!!
RaDoN
Moderadores
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 1498



« Respuesta #15 : 14 de Agosto de 2005, 14:27:00 »

El programa de las luces del coche fantastico, seria mas facil rotando los bits del puerto en que esten los leds. Si estamos con el puerto B por ejemplo (y 8 leds).

Encendemos el led de rb0 y rotamos (<<Giño a la izquierda 7 veces, por ejemplo con un for, y luego a la derecha otras 7 (>>Giño y todo dentro de un buque (while(1)). Creo que así es mas sencillo y eficaz que ir encendiendo/apagando led a led con "output_bit".

Si alguien esta interesado subo el programa, pero weno, es una chorrada Payaso

Edito: woo, esta puesto arriba, posteamos a la vez jeje Avergonzado
En línea

Si juegas contra el mejor, pierdes como los demás.
vszener
Moderador Local
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
España España

Mensajes: 2384


VsZeNeR


« Respuesta #16 : 14 de Agosto de 2005, 14:29:00 »

De aqui os podeis descargar la otra forma del programa coche fantastico


Kit!!!!!!super turbooo!!!jeje Wink
« Última modificación: 25 de Mayo de 2006, 10:07:31 por vszener » En línea

Nos vemos en los bares!!!!!
LordLafebre
Giovanni Lafebre
Moderador Global
DsPIC30
*****
Desconectado Desconectado

Sexo: Masculino
Ecuador Ecuador

Mensajes: 3533


Micros y micros


WWW
« Respuesta #17 : 14 de Agosto de 2005, 14:47:00 »

Hola:

Amigo vszener perdon por meter basic en la seccion C pero me interesaria ir comparando los ejemplos en basic y en C, yo tengo hecho un ejemplo en basic que es este:

I       var byte
cont    var word

TRISB=0

inicio:
        cont=1
        for i=1 to 7
            PORTB=cont
            pause 100
            cont=cont*2
        next I
        for i=1 to 7
            PORTB=cont
            pause 100
            cont=cont/2
        next I
        goto inicio
end

Es para hacer el juego de luces del auto fantastico.... con 8 leds conectados al puerto B...

La descripcion del programa es el siguiente:

Tiene un bucle infinito que es inicio: GOTO inicio...y para la secuencia de luces hice un bucle que generelos valores 1-2-4-8-16-32-64-128 eso lo hago multiplicando la variable cont que empieza en 1 y luego se va multiplicando *2 i asi obtengo los valores, luego estos valores los asigno al puerto B y voy obteniendo la secuencia con la intruccion PORTB=dato... como puedo hacerlo en C de esta manera...

Quiero ir aprendiendo de acuerdo a los ejemplos que yo he ido haciendo... Digo si no es mucha molestia...!

Y una preguntita mas:

xq en algunas ocaciones utilizas esto: #use standard_io(B)
y en otras esto...................................: #use fast_io(b)

Tenme un poco de paciencia porfis.....!!!!!!!!!!!!!! Sonrisa GiganteSonrisa GiganteSonrisa GiganteMuchas risasMuchas risasMuchas risas
En línea

vszener
Moderador Local
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
España España

Mensajes: 2384


VsZeNeR


« Respuesta #18 : 14 de Agosto de 2005, 16:17:00 »

La adaptacion del codigo en basic que escribiste en c es la siguiente:

////////////////////////////////////////////////////////////////////////////////////
//                     VsZeNeR"05      
//                     14/Agosto/05
//
//   Programa:   Coche Fantastico
//   Version:   2.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. Adaptacion del codigo en basic de lordlafebre
//
//            RB0 -> 1º Led
//            RB1 -> 2º Led
//            RB2 -> 3º Led
//            RB3 -> 4º Led
//            RB4 -> 5º Led
//            RB5 -> 6º Led
//            RB6 -> 7º Led
//            RB7 -> 8º Led
//         En la variable cont se va almacenando los valores 1-2-4-8-16-32-64-128
//         que en binario corresponden a la secuencia 00000001-00000010-00000100...
//         son los led"s a iluminar, coincidiendo con la secuencia de iluminacion
//         del coche fantastico(version Ecuatoriana: auto fantastico)
//////////////////////////////////////////////////////////////////////////////////

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

///PROGRAMA
void main(void)
{
   int i,cont;                  //variables definidas
   set_tris_b(0x00);            //portb como salida
   disable_interrupts(GLOBAL);      //todas las interrupciones desactivadas
   
   do{                        //bucle...
      cont=1;                  //inicializar...
      i=1;                  //...variables
      
      do{                     //led"s on derecha
         output_b(cont);         //ilumino led correspondiente
         delay_ms(100);
         cont=cont*2;
         i++;               //incremento i
         }while(i<Cool;
         
      i=1;                  //reset valor i
      
      do{                     //led"s on izquierda
         output_b(cont);         //ilumino led correspondiente
         delay_ms(100);
         cont=cont/2;
         i++;               //incremento i
         }while(i<Cool;
         
      }while(TRUE);            //...infinito
}

He cambiado los dos bucles for que en basic estan escritos por dos while....el cambio la verdad lo he realizado porque con los bucles for me da un problema y no se de ke es!!!!jeje puede ser un bug del compilador al tratar la segunda asignacion del for o puede ser un bug en mi cabeza jeje(todo es posible).
Con respecto a tu pregunta de porque algunas veces pongo #use standard_io(B) y otras veces pongo #use fast_io(b) es simplemente segun la asignacion que le quiero dar al puerto en cuestion a tratar(en este caso el B), la #use standar_io() declara el puerto seleccionado como entrada y salida mientras que la otra debes configurar la accion especifica de cada pin del puerto(si tienen comparadores,interrupciones,etc), una cosita mas respecto a esta pregunta es que la asignacion #use fast_io() da problemas muchas veces y cuando vas a simular el programa ves que los puertos no responden como quisiera, por lo tanto recomendarte que uses la primera #use standard_io() aunque mirate el manual que lo explica mejor que yo jeje si tienes alguna duda ya sabes!!! Wink
« Última modificación: 25 de Mayo de 2006, 10:12:47 por vszener » En línea

Nos vemos en los bares!!!!!
vszener
Moderador Local
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
España España

Mensajes: 2384


VsZeNeR


« Respuesta #19 : 14 de Agosto de 2005, 16:27:00 »

Jeje al final era un bug de mi cabezita......ainssssss jeje aqui esta el codigo adaptado en c con las mismas sentencias que tu codigo en basic!!!!

////////////////////////////////////////////////////////////////////////////////////
//                     VsZeNeR"05      
//                     14/Agosto/05
//
//   Programa:   Coche Fantastico
//   Version:   2.1
//
//   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. Adaptacion del codigo en basic de lordlafebre
//
//            RB0 -> 1º Led
//            RB1 -> 2º Led
//            RB2 -> 3º Led
//            RB3 -> 4º Led
//            RB4 -> 5º Led
//            RB5 -> 6º Led
//            RB6 -> 7º Led
//            RB7 -> 8º Led
//         En la variable cont se va almacenando los valores 1-2-4-8-16-32-64-128
//         que en binario corresponden a la secuencia 00000001-00000010-00000100...
//         son los led"s a iluminar, coincidiendo con la secuencia de iluminacion
//         del coche fantastico(version Ecuatoriana: auto fantastico)
//////////////////////////////////////////////////////////////////////////////////

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

///PROGRAMA
void main(void)
{
   int i,cont;                  //variables definidas
   set_tris_b(0x00);            //portb como salida
   disable_interrupts(GLOBAL);      //todas las interrupciones desactivadas
   
   do{                        //bucle...
      cont=1;                  //inicializar...
      
      for(i=1;i<8;i++){         //led"s on derecha
         output_b(cont);         //ilumino led correspondiente
         delay_ms(100);
         cont=cont*2;
         }
      
      for(i=1;i<8;i++){
         output_b(cont);         //ilumino led correspondiente
         delay_ms(100);
         cont=cont/2;
         }
         
      }while(TRUE);            //...infinito
}

Miratelo y me rpeguntas lo que no entiendas okis???? Wink
« Última modificación: 25 de Mayo de 2006, 10:10:30 por vszener » En línea

Nos vemos en los bares!!!!!
TODOPIC
   

 En línea
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ... 25 Imprimir 
« anterior próximo »
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.20 | SMF © 2006-2008, Simple Machines XHTML 1.0 válido! CSS válido!
Página creada en 0.135 segundos con 26 consultas.
anything