Manual Pic c

49
INTRODUCCION El presente texto tiene como objetivo ser una herramienta de ayuda en el aprendizaje de la programación de microcontroladores PIC en el entorno del lenguaje C, para que el estudiante se encuentre capacitado para poder resolver todo tipo de proyectos de manera sencilla y práctica usando lenguajes de alto nivel. Brindaremos una secuencia de temas que se ha visto conveniente para una aprendizaje rápido y sencillo, con ejercicios y ejemplos que serán desarrollados en clase y una guía de practica como algunos ejercicios que el estudiante deberá resolver para mejorar su aprendizaje y afianzar sus conocimientos adquiridos, así como la entrega de ejemplos por parte del docente para poder desarrollar diferentes trabajos.

Transcript of Manual Pic c

Page 1: Manual Pic c

INTRODUCCION

El presente texto tiene como objetivo ser una herramienta de ayuda en el

aprendizaje de la programación de microcontroladores PIC en el entorno del

lenguaje C, para que el estudiante se encuentre capacitado para poder resolver

todo tipo de proyectos de manera sencilla y práctica usando lenguajes de alto

nivel.

Brindaremos una secuencia de temas que se ha visto conveniente para una

aprendizaje rápido y sencillo, con ejercicios y ejemplos que serán desarrollados

en clase y una guía de practica como algunos ejercicios que el estudiante deberá

resolver para mejorar su aprendizaje y afianzar sus conocimientos adquiridos, así

como la entrega de ejemplos por parte del docente para poder desarrollar

diferentes trabajos.

Page 2: Manual Pic c

1. ¿QUE ES UN MICROCONTROLADOR?

Un microcontrolador es un circuito integrado programable que contiene todos los

componentes necesarios para controlar el funcionamiento de una tarea

determinada, como el control de una lavadora, un teclado de ordenar, un sistema

de alarma, un robot.

Para esto, el microcontrolador debe disponer de una memoria donde se almacena

el programa que gobierne el funcionamiento del mismo que, una vez programado

y configurado, solo sirve para realizar la tarea asignada.

La utilización de un microcontrolador en un circuito reduce notablemente el

tamaño y número de componentes y, en consecuencia, disminuye el número de

averías y el volumen y el peso de los equipos, entre otras ventajas.

El microcontrolador es uno de los inventos más notables del siglo XX. En el

mercado hay gran cantidad de ellos, con multitud de posibilidades y

características. Cada tipo de microcontrolador sirve para una serie de casos y es el

diseñador del sistema quien debe decidir cuál es el microcontrolador más idóneo

para cada uso.

En los últimos años han tenido un gran auge los microcontroladores PIC

fabricados por Microchip Technology Inc. Los PIC (Peripheral Interface Controller)

son una familia de microcontroladores que ha tenido gran aceptación y desarrollo

en los últimos años gracias a que sus buenas características, bajo precio, reducido

consumo, pequeño tamaño, gran calidad, fiabilidad y abundancia de información,

lo convierten en muy fácil, como y rápido de utilizar.

1.1 DIFERENCIA ENTRE MICROPROCESADOR Y MICROCONTROLADOR

El microprocesador es un circuito integrado que contiene la Unidad Central

de Proceso (UCP), también llamado procesador, de un computador. La UCP

Page 3: Manual Pic c

está formada por la Unidad de Control, que interpreta las instrucciones, y

el Camino de Datos, que las ejecuta.

Las patitas del microprocesador sacan al exterior las líneas de sus buses

de direcciones, datos y control, para permitir conectarle con la Memoria y

los Módulos E/S y configurar un computador implementado por varios

circuitos integrados. Se dice que un microprocesador es un sistema

abierto porque su configuración es variable de acuerdo con la aplicación a

la que se destine.

Un microprocesador es un sistema abierto, con el que puede construirse

un computador las características que se desee, acoplándole módulos

necesarios.

Un microcontrolador es un sistema cerrado que contiene un

computador completo y de prestaciones limitadas que no se pueden

modificar.

Page 4: Manual Pic c

1.2 ARQUITECTURA INTERNA

Un microcontrolador posee todos los componentes de un computador, pero

con unas características fijas que no pueden alterarse.

Las partes principales de un microcontrolador son:

1.2.1 Procesador

1.2.2 Memoria no volátil para contener el programa.

1.2.3 Memoria de lectura y escritura para guardar datos

1.2.4 Lineas de E/S para los controles periféricos:

a) Comunicación en serie

b) Comunicación en paralelo

c) Diversas puertas de comunicación

1.2.5 Recursos auxiliares:

a) Circuito de reloj, encargado de generar los impulsos que

sincronizan el funcionamiento de todo el sistema.

b) Temporizadores, orientados a controlar tiempo.

c) Perro guardián (<<Watchdog>>), destinado a provocar una

