Vous êtes sur la page 1sur 15

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!
En línea
· Nos vemos en los bares!!!!!

· Mi Blog: Aqueronte
LordLafebre
 Moderador Global
 DsPIC30


 Mensajes: 3529


o

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...?
En línea

http://microsymicros.nixiweb.com/

http://micros.mforos.com/
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=13
35&dDocName=en010210

En línea

· Nos vemos en los bares!!!!!

· Mi Blog: Aqueronte
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!!!
16f628a led on-off.rar (10.83 kB - descargado 838 veces.)

Parpadeo un led.rar (13.26 kB - descargado 784 veces.)


« Última modificación: 25 de Mayo de 2006, 09:58:04 por vszener »
En línea

· Nos vemos en los bares!!!!!

· Mi Blog: Aqueronte
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.....


En línea

· Nos vemos en los bares!!!!!

· Mi Blog: Aqueronte
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!!!jeje


En línea

· Nos vemos en los bares!!!!!

· Mi Blog: Aqueronte
LordLafebre
 Moderador Global
 DsPIC30


 Mensajes: 3529


o
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"


En línea

http://microsymicros.nixiweb.com/

http://micros.mforos.com/
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 jeje


En línea

· Nos vemos en los bares!!!!!

· Mi Blog: Aqueronte
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!!!
parpadeo4leds.rar (14.6 kB - descargado 607 veces.)
« Última modificación: 25 de Mayo de 2006, 10:03:13 por vszener »
En línea

· Nos vemos en los bares!!!!!

· Mi Blog: Aqueronte
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 respondio ), 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!


En línea

· Nos vemos en los bares!!!!!

· Mi Blog: Aqueronte
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!!!


coche fantastico.rar (14.5 kB - descargado 716 veces.)
« Última modificación: 25 de Mayo de 2006, 10:05:55 por vszener »
En línea

· Nos vemos en los bares!!!!!

· Mi Blog: Aqueronte
LordLafebre
 Moderador Global
 DsPIC30


 Mensajes: 3529


o

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?


En línea

http://microsymicros.nixiweb.com/

http://micros.mforos.com/
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=13
35&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!!!!jeje
En línea

· Nos vemos en los bares!!!!!

· Mi Blog: Aqueronte
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
}

Vous aimerez peut-être aussi