Guía Práctico 7

Anuncio
UNIVERSIDAD NACIONAL DE SAN LUIS
Facultad de Ciencias Físico Matemáticas y Naturales
Técnico Universitario en Microprocesadores
Ingeniería Electrónica Orientación Sistemas Digitales
2014
PROCESADORES I
Guia TP7 – Introducción al Assembler del PIC
Pseudo-instrucciones PIC16F628
Se describen a continuación las más relevantes, que serán necesarias para la realización de los diferentes
ejercicios.
Para una descripción completa se recomienda consultar la bibliografía.
PROCESSOR
Define el PIC que se va a usar. Es equivalente a LIST P=
Ej.:
PROCESSOR
PIC16F628A ó LIST P=PIC16F628A
__CONFIG
Define la palabra de configuración específica para el PIC que se esté usando. Se puede usar en su
lugar __FUSES de forma equivalente.
Opción
Watchdog
Power-up timer
Protección de
código
Oscilador
Parámetro
_WTD_ON / _WDT_OFF
_PWRTE_ON / _PWRTE_OFF
Función
activa / desactiva
activa / desactiva
_CP_ON / _CP_OFF
activa / desactiva
_XT_OSC
_HS_OSC
_RC_OSC
_LP_OSC
_INTOSC_OSC_CLKOUT
_INTOSC_OSC_NOCLKOUT
_MCLRE_ON / _MCLRE_OFF
Cristal
cristal frecuencia > 4MHz
circuito R-C
cristal low power
clock interno 4MHz con salida por pin 15
clock interno 4MHz sin salida
pin 4 actúa como MCLR / RA5
Entrada MCLR
Low voltaje
_LVP_ON / _LVP_OFF
programming (LVP)
pin 10 actúa como LVP PGM / RB4
Ej:
__CONFIG _MCLRE_ON &_PWRTE_ON& _WDT_OFF & _XT_OSC & _LVP_OFF
Terminal de MCLR disponible, Power up timer activado, Sin watchdog, Oscilador a cristal, y pin 10 para RB4
INCLUDE
Incluye como parte del programa al archivo que se indica. Generalmente usado para incluir
definiciones estándar de etiquetas, o bien archivos de usuario conteniendo por ejemplo subrutinas de uso
frecuente.
Ej.
INCLUDE <P16F628A.INC>
ó
Página 1
INCLUDE "DELAY100.INC"
UNIVERSIDAD NACIONAL DE SAN LUIS
Facultad de Ciencias Físico Matemáticas y Naturales
Técnico Universitario en Microprocesadores
Ingeniería Electrónica Orientación Sistemas Digitales
2014
Programa resuelto para PIC16F628A
LIST P=PIC16F628A
; Carga etiquetas para el PIC 16F628
INCLUDE <P16F628A.INC>
;
;
;
;
;
Proteccion de codigo = OFF
Watchdog = No usado
Power On Timer = Usado !
Tipo de oscilador = Cristal XT
Low voltaje programming = OFF
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC & _LVP_OFF
CONT EQU 20
CONT2 EQU 21
CONT3 EQU 22
;DATOS PARA RETARDO DE 1 SEGUNDO
P EQU D'100'
M EQU D'97'
N EQU D'33'
LED EQU 0
ORG 0000
GOTO INICIO
;PIN DE ENTRADA DEL INTERRUPTOR
; primera instrucción después RESET
;------------------------------------------------------------------------; SUBRUTINA DE INTERRUPCION
;------------------------------------------------------------------------ORG
0004
;vector de interrupciones
BTFSS INTCON,INTF
;TESTEA EL FLAG DE INTERRUP EXTERNA RBO
GOTO SALTO
;SI ES '1' SALTO LA PROX INTRUCCION
BCF PORTA,LED
;APAGO LED
CALL RETARDO
;RETARDO DE 1 SEG
BSF PORTA,LED
;ENCIENDO LED
SALTO
BCF INTCON,INTF
;BORRO LA BANDERA DE INTERRUPCION EXTERNA
RBO
RETFIE
;------------------------------------------------------------------------; Programa principal
;------------------------------------------------------------------------INICIO
MOVLW B'00000111'
MOVWF CMCON
; DESABILITO COMPARADORES DEL 16F628
BSF STATUS,RP0
;PASA A BANCO 1
MOVLW B'00000000'
;CONFIGURA LOS PUERTOS
Página 2
UNIVERSIDAD NACIONAL DE SAN LUIS
Facultad de Ciencias Físico Matemáticas y Naturales
Técnico Universitario en Microprocesadores
Ingeniería Electrónica Orientación Sistemas Digitales
MOVWF TRISA
DEL MODO DEL OSCILADOR
MOVLW B'00000001'
MOVWF TRISB
2014
;RA (4:0)COMO SALIDA, RA(5),RA(6-7)DEPENDE
;RB(0) COMO ENTRADA
BCF OPTION_REG,NOT_RBPU ;RESISTENCIAS PULL-UP ACTIVAS/habilitadas
BCF OPTION_REG,INTEDG
;FLANCO DE BAJADA DE RB(0)
BCF STATUS,RP0
;VUELVE A BANCO 0
CLRF PORTA
CLRF PORTB
BSF INTCON,INTE
BSF INTCON,GIE
BCF INTCON,INTF
;ACTIVA INTERRUPCION POR RB0
;ACTIVA INTERRUPCIONES GLOBALES
;PONE EN BAJO EL FLAG DE INTERRUPCIONES POR
RB0
REPETIR BSF PORTA,LED
SLEEP
GOTO REPETIR
;***********************SUBRUTINA PARA RETARDO DE 1SEG***************
RETARDO
CICLO3
CICLO2
CICLO
MOVLW P
MOVWF CONT3
MOVLW M
MOVWF CONT2
MOVLW N
MOVWF CONT
DECFSZ CONT,f
GOTO CICLO
DECFSZ CONT2,f
GOTO CICLO2
DECFSZ CONT3,f
GOTO CICLO3
;1
;1
;1
;1
;1
;1
;1*(N-1)+2
;2*(N-1)
;1*(M-1)+2
;2*(M-1)
;1*(P-1)+2
;2*(P-1)
RETURN
END
Página 3
UNIVERSIDAD NACIONAL DE SAN LUIS
Facultad de Ciencias Físico Matemáticas y Naturales
Técnico Universitario en Microprocesadores
Ingeniería Electrónica Orientación Sistemas Digitales
2014
Retardo en PIC
Tal como se mencionó anteriormente el PIC16F628A tiene un oscilador interno de 4MHz, si utilizamos ese
oscilador tenemos que todas las instrucciones se ejecutan
en 1uS, exceptuando los saltos que tardan 2 ciclos, es
decir 2uS.
Tomando en cuenta esto vamos a generar nuestros
retardos, pero siempre partiendo del supuesto de que se
está trabajando a una frecuencia de 4MHz.
Partiendo de la siguiente rutina:
A la derecha de cada instrucción aparece el número de ciclos que tomará cada una. Las primeras dos toman
solamente 1 ciclo, la tecera decfsz toma (N-1)+2, porque decrementará N-1 veces la variable N y en el último
decremento hará un salto, es por eso el +2. La instrucción goto se ejecuta en 2 ciclos y se ejecutará N-1 veces,
es por eso que se toma como 2*(N-1). De esta forma tenemos que el número de ciclos, y por lo tanto el tiempo
que tendremos de retardo está dado por la siguiente expresión: 1+1+(1)(N-1)+2+(2)(N-1) , ó 4+N-1+2N-2,
o lo que es lo mismo 3N+1. Si queremos un retardo de 100uS entonces tenemos que 3N+1=100, despejando
tenemos N=(100-1)/3=33, asi que para tener un retardo de 100uS el valor de la variable N debe ser 33. Ahora
veamos esta rutina:
Podemos darnos cuenta que ahora nuestra rutina original
(desde CICLO2 hasta goto CICLO) está afectada por la
variable M, así que es como si M multiplicara a nuestro
retardo. Para saber el nuevo valor del retardo de nuevo
sumamos todos los ciclos, tomando en cuenta que M
multiplica
al
retardo
original
de
modo
que
la
expresión
ahora
queda
de
la
siguiente
manera: [3N+1]M+1+1+(1)(M-1)+2+(2)(M-1), o lo que es lo mismo [3N+1]M+3M+1, de manera que tenemos
dos retardos anidados. Para saber cuánto sería el retardo total primero calculamos el retardo básico, si
queremos que ese retardo sea de 100uS entonces N=33, si ahora queremos que el retardo total sea
de 10mS entonces ocupamos completar 10000 ciclos, así que igualamos nuestra expresión a ese
número: [(3*33)+1]M+3M+1=10000, despejando tenemos M=(9999)/103, esto es aproximadamente igual a 97,
así que para un retardo de 10mS nuestra variable N debe valer 33 y la variable M debe tener un valor de 97.
Así podemos seguir anidando retardos. Para obtener un retardo de 1 segundo utilizaremos la siguiente rutina:
Página 4
UNIVERSIDAD NACIONAL DE SAN LUIS
Facultad de Ciencias Físico Matemáticas y Naturales
Técnico Universitario en Microprocesadores
Ingeniería Electrónica Orientación Sistemas Digitales
2014
Aquí se puede visualizar que la variable P afecta a los dos retardos que ya habíamos definido de modo que la
expresión para calcular el nuevo retardo total seria [(3N+1)M+3M+1 ]P+1+1+(1)(P-1)+2+(2)(P-1),y reduciendo
términos la expresión seria [(3N+1)M+3M+1]P+3P+1. Queremos un retardo de 1 segundo, esto son 1000000
ciclos, por lo que nuestra expresión del retardo debe ser igual a un millón: [(3N+1)M+3M+1 ]P+3P+1=1000000.
Sustituyendo N y M tenemos 9995P+1=1000000, entonces tenemos que P=(999999)/9995 y P entonces es
aproximadamente igual a 100.
Página 5
UNIVERSIDAD NACIONAL DE SAN LUIS
Facultad de Ciencias Físico Matemáticas y Naturales
Técnico Universitario en Microprocesadores
Ingeniería Electrónica Orientación Sistemas Digitales
2014
Instructivo de Uso MPLAB
1. Una vez ingresado al programa MPLAB IDE ( seleccionar Inicio> Programas> Microchip> MPLAB IDE>
MPLAB),se desplegará la presentación del software seguido de la pantalla principal.
2. Ir a al item “Project” del menú e iniciar el “Project Wizard”.
3. Especificar como device el PIC16F628A y como Toolsuite el ensamblador MPASM.
4. Por medio del botón “Browse” ir al disco D, crear una nueva carpeta e ingresar en ella y finalmente dar un
nombre al proyecto y poner GUARDAR.
5. Ene l caso de ya tener escrito el código en assembler, se puede agregar en este momento el archivo *.ASM
con el botón ADD>> al nuevo proyecto.
6. Luego poner SIGUIENTE y FINALIZAR.
7. En caso de no contar aún con el archivo *.ASM, podrá ir al item “Project” del menú y luego a “Add new file
to Project…”. Seguidamente dar un nombre con extensión .ASM al archivo y poner GUARDAR.
8. Escribir el programa en assembler.
9. Una vez escrito, para ensamblar ir al menú “Project” y poner “Build all”. En el caso de salir el siguiente
mensaje “do you want this project to generate absolute or relocate code?” seleccionar ABSOLUTE.
10. Si no hubo errores de sintaxis, aparecerá el mensaje “BUILD SUCCEEDED”.
Simulación
11. Para realizar una simulación del programa, primero ir a “Debugger” “Select tool” y seleccionar “MPLAB
SIM”.
12. Luego ir a “Debugger” “Stimulus” para establecer el estado que tendrán las entradas PIC.
a. New workbook
b. Agregar el/los pines de entrada y establecer el estado bajo el cual será modificado en la simulación,
por ej. En el caso del ejercicio resuelto se toma el pin RB0 en Toggle, es decir al presionar sobre el
mismo cambia el estado.
c. Guardar el Stimulus workbook File.
13. En el menú “View” activar los elementos que se deseen visualizar durante la simulación.
a. View>”Watch” allí agregar los Registros (SFR) “Add SFR” que se desee visualizar en la simulación así
como se pueden agregar las variables “Add Symbol”.
14. Para iniciar la simulación, ir a “Debugger”> “Animate”.
15. Si la simulación fue satisfactoria, hay buenas posibilidades de que el programa funcione correctamente una
vez grabado en el PIC.
Página 6
UNIVERSIDAD NACIONAL DE SAN LUIS
Facultad de Ciencias Físico Matemáticas y Naturales
Técnico Universitario en Microprocesadores
Ingeniería Electrónica Orientación Sistemas Digitales
Pin-out PIC16F628
Página 7
2014
UNIVERSIDAD NACIONAL DE SAN LUIS
Facultad de Ciencias Físico Matemáticas y Naturales
Técnico Universitario en Microprocesadores
Ingeniería Electrónica Orientación Sistemas Digitales
Página 8
2014
Descargar