reinicializacion cuando el programa queda bloqueado.

Page 5: Manual Pic c

d) Conversores AD y DA, para poder recibir y enviar señales

analógicas.

e) Comparadores analógicos, para verificar el valor de una entrada

analógica.

f) Proteccion ante fallos de la alimentación

g) Estado de reposo o de bajo consumo, en el que el sistema queda

<<congelado>> y el consumo de energía se reduce al minimo.

1.3 FAMILIA DE LOS MICROCONTROLADORES

Uno de los labores más importantes del ingeniero en el diseño es la elección

del microcontrolador que mejor satisfaga las necesidades del proyecto con el

mínimo presupuesto.

1.3.1 Gama baja o básica: PIC 16C5X con instrucciones de 12 bits

Se trata de una serie de PIC de recursos limitados, pero con una de las mejores

relaciones coste/prestaciones. Sus versiones están encapsuladas con 18 y 28

Page 6: Manual Pic c

patitas y pueden alimentarse a partir de una tensión de 2.5 V, lo que les hace

ideales en las aplicaciones que funcionan con pilas.

1.3.2 Gama media: PIC 16FXXXX con isntrucciones de 14 bits

Es la gama mas variada y completa de los PIC. Abarca modelos desde 18 a 68

patitas, cubriendo varias opciones que integran abudantes periféricos. Dentro

de ellos se encuentra el famoso <<16f628a>>, disponen de interrupciones y

una Pila de 8 niveles que permite el anidamiento de subrutinas.

1.3.3 Gama mejorada: PIC 18FXXX con instrucciones de 16 bits

Microchip presento la gama mejorada de los microcontroladores PIC con la

finalidad de soportar las aplicaciones avanzadas en las aéreas de automoción,

comunicaciones, ofimática y control industrial. Sus modelos destacaron por su

alta velocidad (40 Mhz) y su gran rendimiento.

1.3.4 Los enanos de 8 patitas <<PIC AXES>>: PIC 12FXXX

Que ha acaparado la atención del mercado. Su característica principal es su

reducido tamaño, al disponer un encapsulado de 8 patitas. Se alimentan con

un voltaje de corriente continua comprendido entre 2,5 V y 5,5 V y consumen

menos de 2mA cuando trabajan a 5V y 4Mhz.

Page 7: Manual Pic c

2. PIC 16F628A

El microcontrolador PIC16F628A de microchip pertenece a una gran familia de

microcontroladores de 8 bits (bus de datos) que tienen las siguientes

características generales que lo distinguen de otras familias:

Arquitectura Harvard

Tecnología RISC

Tecnología CMOS

Estas características se conjugan para lograr un dispositivo altamente eficiente en

el uso de la memoria de datos y programa, por lo tanto en la velocidad de

ejecución.

Los microcontroladores que produce Microchip cubren un amplio rango de

dispositivos cuyas características pueden variar como sigue:

Empaquetado (desde 8 a 68 patitas)

Tecnología de la memoria incluida (EEPROM,ROM,FLASH)

Voltaje de operación (desde 2.5 V hasta 6V)

Frecuencia de operación (hasta 20Mhz)

2.1 EMPAQUETADOS

Aunque cada empaquetado tiene variantes, especialmente en lo relativo a

las dimensiones del espesor del paquete, en general pueden encontrar

paquetes tipo PDIP (plastic dual in line package), PLCC (plastic leaded chip

carrier) y QFP (quad flat package)

Page 8: Manual Pic c

2.2 NOMENCLATURA

En la siguiente tabla se especifican los rangos de voltaje estándar y extendido

manejados por los dispositivos.

Rango de voltaje EPROM ROM FLASH

Estándar C 4.5 a 6V CR 4.5 A 6V F 4.5 A 6V

extendido LC 2.5 A 6V LCR 2.5 A 6V LF 2 A 6V

2.3 OSCILADOR

Los PIC de rango medio permiten hasta 8 diferentes modos para el oscilador.

El usuario puede seleccionar alguno de estos 8 modos programando 3 bits de

configuración del dispositivo denominados: FOSC2, FOSC1 Y FOSC0. En

algunos de estos modos el usuario puede indicar que se genere o no una

salida del oscilador (CLKOUT) a través de una patita de Entrada/Salida. Los

modos de operación se muestran en la siguiente lista:

LP Baja frecuencia (bajo consumo de potencia)

XT Cristal (media frecuencia)

HS Alta velocidad Cristal

RC Resistencia/capacitor externos

EXTRC Resistencia/capacitor externos

EXTRC Resistencia/capacitor externos con CLCKOUT

INTRC Resistencia/capacitor internos para 4Mhz

INTRC Resistencia/capacitor internos para 4Mhz con CLKOUT

