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.
Curso básico de PIC Estructura de un programa
JUEGO DE INSTRUCCIONES
Curso básico de microcontroladores – robo-sapiens@hotmail.com Página 2
Curso básico de PIC Estructura de un programa
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.
---------------------------------------------------------------------------------------------------------------------------
Curso básico de microcontroladores – robo-sapiens@hotmail.com Página 3
Curso básico de PIC Estructura de un programa
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
Curso básico de microcontroladores – robo-sapiens@hotmail.com Página 4
Curso básico de PIC Estructura de un programa
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
Curso básico de microcontroladores – robo-sapiens@hotmail.com Página 5
Curso básico de PIC Estructura de un programa
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 INICIO
ORG 0
goto inicio Definir el PIC usado e
ORG 5
incluir la librería.
Inicio
bsf STATUS,RP0 ; Banco 1 para cofig. Puertos.
bcf STATUS,RP1 ; Configurar FUSES
movlw b’00000111’ ; Configuramos
movwf ADCON1 ; todos los pines como Digitales
movlw b’11111111’ ; Configuramos
movwf TRISA ; PORTA como entradas Definir variables
clrf TRISB ; Configuramos PORTB como salidas
bcf STATUS,RP0 ; Regresamos al Banco 0
bcf STATUS,RP1 ;
Configurar Puertos
Inicio_principal
btfss PORTA,0 ; PORTA,0 = 1 ?
goto apagar ; NO, entonces Ir a apagar Programa Principal
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
END ; FIN DEL PROGRAMA PARA EL COMPILADOR
Curso básico de microcontroladores – robo-sapiens@hotmail.com Página 6
Curso básico de PIC Estructura de un programa
DIAGRAMA DE PINES PIC16F877A
Curso básico de microcontroladores – robo-sapiens@hotmail.com Página 7
Curso básico de PIC Estructura de un programa
Selección de bancos para configurar puertos ( in / out )
MAPA DE MEMORIA:
El Banco 0 es el banco de trabajo,
el Banco 1 es el banco de
configuración de puertos
Curso básico de microcontroladores – robo-sapiens@hotmail.com Página 8
Curso básico de PIC Estructura de un programa
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.
Curso básico de microcontroladores – robo-sapiens@hotmail.com Página 9
Curso básico de PIC Estructura de un programa
GRUPO ESTUDIANTIL
INVENTRONICA
Aclaración de dudas respecto al tema
tratado en este trabajo al correo:
robo-sapiens@hotmail.com
Curso básico de microcontroladores – robo-sapiens@hotmail.com Página 10