estructura de un programa en mplab

10
2009 GRUPO ESTUDIANTIL INVENTRONICA Joel Oswaldo Campos Pérez [CURSO BÁSICO DE PIC ESTRUCTURA DE UN PROGRAMA] En este segmento se describen las principales partes que conforman un código en ensamblador para PIC, se terminara editando un código ejemplo.

Upload: electroswaldo

Post on 13-Jun-2015

13.424 views

Category:

Documents


5 download

DESCRIPTION

Este archivo PDF pretende ser una guia para la edicion de tu primer programa para PIC. Muestra las principales partes que conforman la estructura de un codigo en ensamblador para PIC.

TRANSCRIPT

Page 1: Estructura de un programa en MPLAB

2009

GRUPO ESTUDIANTIL

INVENTRONICA

Joel Oswaldo Campos

Pérez

[CURSO BÁSICO DE PIC ESTRUCTURA DE UN PROGRAMA] En este segmento se describen las principales partes que conforman un código en

ensamblador para PIC, se terminara editando un código ejemplo.

Page 2: Estructura de un programa en MPLAB

Curso básico de PIC Estructura de un programa

Curso básico de microcontroladores – [email protected] Página 2

JUEGO DE INSTRUCCIONES

Page 3: Estructura de un programa en MPLAB

Curso básico de PIC Estructura de un programa

Curso básico de microcontroladores – [email protected] Página 3

Estructura de un programa en ensamblador para PIC:

---------------------------------------------------------------------------------------------------------------------------

list p=16f877a #include <p16f877a.inc>

El primer renglón define que PIC se usara, el segundo renglón es una librería que

contiene los nombres de los registros especiales del pic, tales como PORTA, PORTB,

STATUS, TRISA etc. Para podernos referir a éstos por sus nombres en lugar de su

posición de memoria, facilitándonos la edición del programa.

---------------------------------------------------------------------------------------------------------------------------

__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF

Este renglón CONFIG se llama PALABRA DE CONFIGURACION, y esta formada por

diferentes FUSIBLES. Estos FUSIBLES nos sirven para dar ordenes al programador de

cómo debe configurar el PIC para su correcto funcionamiento. A continuación veamos

para la función de cada FUSIBLE.

CP Código de Protección de programa, si lo habilitamos (ON) evita que

otras personas puedan leer el programa contenido en el PIC.

Generalmente lo pondremos a OFF.

WDT Watch Dog Timer, o Temporizador Perro Guardián. Este temporizador

resetea el PIC cada determinado tiempo para evitar enciclamientos por

error en el programa. Preferentemente hay que apagarlo (OFF).

BODEN Bit de Permiso para el Reseteo por Caída de Tensión. PWRTE Bit de Permiso para el Timer de conexión de alimentación. Se usa para

resetear el PIC cada vez que se conecta la fuente de alimentación de nuestra aplicación.

OSC Define que tipo de oscilador se usara. RC es para Capacitor y resistencia, XT

es para cristal de 4Mhz, HS para cristales mayores a 4Mhz. WRT Permiso para escritura en Modo FLASH. Se usa cuando en nuestro programa

accedemos a la memoria de datos EEPROM.

LVP Voltaje de programación bajo. Si esta en ON permite programar el PIC con 5V,

si esta en OFF programa el PIC con 14V, debemos ponerlo a OFF.

CPD Código de Protección de Datos. Se usa para evitar que terceros lean lo que

hemos escrito en la memoria EEPROM del PIC.

---------------------------------------------------------------------------------------------------------------------------

Page 4: Estructura de un programa en MPLAB

Curso básico de PIC Estructura de un programa

Curso básico de microcontroladores – [email protected] Página 4

CBLOCK 0X20

ENDC

Los registros o variables que se usaran se declaran entre estos dos renglones, el 0X20 indica

que usaremos los espacios disponibles para registros a partir de la posición 0x20 de la

memoria (VER MAPA DE MEMORIA).

---------------------------------------------------------------------------------------------------------------------------

ORG 0

goto inicio

ORG 5

La línea ORG 0 (Origen 0) es el VECTOR DE RESET, lo cual quiere decir que siempre que se

resetee, o se encienda el PIC, el programa se comenzara a ejecutar a partir de esta posición. El

goto inicio y debajo el ORG 5 nos indica que hemos saltado el ORG 4 que es el vector de

interrupciones, este vector ORG 4 no se usara por el momento.

---------------------------------------------------------------------------------------------------------------------------

A partir de aquí comenzamos con el programa. Como siempre, lo primero es configurar los puertos de entrada y salida: Inicio bsf STATUS,RP0 ;RP0 ���� 1 bcf STATUS,RP1 ;RP1 ���� 0

Estas dos líneas nos indican que nos movemos al banco 1 que es el banco para configurar los

puertos de entrada y salida (ver hoja de Selección de bancos para configurar puertos ( in / out

)).

---------------------------------------------------------------------------------------------------------------------------

movlw b’00000111’ ; W ���� b’00000111’ movwf ADCON1 ; ADCON1 ���� W

En estas dos líneas estamos mandando a ADCON1 el número 00000111 para configurar todas