Los 3 modos LP, XT Y HS usan un cristal, la diferencia sin embargo es la ganancia

de los drivers internos, lo cual se ve reflejado en el rango de frecuencia admitido y

la potencia consumida.

Page 9: Manual Pic c

2.4 DIAGRAMA DE BLOQUES DEL PIC 16F628A

En la siguiente figura se muestra una manera de bloques de organización

interna del PIC 16F628a. Se muestra también junto a este diagrama, su

diagrama de patitas, para tener una visión conjunta del interior y exterior del

Chip.

Page 10: Manual Pic c

3. LENGUAJES DE PROGRAMACION PARA MICROCONTROLADORES PIC

3.1 MAQUINA

Lenguaje de maquina es el sistema de códigos directamente interpretable por

un circuito micro programable, como el microprocesador de una computadora

o el microcontrolador de una autómata. El lenguaje está compuesto por un

conjunto de instrucciones que determinan acciones a ser tomadas por la

máquina.

1111100110011

W W +68

3.2 ASSEMBLER

El lenguaje maquina es difícil de utilizar por el hombre ya que se aleja de su

forma natural de expresarse, por esto se utiliza el lenguaje assembler, que es

la forma de expresar las instrucciones de una forma más natural al hombre y

que sin embargo es muy cercana al microcontrolador por que cada uno de sus

instrucciones se corresponde con otra en código maquina que el

microcontrolador es capaz de entender.

Instrucción:

Si el dato del tmr1 es 15 ejecutar tarea uno, si no lo es ejecutar tarea 2

Movlw .15

Xorwf. Tmr1,w

Btfss status,z

Goto tarea2; F

Goto tarea1; V

Page 11: Manual Pic c

3.3 LENGUAJES DE ALTO NIVEL

3.3.1 LENGUAJE C

COMPILADORES

a) CCS COMPILER

b) C18 MICROCHIP

c) PIC HIGH TECH

d) MIKRO C

3.3.2 LENGUAJE BASIC

COMPILADORES

a) PIC BASIC

b) PIC BASIC PRO

c) MIKRO BASIC

3.3.3 PASCAL

COMPILADORES

a) MIKRO PASCAL

4. COMPILADOR CCS

El compilador C de CCS ha sido desarrollado específicamente para PIC MCU,

obtenido la máxima optimización del compilador con estos dispositivos. Dispone

de una amplia librería de funciones predefinidas, comandos pre procesados y

ejemplos. Además, suministra los controladores (drivers) para diversos

dispositivos como el LCD, convertidores AD, relojes en tiempo real, EEPROM serie,

etc.

Un compilador convierte el lenguaje de alto nivel a instrucciones en código

maquina; un cross-compiler es un compilador que funciona en un procesador

(normalmente PC) diferente al procesador objeto. El compilador CCS es un cross-

compiler. Los programas son editados y compilados a instrucciones maquina en el

Page 12: Manual Pic c

entorno de trabajo del PC, el código maquina puede ser cargado del PC al sistema

PIC mediante ICD2, y puede ser depurado desde el entorno de trabajo del PC.

4.1 ESTRUCTURA DEL PROGRAMA

Para escribir en un programa en C con el CCS C se debe tener en cuenta una

serie de elementos básicos de su estructura.

DIRECTIVAS DE PROCESADO, controlan la conversión del programa o

código maquina por parte del compilador.

PROGRAMAS O FUNCIONES, conjunto de instrucciones. Puede haber uno

o varios; en cualquier caso siempre debe haber uno definido como

principal mediante la instrucción <<main();>>.

INSTRUCCIONES, indican como se debe conectar el PIC en todo

momento.

COMENTARIOS, permiten describir lo que significa cada línea del

programa.

Page 13: Manual Pic c

5. VARIABLES Y DATOS

5.1 TIPO DE DATOS

CCS acepta los siguientes tipos de variables

TIPO TAMAÑO RANGO DESCRIPCION

INT1

SHORT

1 BIT 0 A 1 ENTERO DE 1 BIT

INT

INT8

8 BIT 0 A 255 ENTERO

INT16

LONG

16 BIT 0 A 65,535 ENTERO DE 16 BIT

FLOAT 32 BIT

COMA FLOTANTE

CHAR 8 BIT 0 A 255 CARÁCTER

VOID - - SIN VALOR

SIGNED INT8 8 BIT -128 a 127 ENTERO CON

SIGNO

SIGNED INT16 16 BIT -32768 a 32767 ENTERO LARGO

CON SIGNO

5.2 LAS CONSTANTES

123 Decimal

01234 Octal (0)

0x123 Hexadecimal (0x)

0b010010 Binario (0b)

‘x’ Carácter

‘\012’ Carácter octal

‘\xA6’ Carácter hexadecimal

Page 14: Manual Pic c

5.3 DECLARACION DE VARIABLES

