Manual Pic c

INTRODUCCION El presente texto tiene como objetivo ser una herramienta de ayuda en el aprendizaje de la programación de

Views 464 Downloads 16 File size 1MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

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.

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

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.

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 (), destinado a provocar una reinicializacion cuando el programa queda bloqueado.

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

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 , 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 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.

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)

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.

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.

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

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

el

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 crosscompiler. Los programas son editados y compilados a instrucciones maquina en el

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 .



INSTRUCCIONES, indican como se debe conectar el PIC en todo momento.



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

5. VARIABLES Y DATOS 5.1 TIPO DE DATOS CCS acepta los siguientes tipos de variables TIPO

TAMAÑO

RANGO

DESCRIPCION

INT1

1 BIT

0A1

ENTERO DE 1 BIT

8 BIT

0 A 255

ENTERO

16 BIT

0 A 65,535

ENTERO DE 16 BIT

SHORT INT INT8 INT16 LONG FLOAT

32 BIT

CHAR

8 BIT

VOID

-

SIGNED INT8

8 BIT

COMA FLOTANTE 0 A 255

CARÁCTER

-

SIN VALOR

-128 a 127

ENTERO

CON

SIGNO SIGNED INT16

16 BIT

-32768 a 32767

ENTERO 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

LARGO

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)

y)

&=

Asignacion AND en bits (x=x&y)

|=

Asignacion OR en bits (x=x|y)

^=

Asignacion XOR en bits (x=x^y)

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


Mayor que

=

Mayor igual que

==

Igual que

¡=

Diferente que

5.4.4 LOGICOS ¡

NOT

&&

AND

||

OR

5.4.5 DE BITS ~

Complemento a 1

&

AND

^

OR EXCLUSIVA

|

OR

>

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.

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:

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);

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*/

7. DIRECTIVAS DEL COMPILADOR 7.1 #Include Agrega archivos de inclusión, librerías o archivos de cabecera.

#include

Ejemplos #include #include

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);

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:

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();

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);

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.

=#use standard_io(x) EJEMPLO #INCLUDE #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 #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

Delay_ms(t) Donde 0