las entradas analógicas del PIC como digitales (ver hoja de CONFIGURACION DE PINES ( Digitales / Analógicas) ). Nota, la b en b’00000111’ indica que el numero dentro de las comillas

es un numero binario.

---------------------------------------------------------------------------------------------------------------------------

movlw b’11111111’ ; W ���� b’00000111’ movwf TRISA ; TRISA ���� W

En estos dos renglones estamos mandando el numero binario 11111111 al registro TRISA. El

registro TRISA configura los pines del PORTA como entrada o salida. Si a un bit del TRISA le

mandamos un 1 entonces el mismo bit pero del PORTA será ENTRADA, si a un bit del TRISA le

Page 5: Estructura de un programa en MPLAB

Curso básico de PIC Estructura de un programa

Curso básico de microcontroladores – [email protected] Página 5

mandamos un 0 entonces el mismo bit pero del PORTA será SALIDA. En este caso todos los bits

de TRISA les hemos mandado 1’s, asi que todos los pines del PORTA serán ENTRADAS.

---------------------------------------------------------------------------------------------------------------------------

clrf TRISB ; TRISB ���� b’00000000’

En este renglón estamos limpiando el TRISB, es decir, le estamos mandando puros 0’s. Lo cual

quiere decir que estamos volviendo todos los pines del PORTB como SALIDAS.

---------------------------------------------------------------------------------------------------------------------------

bcf STATUS,RP0 ;RP0 ���� 0 bcf STATUS,RP1 ;RP1 ���� 0

En estos dos renglones estamos mandando un 0 al RP0 y 0 al RP1 para posicionarnos en el

Banco 0, que es el banco de trabajo, pues hemos terminado de configurar los puertos en el

Banco 1.

---------------------------------------------------------------------------------------------------------------------------

Ya configurados los puertos como digitales y configurado cuales son entradas y salidas comenzamos con nuestro programa principal: Inicio_principal btfss PORTA,0 ; PORTA,0 = 1 ? goto apagar ; NO, entonces Ir a apagar bsf PORTB,0 ; SI, entonces PORTB,0 ���� 1 goto inicio_principal ; Ir a inicio_principal apagar Bcf PORTB,0 ; PORTB,0 ���� 0 goto inicio_principal ;Ir a inicio_principal END ; FIN DEL PROGRAMA PARA EL COMPILADOR

Page 6: Estructura de un programa en MPLAB

Curso básico de PIC Estructura de un programa

Curso básico de microcontroladores – [email protected] Página 6

Esquema de un programa en ensamblador

list p=16f877a #include <p16f877a.inc>

__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF

CBLOCK 0X20

ENDC

ORG 0

goto inicio

ORG 5

Inicio bsf STATUS,RP0 ; Banco 1 para cofig. Puertos. bcf STATUS,RP1 ; movlw b’00000111’ ; Configuramos movwf ADCON1 ; todos los pines como Digitales movlw b’11111111’ ; Configuramos movwf TRISA ; PORTA como entradas clrf TRISB ; Configuramos PORTB como salidas bcf STATUS,RP0 ; Regresamos al Banco 0 bcf STATUS,RP1 ; Inicio_principal btfss PORTA,0 ; PORTA,0 = 1 ? goto apagar ; NO, entonces Ir a apagar bsf PORTB,0 ; SI, entonces PORTB,0 ���� 1 goto inicio_principal ; Ir a inicio_principal apagar Bcf PORTB,0 ; PORTB,0 ���� 0 goto inicio_principal ;Ir a inicio_principal END ; FIN DEL PROGRAMA PARA EL COMPILADOR

INICIO

Configurar FUSES

Definir variables

Configurar Puertos

Definir el PIC usado e

incluir la librería.

Programa Principal

END

Page 7: Estructura de un programa en MPLAB

Curso básico de PIC Estructura de un programa

Curso básico de microcontroladores – [email protected] Página 7

DIAGRAMA DE PINES PIC16F877A

Page 8: Estructura de un programa en MPLAB

Curso básico de PIC

Curso básico de microcontroladores

Selección de bancos para configurar puertos ( in / out )

MAPA DE MEMORIA:

Curso básico de PIC Estructura de un programa

de microcontroladores – [email protected]

El Banco 0 es el banco de trabajo,

el Banco 1 es el banco de

configuración de puertos

Selección de bancos para configurar puertos ( in / out )

Estructura de un programa

Página 8

El Banco 0 es el banco de trabajo,

el Banco 1 es el banco de

configuración de puertos

Selección de bancos para configurar puertos ( in / out )

Page 9: Estructura de un programa en MPLAB

Curso básico de PIC Estructura de un programa

Curso básico de microcontroladores – [email protected] Página 9

CONFIGURACION DE PINES ( Digitales / Analógicas)

Los pines marcados tienen la

función de canales analógicos,

pero pueden ser configurados

para ser i/o digitales.

Page 10: Estructura de un programa en MPLAB

Curso básico de PIC Estructura de un programa

Curso básico de microcontroladores – [email protected] Página 10

GRUPO ESTUDIANTIL

INVENTRONICA

Aclaración de dudas respecto al tema

tratado en este trabajo al correo:

[email protected]