Las variables se utilizan para nombrar posiciones de memoria RAM; se debe

declarar obligatoriamente, antes de utilizarlas; para ello se debe indicar el

nombre y el tipo de dato que se manejará. Se definen de la siguiente forma:

TIPO NOMBRE = [=VALOR INICIAL];

int dato1 = 0;

int dato1;

Las variables definidas pueden ser de tipo LOCAL o GLOBAL. Las varialbes

locales se utilizan solo en la función donde se encuentran declaradas mientras

que las variables globales se pueden usar en todo las funciones del programa.

Antes deben declararse antes de toda función y fuera de ellas.

int i = 240; //variable global

void main (void)

{

Int x = 9;// variable local

}

5.4 OPERADORES

5.4.1 DE ASIGNACION

+= Asignacion de suma (x=x+y)

-= Asignacion de resta (x=x-y)

*= Asignacion de multiplicacion (x=x*y)

/= Asignacion de division (x=x/y)

%= Asignacion de resto de la division (x=x%y)

<<= Asignacion desplazamiento a la izquierda (x=x<<y)

>>= Asignacion desplazamiento a la derecha (x=x>>y)

&= Asignacion AND en bits (x=x&y)

|= Asignacion OR en bits (x=x|y)

^= Asignacion XOR en bits (x=x^y)

Page 15: Manual Pic c

5.4.2 ARITMETICOS

+ SUMA

- RESTA

* MULTIPLICACION

/ DIVISION

% RESTO DE LA DIVISION

++ INCREMENTO

-- DECREMENTO

a = 3;

b = 5*a++; //b=5 y a = 4

5.4.3 DE RELACION

< Menor que

> Mayor que

<= Menor igual que

>= Mayor igual que

== Igual que

¡= Diferente que

5.4.4 LOGICOS

¡ NOT

&& AND

|| OR

5.4.5 DE BITS

~ Complemento a 1

& AND

Page 16: Manual Pic c

^ OR EXCLUSIVA

| OR

<< Desplazamiento a izquierda

>> Desplazamiento a derecha

6. ESTRUCTURAS DE CONTROL

6.1 ESTRUCUTURA CONTROL “IF”

Con la ayuda de la estructura de control “IF” se pueden tomar decisiones.

If(expresión){

Sentencia_1;

}

Ejemplo:

if(input(PIN_A0)==1)

{

output_low(PIN_B0);

}

6.2 ESTRUCTURA DE CONTROL IF- ELSE

Con la ayuda de la estructura de control “IF- ELSE” se pueden tomar 2 acciones

diferentes tomando en cuenta la condición inicial.

Page 17: Manual Pic c

If (expresión)

{

Sentencia1;

}

Else

{

Sentencia2;

}

6.3 ESTRUCTURA DE CONTROL SWITCH

Switch es un caso particular de decisión multiple, evalua la expresión y en

orden la constante adecuada realiza las sentencias asociadas.

Switch (expresión)

{

Case constante 1:

Sentencias;

Break;

Case constante 2:

Sentencias;

Break;

[default:

Page 18: Manual Pic c

Sentecias;]

}

6.4 ESTRUCTURA DE CONTROL WHILE

WHILE se utilize para repetir sentencias, la expresión se evalua y la sentencia

se ejecuta mientras la expresión es verdadera, cuando es falsa se sale del

WHILE.

While(expresión)

{

Sentencias;

}

6.5 ESTRUCTURA DE CONTROL DO-WHILE

Do while se diferencia del WHILE y del FOR en la condición de finalización, la

cual se evalua el final del bucle, por lo que las sentencias se ejecutan

Do

{

Sentencias;

}

While(expresión);

Page 19: Manual Pic c

6.6 ESTRUCTURA DE CONTROL FOR

Se usa para repetir sentencias, en las expresiones FOR la inicialización es una

variable a la cual se le asigna un valor inicial con el que se controla el bucle.

for (inicialización; condición de finalización; incremento)

{

Sentencias;

}

* COMENTARIOS

Los comentarios en el programa facilitan la compresión de las distintas

expresiones tanto para el programador como para quien tiene que interpretar

dicho programa. No afectan a la complicación por lo que pueden ser tan extensos

como el programador quiera. Se pueden colocar en cualquier parte del programa

y con dos formatos.

Utilizando “//” al colocar estos signos se comienza el comentario y finaliza

en el final de la línea.

//esto es un comentario.

Utilizando /* y */ se debe utilizar al inicio y al final del comentario, pero no

puede repetirse dentro del mismo comentario.

/* Esto es un comentario*/

Page 20: Manual Pic c

7. DIRECTIVAS DEL COMPILADOR

7.1 #Include

Agrega archivos de inclusión, librerías o archivos de cabecera.

#include<archivo>

Ejemplos

