Professional Documents
Culture Documents
UNIVERSIDAD DE PIURA
2015
Programacin C18
Contenido
Control de un Display..................................................................................... 3
Conceptos Bsicos:..................................................................................... 3
Descripcin del Circuito:.............................................................................4
Programacin:............................................................................................. 5
Programacin C18
Control de un LED mediante un pulsador
Conceptos Bsicos:
Elementos:
o PIC 18f4550:
o RES:
o LED:
o BUTTON:
Explicacin:
o Se alimenta al microcontrolador mediante la fuente de
poder (POWER) conectada al pin 1, por defecto este
entrega 5V, los necesarios para la alimentacin del
microcontrolador.
o Se conecta un pulsador, el cual uno de sus extremos se
conecta a un POWER y el otro extremo se conecta al pin
RA0 del microcontrolador. Cuando el BUTTON sea pulsado
comunicara una seal de 5V o 1L al PIC, caso contrario la
seal que recibe el PIC ser de 0V o 0L.
o El ejercicio consiste en configurar el pin RA0 como
entrada al microcontrolador, este deber leer la entrada
lgica que registra en este puerto y mostrarla en el pin
RD0
Microcontrolador
Resistencias de 330R y 1K
LED de color rojo para nuestro ejemplo
Botn pulsador
Programacin:
#include <p18f4550.h>
#include <config.h>
uC
void main (void)
{
ADCON1=0x0F;
TRISAbits.TRISA0=1;
TRISDbits.TRISD0=0;
LATDbits.LATD0=0;
Control de un Display
while(1)
Conceptos
Bsicos:
{
LATDbits.LATD0=PORTAbits.RA0;
entrada RA0
}
}
Nmero
1
2
4
8
16
32
64
128
RD7
0
0
0
0
0
0
0
1
RD6
0
0
0
0
0
0
1
0
RD5
0
0
0
0
0
1
0
0
PUERTO D
RD4
RD3
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
RD2
0
0
1
0
0
0
0
0
RD1
0
1
0
0
0
0
0
0
Elementos:
o PIC 18f4550:
Microcontrolador
o RES16DIPIS:
Barra de 9 resistencias
o LED-BARGRAPH: Barra de 10 LED de color verde
o RES:
Resistencia de 1K
Explicacin:
o Se alimenta al microcontrolador mediante la fuente de
poder (POWER) conectada al pin 1, por defecto este
entrega 5V, los necesarios para la alimentacin del
microcontrolador.
o El ejercicio consiste en configurar el puerto D como salida,
y copiar el valor de una variable i en este puerto, para
que sus valores lgicos enciendan uno a uno los
segmentos de la barra de LED de tal forma que se aprecie
un desplazamiento secuencial descendente.
o La funcin de la barra de resistencias es generar una
cada de tensin en el voltaje que est llegando a los
pines de la barra de LED, para protegerlos.
Programacin:
#include <p18f4550.h>
//incluimos la libreria del uC
#include <delays.h> //inlcuimos la libreria de los delays para poder llamarlos a travs de
funciones
#include <config.h> //incluimos los parametros de configuracion del uC
int i=1;
void main (void)
{
ADCON1=0x0F;
TRISD=0x00;
LATD=0;
while (1)
{
while(i<255)
unico bit en 1L
10
11
12
Elementos:
o PIC 18f4550:
Microcontrolador
o RES16DIPIS:
Barra de 9 resistencias
o LED-BARGRAPH: Barra de 10 LED de color verde
o RES:
Resistencia de 1K
Explicacin:
o Se alimenta al microcontrolador mediante la fuente de
poder (POWER) conectada al pin 1, por defecto este
entrega 5V, los necesarios para la alimentacin del
microcontrolador.
o El ejercicio consiste en configurar el puerto D como salida,
y copiar el valor de una variable i en este puerto, para
que sus valores lgicos enciendan uno a uno los
segmentos de la barra de LED de tal forma que se aprecie
un desplazamiento secuencial descendente.
o La funcin de la barra de resistencias es generar una
cada de tensin en el voltaje que est llegando a los
pines de la barra de LED, para protegerlos.
13
Programacin:
#include <p18f4550.h>
#include <config.h>
#include <timers.h>
int i=1;
//Definimos una variable tipo int llamada i cuyo valor inicial es 1
int second_counter = 900;
//Definimos una variable tipo int llamada second_counter cuyo
valor inicial es 900
void Interruption_Timer0();//Definimos una subrutina llamada Interruption_Timer0
#pragma code Interrupcion = 0X0008 // Creamos una nueva seccin de cdigo a partir de la
direccin 0x08
void VectorInterrupcion(void){
Interruption_Timer0(); // enlazamos al vector interrupcin
}
#pragma code
// Cerramos seccin.#pragma interrupt Interruption_Timer0 //configuramos Interruption_Timer0 como subrutina por
interrupcin
void Interruption_Timer0(void){
if(INTCONbits.TMR0IF==1) //Nos aseguramos que la interrupcin sea por desbordamiento
del TIMER0
{
INTCONbits.TMR0IF=0; //Regresamos el bit de bandera a 0
WriteTimer0(60);
//Empezamos el contador en 60
second_counter++;
//Aumentamos en 1 el valor de la variable second_counter
if(second_counter==965)
//Esperamos que la variable second_counter sea igual a
965
{
second_counter=0;
//Regresamos a 0 la cuenta de la variable second_counter
LATD=i;
//El puerto D asume el valor de la variable i
if(i<255)
//Establecemos como condicin de funcionamiento que el unico bit en
1L
{
//este como mximo en la posicin 8 del puerto
i=i<<1;
//Desplazamos el nico bit en 1L de la variable hacia la izquierda.
}else
{
i=1;
//Superado el valor de 255, establecemos el valor de la variable en 1
nuevamente
}
}
}
}
void main (void)
{
ADCON1=0x0F;
TRISD=0x00;
LATD=0;
INTCONbits.GIE=1;
RCONbits.IPEN=0;
INTCONbits.T0IE=1;
INTCONbits.PEIE=1;
14
variable i,
esta vez tambin definiremos la variable
second_counter tipo int, debido a que el PIC no permite
trabajar con retrasos de tiempo muy grandes una alternativa de
solucin es acumular los tiempos de espera, en este caso
acumulados en la variable secon_counter.
3. Definimos la subrutina que se ejecutara una vez que el TIMER0
15
d. INTCONbits.PEIE=1;
16
17
Control de un Display
Conceptos Bsicos:
18
Elementos:
o PIC 18f4550:
Microcontrolador
o RES16DIPIS:
Barra de 8 resistencias
o 7SEG-MPX1-CC: Display de 7 segmentos con ctodo
comn
Explicacin:
o Se alimenta al microcontrolador mediante la fuente de
poder (POWER) conectada al pin 1, por defecto este
entrega 5V, los necesarios para la alimentacin del
microcontrolador.
o El ejercicio consiste en configurar el puerto D como
puerto de salida para los valores lgicos que influirn en
el encendido de los segmentos del display, al ser un
display de 7 segmentos con Ctodo Comn necesitamos
dar un valor de 1 lgico o 5V al pin correspondiente al
segmento del display para encenderlo.
o La funcin de la barra de resistencias es generar una
cada de tensin en el voltaje que est llegando a los
pines del display, para protegerlo.
19
Programacin:
#include <p18f4550.h>
#include <config.h>
#include <delays.h>
char number=0;
valor inicial es 0
void main(void)
{
ADCON1=15; //Configuramos entradas/salidas digitales
TRISD=0x00; //Configuramos el puerto D como salida
TRISA=0x00; //Configuramos el puerto A como salida
LATD=0;
//Escribimos 0 en todos los pines del puerto D
LATA=0xff;
//Activamos los display a partir del Puerto A
while(1){
if(number==10){
//proteccin para evitar que la variable
number
number=0;
//supere el valor de 9
}
switch(number){
de number
case 0:
LATD=0b00111111;
break;
case 1:
LATD=0b00000110;
break;
case 2:
LATD=0b01011011;
break;
case 3:
LATD=0b01001111;
break;
case 4:
LATD=0b01100110;
break;
case 5:
LATD=0b01101101;
break;
case 6:
LATD=0b01111101;
break;
case 7:
LATD=0b00000111;
break;
case 8:
LATD=0b01111111;
break;
case 9:
LATD=0b01101111;
break;
//mostramos 0 en el display
//mostramos 1 en el display
//mostramos 2 en el display
//mostramos 3 en el display
//mostramos 4 en el display
//mostramos 5 en el display
//mostramos 6 en el display
//mostramos 7 en el display
//mostramos 8 en el display
//mostramos 9 en el display
20
21
Nmero
0
1
2
3
4
5
6
7
8
9
RD7
Dot
0
0
0
0
0
0
0
0
0
0
RD6
G
0
0
1
1
1
1
1
0
1
1
RD5
f
1
0
0
0
1
1
1
0
1
1
RD4
e
1
0
1
0
0
0
1
0
1
0
RD3
d
1
0
1
1
0
1
1
0
1
1
RD2
c
1
1
0
1
1
1
1
1
1
1
RD1
b
1
1
1
1
1
0
0
1
1
1
RD0
A
1
0
1
1
0
1
1
1
1
1
22
23