Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
///
Practica 1 :
Parpadeo de LEDS con PIC16F84A
///
///
para el foro.elhacker.net
by Marco
///
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
port_b=contador;
/// Retardo de 1000 milisegundos es decir 1 segundo
delay_ms(1000);
} /// fin de bucle while
} /// fin de funcion principal main
aqui los archivos para PICC y Proteus
http://foro.elhacker.net/electronica/introduccion_a_la_programacion_de_pics_en_lenguaje_c_ccst174021.0.html;msg824964#ixzz1XiDoFnfW
/////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////
Practica 2
/////////////////////////////////
// Esta practica pasa la informacion que hay en el puerto B y la pasa
//
//
al puerto A
//
///////////////////////// By Marco_recargado ///////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
#include <16F877A.h>
#use delay(clock=8000000)
#fuses HS,NOWDT,NOPUT,NOLVP,NOBROWNOUT,NOWRT,NOPROTECT
#use fast_io(B)
#use fast_io(C)
#byte portb = 6
#byte portc = 7
void main(void)
{
while(true)
{
set_tris_b(0xff);
set_tris_c(0x00);
port_b_pullups(true);
portc=portb;
}
}
// Bucle infinito
// se configura el puerto A como entrada
// se configura el puerto B como salida
// activa las resistencias de pull-up
// fin de programa
http://foro.elhacker.net/electronica/introduccion_a_la_programacion_de_pics_en_lenguaje_c_ccst174021.0.html;msg833331#ixzz1XiEMU0Xl
Aqui esta otro programa en este caso es la visualizacion de dos display por el portb
////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////Practica 3 ///////////////////////////////////////////
////////Visualiza un conteo por el PORTB a travez de dos display de 8 seg////////
////////////////////////// By MARCO_RECARGADO///////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////
#include <16F877A.h>
/// libreria para el manejo del pic16f877a
#use delay(clock=8000000)
/// declara la frecuencia del cristal
#fuses HS,NOWDT,NOPUT,NOLVP,NOBROWNOUT,NOWRT,NOPROTECT
int conteo=0;
#use
#use
#use
#use
#use
fast_io(A)
fast_io(B)
fast_io(C)
fast_io(D)
fast_io(E)
#byte
#byte
#byte
#byte
#byte
porta = 5
portb = 6
portc = 7
portd = 8
porte = 9
////////////////////////////////////////////////////////////////////////////////////
//////////////////////inicio del programa principal/////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
void main(void)
{
set_tris_b(0x00);
while(true)
{
conteo++;
if((conteo&0x0f)>9)
//bucle infinito
{
conteo=conteo+10;
// hacemos que los 4 bits mas significativos incrementen
conteo=conteo&0xf0;
}
if(conteo>99) {conteo=0;}
// verificamos que la cuenta se haga de 0 a 99
else{ portb=conteo; delay_ms(400);}
}
//fin de ciclo while
}
//fin de programa
http://foro.elhacker.net/electronica/introduccion_a_la_programacion_de_pics_en_lenguaje_c_ccst174021.0.html;msg844004#ixzz1XiEwQoA5
////////////////////////////////////////////////////////////////////////////////
//////////////
Practica 2
//////////////////////
//////////////
practica que escribe en una LCD
//////////////////////
////////////////////////////////////////////////////////////////////////////////
//////////////
By MARCO RECARGADO
//////////////////////
////////////////////////////////////////////////////////////////////////////////
#include <16F877A.h>
/// libreria para el manejo del pic16f877a
#use delay(clock=8000000)
/// declara la frecuencia del cristal
#fuses HS,NOWDT,NOPUT,NOLVP,NOBROWNOUT,NOWRT,NOPROTECT
#include <lcd.c> // Librera para el manejo del lcd para ver las conexiones
// abran el archivo C:\Archivos de programa\PICC\Drivers\lcd.c
// y ahi les muestra.
////////////////////////////////////////////////////////////////////////////////
//
D0 enable
//
D1 rs
//
D2 rw
//
D4 D4
//
D5 D5
//
D6 D6
//
D7 D7
////////////////////////////////////////////////////////////////////////////////
void main(void)
{
lcd_init(); // Antes de usar el lcd,hay que inicializarlo
lcd_putc("HOLA MUNDO"); // Escribes en la lcd
} // fin de programa
para poder meter un valor de una variable hay que escribir lo siguiente
printf(lcd_putc," %d volts ",variable_adc);
y con esto escribes el valor de tu variable tenemos que tener cuidado en el tipo de
variable pues este ejemplo es para un tipo entero s ifuera para un tipo float tendria que ser %f y para
varios mas
http://foro.elhacker.net/electronica/introduccion_a_la_programacion_de_pics_en_lenguaje_c_ccst174021.0.html;msg857910#msg857910#ixzz1XiFTpc9m
me gusto la practica de lcd y aprendi bocha y hice un agregado al programa original para q entre
todos entendamos un poco mas, creo q haciendo una buena rutina en c se puede manejar por
espacios el display...
////////////////////////////////////////////////////////////////////////////////
//////////////
Practica 2
//////////////////////
//////////////
practica que escribe en una LCD
//////////////////////
////////////////////////////////////////////////////////////////////////////////
//////////////
By MARCO RECARGADO
//////////////////////
////////////////////////////////////////////////////////////////////////////////
#include <16F877A.h>
/// libreria para el manejo del pic16f877a
#use delay(clock=8000000)
/// declara la frecuencia del cristal
#fuses HS,NOWDT,NOPUT,NOLVP,NOBROWNOUT,NOWRT,NOPROTECT
#include <lcd.c> // Librera para el manejo del lcd para ver las conexiones
// abran el archivo C:\Archivos de programa\PICC\Drivers\lcd.c
// y ahi les muestra.
////////////////////////////////////////////////////////////////////////////////
//
D0 enable
//
D1 rs
//
D2 rw
//
D4 D4
//
D5 D5
//
D6 D6
//
D7 D7
////////////////////////////////////////////////////////////////////////////////
int i;
void main(void)
{
lcd_init(); // Antes de usar el lcd,hay que inicializarlo
while (1){
lcd_gotoxy(5,1);
lcd_putc("Martin"); // Escribes en la lcd
delay_ms(50);
for(i=0;i<8;++i){
lcd_putc("\fM\n");
delay_ms(30);
lcd_putc("\f a\n");
delay_ms(30);
lcd_putc("\f t\n");
delay_ms(30);
lcd_putc("\f i\n");
delay_ms(30);
lcd_putc("\f n\n");
delay_ms(30);
}}
} // fin de programa
http://foro.elhacker.net/electronica/introduccion_a_la_programacion_de_pics_en_lenguaje_c_ccst174021.0.html;msg857910#msg857910#ixzz1XiFjOqsk
Hola pues en esta ocasion la practica consiste en leer un reloj de tiempo real.
con ayuda de una libreria
////////////////////////////////////////////////////////////////////////////////
////////////ESTE PROGRAMA UTILZA EL CIRCUITO DS1307 PARA MOSTRAR LA ////////////
//////////HORA EN TIEMPO REAL A TRAVEZ DE UNOS DISPLAYS DE 7 SEGMENTOS/////////
//////////EL PROGRAMA PARA SIMULARLO EN PROTEUS SE LLAMA RELOJ TIEMPO REAL//////
////////////////////////BY MARCO RECARGADO//////////////////////////////////////
#include <16F877A.h>
/// libreria para el manejo del pic16f877a
#use delay(clock=8000000)
/// declara la frecuencia del cristal
#fuses HS,NOWDT,NOPUT,NOLVP,NOBROWNOUT,NOWRT,NOPROTECT
#use i2c(Master, SDA=PIN_C4, SCL=PIN_C3)
#include <ds1307.c>
int32 tiempo_real=0;
long dato_1=0;
long dato_2=0;
long dato_3=0;
long dato_4=0;
long dato_5=0;
long dato_6=0;
#use fast_io(A)
#use fast_io(B)
//#use fast_io(C)
#use fast_io(D)
#use fast_io(E)
#byte portc = 7
#byte portd = 8
#bit
#bit
#bit
#bit
#bit
#bit
#bit
#bit
portd0
portd1
portd2
portd3
portd4
portd5
portd6
portd7
=
=
=
=
=
=
=
=
0x08.0
0x08.1
0x08.2
0x08.3
0x08.4
0x08.5
0x08.6
0x08.7
#bit
#bit
#bit
#bit
#bit
#bit
#bit
#bit
portc0
portc1
portc2
portc3
portc4
portc5
portc6
portc7
=
=
=
=
=
=
=
=
0x07.0
0x07.1
0x07.2
0x07.3
0x07.4
0x07.5
0x07.6
0x07.7
#bit
#bit
#bit
#bit
dato_6a = dato_6.0
dato_6b = dato_6.1
dato_6c = dato_6.2
dato_6d = dato_6.3
#bit
#bit
#bit
#bit
dato_5a = dato_5.0
dato_5b = dato_5.1
dato_5c = dato_5.2
dato_5d = dato_5.3
#bit
#bit
#bit
#bit
dato_4a = dato_4.0
dato_4b = dato_4.1
dato_4c = dato_4.2
dato_4d = dato_4.3
#bit
#bit
#bit
#bit
dato_3a = dato_3.0
dato_3b = dato_3.1
dato_3c = dato_3.2
dato_3d = dato_3.3
#bit
#bit
#bit
#bit
dato_2a = dato_2.0
dato_2b = dato_2.1
dato_2c = dato_2.2
dato_2d = dato_2.3
#bit
#bit
#bit
#bit
dato_1a = dato_1.0
dato_1b = dato_1.1
dato_1c = dato_1.2
dato_1d = dato_1.3
byte
byte
byte
byte
byte
byte
byte
sec;
min;
hrs;
day;
month;
yr;
dow;
////////////////////////////////////////////////////////////////////////////////
////////funcion que manda el a desplagar informacion en los displays////////////
/////Tomese en cuenta que las conexiones de los puertos son las siguientes//////
//
pc0=a
//
//
pc1=b
//
//
pc6=d
//
//
pc7=c
//
//
pd1=digito 6
//
//
pd4=digito 5
//
//
pd0=digito 4
//
//
pd7=digito 3
//
//
pd5=digito 2
//
//
pd6=digito 1
//
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
void desplegar()
{
portd1=0;
portd4=0;
portd0=0;
portd7=0;
portd5=0;
portd6=0;
portc0=dato_6a;
portc7=dato_6b;
portc1=dato_6c;
portc6=dato_6d;
portd1=1;
portd1=0;
portc0=dato_5a;
portc7=dato_5b;
portc1=dato_5c;
portc6=dato_5d;
portd4=1;
portd4=0;
portc0=dato_4a;
portc7=dato_4b;
portc1=dato_4c;
portc6=dato_4d;
portd0=1;
portd0=0;
portc0=dato_3a;
portc7=dato_3b;
portc1=dato_3c;
portc6=dato_3d;
portd7=1;
portd7=0;
portc0=dato_2a;
portc7=dato_2b;
portc1=dato_2c;
portc6=dato_2d;
portd5=1;
portd5=0;
portc0=dato_1a;
portc7=dato_1b;
portc1=dato_1c;
portc6=dato_1d;
portd6=1;
portd6=0;
}
////////////////////////////////////////////////////////////////////////////////
//////////////////////Comienzo de la funcion principal//////////////////////////
////////////////////////////////////////////////////////////////////////////////
void main()
{
ds1307_init();
set_tris_a(0xff);
set_tris_d(0x00);
set_tris_b(0x00);
set_tris_c(0x04);
set_tris_e(0x01);
port_b_pullups(true);
dato_1=8;
dato_2=8;
dato_3=8;
dato_4=8;
dato_5=8;
dato_6=8;
desplegar();
// Set date for -> 15 June 2005 Tuesday
// Set time for -> 15:20:55 (9:49:00 am)
ds1307_set_date_time(24,4,7,2,9,49,00);
while(1)
{
delay_ms(1000);
ds1307_get_date(day,month,yr,dow);
ds1307_get_time(hrs,min,sec);
http://foro.elhacker.net/electronica/introduccion_a_la_programacion_de_pics_en_lenguaje_c_ccst174021.0.html;msg861704#msg861704#ixzz1XiG3RWko
void main() {
uno:
set_tris_a(0xff);
set_tris_c(0x00);
set_tris_b(0x00);
SETUP_ADC(ADC_CLOCK_INTERNAL);
// configuras esto para que el a/d funcione con un reloj
interno del micro
SETUP_ADC_PORTS(AN0);
// aca determianr que el puerto RA0 ser analgico
SET_ADC_CHANNEL(0);
// con esto fijas el canal con el qeu trabajas, en este caso 0
por el RA0
output_b(READ_ADC());
uestra el en puerto b
LED;
goto uno;}
http://foro.elhacker.net/electronica/introduccion_a_la_programacion_de_pics_en_lenguaje_c_ccst174021.0.html;msg934861#ixzz1XiGHtgjh
#use
#use
#use
#use
#use
fast_io(A)
fast_io(B)
fast_io(C)
fast_io(D)
fast_io(E)
#byte
#byte
#byte
#byte
#byte
porta = 5
portb = 6
portc = 7
portd = 8
porte = 9
canal0=0;
unidades=0;
decenas=0;
centenas=0;
void main ()
{
set_tris_b(0b00000000);
set_tris_c(0b00000000);
set_tris_d(0b00000000);
set_tris_e(0b11111111);
SETUP_ADC(ADC_CLOCK_INTERNAL);
setup_adc_ports(all_analog);
SET_ADC_CHANNEL(0);
DISABLE_INTERRUPTS(global);
while(1)
{
canal0= READ_ADC();
delay_ms(1);
centenas=canal0/100;
decenas=(canal0 - (centenas*100))/10;
unidades=(canal0 - (centenas*100) - (decenas*10));
portb=centenas;
portc=decenas;
portd=unidades;
delay_ms(100);
}
}
http://foro.elhacker.net/electronica/introduccion_a_la_programacion_de_pics_en_lenguaje_c_ccst174021.0.html;msg972288#ixzz1XiH4OyqI