#include<16f628a.h>

#include<cceaviet_lcd.c>

7.2 #Fuses

Asigna valores a la palabra de configuración, lo cual permite programar un pic,

no todos los PIC tiene las mismas fuses.

#fuses config1, config2 ….

Ejemplos

#fuses HS, NOLVP, NOWDT, NOMCLR

7.3 #Use

Se utiliza para configurar algunas funciones especiales como la configuración

del clock.

#use delay(clock=fosc)

Ejemplos

#use delay (clock = 4M);

Page 21: Manual Pic c

7.4 #Byte

Define a un registro como variable

#byte nombre = dirección RAM

Ejemplos

#byte timer0 = 1 Guardado en dirección 1

7.5 #ASM y #ENDASM

Permiten utilizar código ensamblador en el programa C, se utilizan al inicio y al

final del bloque ensamblador.

Ejemplo

#asm

Bsf status,rp0

Movlw 0x8

Movwf portb

Bcf status,rp0

#endasm

8. FUNCIONES DE ENTRADA Y SALIDA (E/S)

El compilador ofrece funciones predefinidas para trabajar con los puertos.

Estas funciones son:

Page 22: Manual Pic c

8.1 SET_TRIS_X

Set_tris_x asigna un valor a los registros trisx, el cual se indicará que pines

están distribuidos como entrada o salida.

Set_tris_x(valor)

X= a,b,c,d,e…

Ejemplo

Configurar el puerto B del pin 3 a 0 (RB 3-0) entrada y el del pin 4 a 7 como

salida.

Set_tris_b(0b00001111);

Set_tris_b(15);

8.2 ENTRADA

8.2.1 INPUT()

La function INPUT lee el valor de un solo pin

=input(pin);

Ejemplo

Int x;

Set_tris_a(255);

X=input(pin_a3);//se asigna la variable x para la entrada del pin del puerto a3

8.2.2 INPUT_X

La función INPUT_X lee el valor de todo el registro del puerto x.

=input_x();

Page 23: Manual Pic c

Ejemplo

Int m;

Set_tris_b(255);

m= input_b();

Se asigna la variable m para registrar la informacion del todo el Puerto b, que

fue asignado como entrada.

8.2.3 INPUT_STATE()

Lee el valor del pin sin cambiar el sentido del terminal.

=input_state(pin);

8.3 SALIDA

8.3.1 OUTPUT_LOW

Escribe el valor de ‘0’ en el pin asignado

=output_low(pin);

Ejemplo

Set_tris_b(0);

Output_low(pin_b4);

Lo que indica que por el Puerto 4 saldra el valor de ‘0’.

8.3.2 OUTPUT_HIGH

Escribe el valor de ‘1’ en el pin asignado

=output_high(pin);

Page 24: Manual Pic c

Ejemplo

Set_tris_b(0)

Output_high(pin_b3);

Lo que indica que por el puerto 4 saldra el valor de ‘1’.

8.3.3 OUPUT_TOGGLE

Esta función complementa la salida del valor del pin.

=output_toggle(pin);

8.3.4 OUTPUT_X

Escribe un valor en el registros de portx.

=output_x(valor);

Ejemplo

Set_tris_b(0);

Output_b(255);

Aplicando este ejemplo por el Puerto sacaremos el dato 255, que en binario es

11111111.

8.4 #USES

8.4.1 #USE STANDARD_IO(X)

Con esta directiva las funciones de entrada y salida configuran como entrada

(o salida); antes de leer lo escriben como salida en pin o en puerto.

Page 25: Manual Pic c

=#use standard_io(x)

EJEMPLO

#INCLUDE<16F877a.h>

#FUSES hs,nolvp,nowdt

#USE DELAY(CLOCK = 20M)

#USE standard_io(a)

8.4.2 #USE FAST_IO(X)

Con esta directiva las funciones de entrada solo leen el valor del pin o el

puerto y las funciones de salida, solo intentan escribir sobre el bit con el pin

del puerto.

#use fast_io(x)

EJEMPLO

#INCLUDE<16F877a.h>

#FUSES hs,nolvp,nowdt

#USE DELAY(CLOCK = 20M)

#USE fast_io(a)

#USE fast_io(b)

9. FUNCIONES DE RETARDO

9.1 DELAY_MS

La function delay_ms genera retardos en milisegundos

Page 26: Manual Pic c

Delay_ms(t)

Donde 0<t<63535

9.2 DELAY_US

La función delay_us genera retardos en microsegundos

Delay_us(t)

Donde 0<t<63535

9.3 DELAY_CYCLE

La función delay_cycle genera retardos a manera de ciclo su aplicación es cuando

se trabaja con punteros.

Delay_cycle(t)

10. FUNCIONES

Una función es un conjunto de instrucciones que realiza una tarea

