Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Curso de Microcontroladores Pic para Mejor Entendimiento
Curso de Microcontroladores Pic para Mejor Entendimiento
GRUPO ESTUDIANTIL
INVENTRONICA
Joel Oswaldo Campos
Prez
Estructura de un programa
JUEGO DE INSTRUCCIONES
Pgina 2
Estructura de un programa
list
p=16f877a
#include <p16f877a.inc>
El primer rengln define que PIC se usara, el segundo rengln es una librera 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
posicin de memoria, facilitndonos la edicin del programa.
--------------------------------------------------------------------------------------------------------------------------__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF
WDT
BODEN
PWRTE
OSC
WRT
LVP
CPD
Cdigo de Proteccin de Datos. Se usa para evitar que terceros lean lo que
hemos escrito en la memoria EEPROM del PIC.
---------------------------------------------------------------------------------------------------------------------------
Pgina 3
Estructura de un programa
0X20
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 posicin 0x20 de la
memoria (VER MAPA DE MEMORIA).
--------------------------------------------------------------------------------------------------------------------------ORG
goto
ORG
0
inicio
5
La lnea 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 posicin. 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
bcf
STATUS,RP0
STATUS,RP1
;RP0 1
;RP1 0
Estas dos lneas nos indican que nos movemos al banco 1 que es el banco para configurar los
puertos de entrada y salida (ver hoja de Seleccin de bancos para configurar puertos ( in / out
)).
--------------------------------------------------------------------------------------------------------------------------movlw
movwf
b00000111
ADCON1
; W b00000111
; ADCON1 W
En estas dos lneas estamos mandando a ADCON1 el nmero 00000111 para configurar todas
las entradas analgicas del PIC como digitales (ver hoja de CONFIGURACION DE PINES (
Digitales / Analgicas) ). Nota, la b en b00000111 indica que el numero dentro de las comillas
es un numero binario.
--------------------------------------------------------------------------------------------------------------------------movlw
movwf
b11111111
TRISA
; W b00000111
; 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 bsico de microcontroladores robo-sapiens@hotmail.com
Pgina 4
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 1s, asi que todos los pines del PORTA sern ENTRADAS.
--------------------------------------------------------------------------------------------------------------------------clrf
TRISB
; TRISB b00000000
En este rengln estamos limpiando el TRISB, es decir, le estamos mandando puros 0s. Lo cual
quiere decir que estamos volviendo todos los pines del PORTB como SALIDAS.
--------------------------------------------------------------------------------------------------------------------------bcf
bcf
STATUS,RP0
STATUS,RP1
;RP0 0
;RP1 0
--------------------------------------------------------------------------------------------------------------------------Ya configurados los puertos como digitales y configurado cuales son entradas y salidas
comenzamos con nuestro programa principal:
Inicio_principal
btfss PORTA,0
goto apagar
bsf
PORTB,0
goto inicio_principal
apagar
Bcf
PORTB,0
goto inicio_principal
END
; PORTA,0 = 1 ?
; NO, entonces Ir a apagar
; SI, entonces PORTB,0 1
; Ir a inicio_principal
; PORTB,0 0
;Ir a inicio_principal
Pgina 5
Estructura de un programa
CBLOCK
ENDC
0X20
INICIO
ORG
goto
ORG
0
inicio
5
bsf
bcf
movlw
movwf
movlw
movwf
clrf
bcf
bcf
STATUS,RP0
STATUS,RP1
b00000111
ADCON1
b11111111
TRISA
TRISB
STATUS,RP0
STATUS,RP1
PORTA,0
apagar
PORTB,0
inicio_principal
; PORTA,0 = 1 ?
; NO, entonces Ir a apagar
; SI, entonces PORTB,0 1
; Ir a inicio_principal
PORTB,0
inicio_principal
; PORTB,0 0
;Ir a inicio_principal
Inicio
Inicio_principal
btfss
goto
bsf
goto
apagar
Bcf
goto
END
Configurar FUSES
Definir variables
Configurar Puertos
Programa Principal
END
Pgina 6
Estructura de un programa
Pgina 7
Estructura de un programa
MAPA DE MEMORIA:
Pgina 8
Estructura de un programa
Pgina 9
Estructura de un programa
GRUPO ESTUDIANTIL
INVENTRONICA
Pgina 10