determinada para entregar un valor, tomando en cuenta valores de entrada.

10.1 Función principal

Void main (void)

{

Algoritmo principal

}

Page 27: Manual Pic c

Ejemplo

Void main (void)

{

Int a=3,b=15,c,d;

C= a+b;

D=a-b;

}

10.2 Funcion

Function(); //invocada en funcion main

Tipo nombre_funcion (tipo nombre;tipo_nombre2…)

{

Instrucción

}

OBS. VOID VACIO

Ejemplo

Int promedio (int x, int y)

{

Int temp;

Temp=(x+y)/2;

Return(temp);

}

Page 28: Manual Pic c

11. LED Y APLICACIONES CON LEDS

Un led es un diodo semiconductor que emite luz. Se usan como indicadores de

muchos dispositivos, y cada vez con mucho más frecuencia, en iluminación, los

primeros leds emitían luz roja de baja intensidad, pero con los dispositivos

actuales emiten luz en el espectro infrarrojo, visible y ultravioleta.

APLICACIÓN 1

“Encender un led por 1 segundo y apagarlo por 1 segundo”

Antes de comenzar a trabajar con los proyectos y teniendo en cuenta el

entorno de trabajo del ccs, pues tengamos estas recomendaciones pendientes

para el trabajo.

Indicar que microcontrolador usaremos.

Indicar la frecuencia de trabajo.

Indicar si la frecuencia se hará con fuente externa o interna.

Y por ultimo indicar e identificar los pines que se utilizaran

Para esta aplicación las cosas que tendremos en cuenta serán, tener un

diagrama de flujo para el trabajo que haremos, y escribir las directivas

correspondientes comenzemos.

Utilizaremos el pin B0, con una frecuencia de 4MHZ y con reloj interno de

nuestro pic 16F628A.

Page 29: Manual Pic c

//PRENDER UN LED POR 1 SEGUNDO Y LUEGO APAGARLO POR 1 SEGUNDO

#INCLUDE<16F628A.h>

#FUSES intrc,NOLVP,NOWDT,NOMCLR

#USE DELAY(CLOCK = 4M)

void main (void)

{

while(true)

{

output_high(PIN_B0);

delay_ms(1000);

output_low(PIN_B0);

delay_ms(1000);

}

}

Como se observa primero se utilizo la función #include<> donde

especificamos el microcontrolador que estamos aplicando, seguido de la

función #fuses que nos indica las condiciones de configuración como el reloj

interno y otros.

Se utilizo la función #use_delay(4M) con el fin de tener una frecuencia de

trabajo de 4Mhz, y una función principal void main(void) donde dentro de esta

función se aplico un bucle cerrado e infinito con la estructura while.

Y el trabajo para poder prender y apagar el led se usaron las directivas de

salida output_high y output_low sobre el pin RB0. Con lo que resulta una

Page 30: Manual Pic c

buena aplicación para comenzar en el mundo de la programación de

microcontroladores PIC.

Ahora te reto a poder realizar estos 2 ejercicios.

Se tiene 2 leds, conectados en los pines rb0 y rb1, cuando se prende el

primer led, el otro esta apagado y viceversa, aplicando un retaro de 3

segundos.

Nota: para esta aplicación peudes usar las salidas output_high y

output_low, además del delay_ms(3000).

Con todo el puerto b, generar la serie de luces del 0 al 255, con un

retardo de 1 segundo.

Nota: recordar que el valor de 0 en binario es 00000000 y el de

255 es de 11111111, lo puedes trabajar con una función FOR y

la función output_b().

Generar la siguiente serie: 128, 64, 32, 16, 8, 4, 2, 1 Aplicando el

puerto b con un retardo de 1 segundo, y cuando llegue a 1 que vuelva a

comenzar de 128.

Nota: cambia los valores decimales a binarios para que te

puedan ayudar a reconocer el orden de la salida de los leds.

Page 31: Manual Pic c

12. APLICACIONES CON INTERRUPTORES Y BOTONES

Los botones e interruptores nos ayudan a tener una acceso de que se puede

activar con ellos, y no solo pueden ser estos se pueden tomar como entrada

todo tipo de sensores ultrasonidos, de luz, etc, el fin principal es que nos den

una señal ‘0’ o ‘1’ a la entrada del PIC, para poder aplicar lo trabajado.

Aplicación 1

“Encendiendo un led con un interruptor”

#INCLUDE<16F628a.h>

#FUSES intrc,nolvp,nowdt

#USE DELAY(CLOCK = 4M)

#USE fast_io(a)

#USE fast_io(b)

Page 32: Manual Pic c

void main(void)

{

port_b_pullups(true);

set_tris_a(255);

set_tris_b(0);

output_b(0);

while(true)

{

if(input(PIN_A0)==1)

{

output_low(PIN_B0);

}

else

{

output_high(PIN_B0);

}

}

}

Como se observa la entrada donde se ubica el interruptor es el puerto a1, y la

salida es el puerto b0, donde se observa que hay un bucle cerrado while, además

de la condición if-else que siempre pregunta por el estado de A1, con el fin de

activar o no la salida B0.

Aplicación 2

“Secuencia de luces con botón activador”

#INCLUDE<16F877a.h>

#FUSES hs,nolvp,nowdt

#USE DELAY(CLOCK = 20M)

Page 33: Manual Pic c

#USE fast_io(a)

#USE fast_io(b)

void main(void)

{

port_b_pullups(true);

set_tris_a(255);

set_tris_b(0);

output_b(0);

int i = 0;

while(true)

{

bucle:if (input(PIN_A0)==0)

{

delay_ms(30);

if(input(PIN_A0)==0) goto bucle;

if(i<=255)

{

i++;

output_b(i);

}

else

{

Page 34: Manual Pic c

output_b(0);

}

}

}

}

Como se observa en este caso cada vez que se presione el botón ubicado en el

pin a0, se activara el contador que indicara la nueva secuencia de leds que esta

dada de 0 a 255, con la condición final de que cuando llegue a 255 y se vuelva a

presionar el led, se volveré a 0 la cuenta.

Qué pasaría si en vez de un botón en este ejemplo se usa un

interruptor.

Generar esta secuencia de leds 1,2,4,8,16,32,64,128 con la condición

que cambien siempre que se presione el botón del puerto a0.

13. APLICACIONES CON DISPLAYS DE 7 SEGMENTOS

Los displays son muy utilizados para visualizar datos. Por lo que su aplicación

es importante en el campo de las mediciones, sus aplicaciones son varias, en

balanzas, calculadoras básicas, etc, el display de 7 segmentos es un arreglo de

leds con los cuales se puede al trabajarse en conjunto se visualiza el dato que

se quiere.

Page 35: Manual Pic c

*ARREGLOS

La aplicación de arreglos es importante en el trabajo con displays de 7

segmentos y de matrices de leds.

Tipo [const] nombre [n] = {datos}

Const constante

n cantidades

Ejemplo

Int const hola [4];

Hola[0];

Hola[1];

Hola[2];

Hola[3];

En total 4 elementos de ese arreglo de elementos.

A continuación con los ejemplos quitaremos dudas de esta aplicación.

Page 36: Manual Pic c

Aplicación 1

“Contador de 0 – 9 con un display de 7 segmentos”

#INCLUDE<16F628a.h>

#FUSES mclr,intrc,nolvp,nowdt

#USE DELAY(CLOCK = 4M)

#USE FAST_IO(A)

#USE FAST_IO(B)

void main (void)

{

set_tris_b(0);

set_tris_a(0);

int i;

int const conteo[10]={63,6,91,79,102,109,125,7,127,111};

output_high(pin_a0);

output_b(0);

do

{

for(i=0;i<=9;i++)

{

output_b(conteo[i]);

delay_ms(1000);

Page 37: Manual Pic c

}

}

while(true);

}

DIAGRAMA PARA CONTADOR DE 7 SEGMENTOS CON INTEGRADOS TTL 7447

Aplicacion 2

“Contador de 0 a 99 con 2 display de 7 segmentos en simultaneo”

#INCLUDE<16F628a.h>

#FUSES intrc,nolvp,nowdt,mclr

#USE DELAY(CLOCK = 4M)

Page 38: Manual Pic c

#USE FAST_IO(A)

#USE FAST_IO(B)

void main(void)

{

port_b_pullups(true);

int uni,dec,i;

int const conteo[10]={63,6,91,79,102,109,125,7,127,111};

set_tris_a(0);

set_tris_b(0);

while(true)

{

for(dec=0;dec<=9;dec++)

{

for(uni=0;uni<=9;uni++)

{

for(i=1;i<=40;i++)

{

output_a(1);

output_b(conteo[uni]);

delay_ms(5);

Page 39: Manual Pic c

output_a(2);

output_b(conteo[dec]);

delay_ms(5);

}

}

}

}

}

CIRCUITO PARA CONTADOR DE 0 A 99 CON DISPLAY DE 7 SEGMENTOS

14. APLICACIONES CON MATRIZ DE LED 7 X 5

Estos displays son bastante utilizados hoy en dia para mostrar todo tipo de

mensajes de una manera mas expresiva, se utiliza en la mayoría de negocios,

bancos, tiendas hasta en autobuses donde trabajando con estos matrices de leds

Page 40: Manual Pic c

se pueden tener varias aplicaciones, existen de varios tipos esta de 7x5 es una

básica donde se explicara el fundamento para poder trabajar con estas matrices.

Aplicación 1

“Generar un hombrecito en movimiento con la matriz de 7 segmentos”

#include <16f877a.h>

#fuses xt,nolvp,nowdt

Page 41: Manual Pic c

#use delay(clock = 4M)

void main(void)

{

int i,j;

set_tris_b(0);

set_tris_c(0);

output_b(0);

output_c(0);

int const columna[5]={1,2,4,8,16};//puede ser tambien{1,2,4,8,16}

int const dibujo1[5]={111,88,7,88,111};//

int const dibujo2[5]={95,88,7,88,95};

int const dibujo3[5]={63,88,7,88,63};

while(true)

{

for(j=1;j<=10;j++)

{

for(i=0;i<=4;i++)

{

output_b(columna[i]);

Page 42: Manual Pic c

output_c(dibujo1[i]);

delay_ms(4);

}

}

for(j=1;j<=10;j++)

{

for(i=0;i<=4;i++)

{

output_b(columna[i]);

output_c(dibujo2[i]);

delay_ms(4);

}

}

for(j=1;j<=10;j++)

{

for(i=0;i<=4;i++)

{

output_b(columna[i]);

output_c(dibujo3[i]);

delay_ms(4);

}

}

Page 43: Manual Pic c

for(j=1;j<=10;j++)

{

for(i=0;i<=4;i++)

{

output_b(columna[i]);

output_c(dibujo2[i]);

delay_ms(4);

}

}

}

}

Diagrama de armado para la matriz de leds de 7 x 5

Page 44: Manual Pic c

15. LCD

Los módulos LCD son utilizados, para mostrar mensajes que indican al

operario el estado de la maquina, o dar instrucciones, mostrar valores y datos,

etc. El LCD permite una comunicación entre maquina y persona este puede

mostrar cualquier formato ascii, según el modelo que se tenga, el modelo mas

usado es el LCD de 16 x 2 hitachi.

15.1 CONFIGURACION

#define use_portx_lcd_true

#include <lcd.c> . librería principal

*obs. Para el entrenador del centro cultural se utilizara la librería

#include<cceavet_lcd.c>

15.2 FUNCIONES

LCD_INIT();

Esta función inicializa el LCD.

LCD_PUTC();

Page 45: Manual Pic c

Esta función permite ingresar un dato

Lcd_putc(n);//el valor de n

Lcd_putc(“hola”)//ingresa la cadena hola

\f; Borra la pantalla

\n; Pasa a al siguiente línea

\b; retrocede 1 espacio.

Printf; es la función de impresión para datos en cadena.

Printf(lcd_putc,”\fhola”);

Long x = 9741;

Printf(lcd_putc,x_values%l,x)

APLICACIÓN 1

“mostrar por el LCD la letra a, y despues de un tiempo mostrar la frase ‘hola

muchachos’”

#INCLUDE <16f628a.h>

#FUSES intrc,nolvp,mclr,nowdt

#USE delay(clock = 4M)

#DEFINE use_portb_lcd_true

#INCLUDE <lcd.c>

// rs ------ RB1

// rw ------ RB2

// e ------ RB0

// d4 ------ rb4

Page 46: Manual Pic c

// d5 ------ rb5

// d6 ------ rb6

// d7 ------ rb7

void main (void)

{

int i = 10;

lcd_init();

lcd_putc(i);

delay_ms(1000);

lcd_putc("a");

delay_ms(1000);

lcd_putc("\fhola");

delay_ms(1000);

lcd_putc("\fhola\nmuchachos");

}

Page 47: Manual Pic c

16. TECLADO MATRICIAL

Los teclados matriciales son bastante útiles para ingresar datos, un ejemplo de

ellos es el teclado del computador, el teclado de una alarma nos permite armar

y desarmar un sistema de seguridad de una caja fuerte o una cerradura

eléctrica, para introducirnos en el manejo de un teclado, se hará un proyecto

para poder observar su modo de trabajo brindando ideas varios proyectos.

16.1 CONFIGURACION

Para la configuración del teclado se tiene que invocar la siguiente librería.

#include<teclado.c>

16.2 FUNCIONES

La función para usar el teclado es solo esta de aca:

=teclado();

La cual espera que la tecla sea presionada y la envía como dato ascii.

Page 48: Manual Pic c

APLICACIÓN 1

“presionar un tecla y mostrar el valor por el LCD”

#include <16f877a.h>

#fuses xt,nolvp,nowdt

#use delay (clock = 4M)

#define use_portd_lcd_true

#include <lcd.c>

#include <teclado.c>

void main(void)

{

int x,i=0;

lcd_init();

while(true)

{

x = teclado();

write_eeprom(i,x);//grabando en la eeprom

lcd_putc(x);

i++;

}

}

Page 49: Manual Pic c

DIAGRAMA DE TECLADO MATRICIAL CON LCD