PROCESADORES I Guia TP7 Introducción al Assembler del PIC ...pmp/archivos/Guia_TP7_Directivas...

8
Página 1 UNIVERSIDAD NACIONAL DE SAN LUIS 2014 Facultad de Ciencias Físico Matemáticas y Naturales Técnico Universitario en Microprocesadores Ingeniería Electrónica Orientación Sistemas Digitales 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 Parámetro Función Watchdog _WTD_ON / _WDT_OFF activa / desactiva Power-up timer _PWRTE_ON / _PWRTE_OFF activa / desactiva Protección de código _CP_ON / _CP_OFF activa / desactiva Oscilador _XT_OSC Cristal _HS_OSC cristal frecuencia > 4MHz _RC_OSC circuito R-C _LP_OSC cristal low power _INTOSC_OSC_CLKOUT clock interno 4MHz con salida por pin 15 _INTOSC_OSC_NOCLKOUT clock interno 4MHz sin salida Entrada MCLR _MCLRE_ON / _MCLRE_OFF pin 4 actúa como MCLR / RA5 Low voltaje programming (LVP) _LVP_ON / _LVP_OFF 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> ó INCLUDE "DELAY100.INC"

Transcript of PROCESADORES I Guia TP7 Introducción al Assembler del PIC ...pmp/archivos/Guia_TP7_Directivas...

Page 1: PROCESADORES I Guia TP7 Introducción al Assembler del PIC ...pmp/archivos/Guia_TP7_Directivas PIC16F628_v2.pdf · Especificar como device el PIC16F628A y como Toolsuite el ensamblador

Página 1

UNIVERSIDAD NACIONAL DE SAN LUIS 2014 Facultad de Ciencias Físico Matemáticas y Naturales Técnico Universitario en Microprocesadores Ingeniería Electrónica Orientación Sistemas Digitales

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 Parámetro Función

Watchdog _WTD_ON / _WDT_OFF activa / desactiva

Power-up timer _PWRTE_ON / _PWRTE_OFF activa / desactiva

Protección de código

_CP_ON / _CP_OFF activa / desactiva

Oscilador _XT_OSC Cristal

_HS_OSC cristal frecuencia > 4MHz

_RC_OSC circuito R-C

_LP_OSC cristal low power

_INTOSC_OSC_CLKOUT clock interno 4MHz con salida por pin 15

_INTOSC_OSC_NOCLKOUT clock interno 4MHz sin salida

Entrada MCLR _MCLRE_ON / _MCLRE_OFF pin 4 actúa como MCLR / RA5

Low voltaje programming (LVP)

_LVP_ON / _LVP_OFF 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> ó INCLUDE "DELAY100.INC"

Page 2: PROCESADORES I Guia TP7 Introducción al Assembler del PIC ...pmp/archivos/Guia_TP7_Directivas PIC16F628_v2.pdf · Especificar como device el PIC16F628A y como Toolsuite el ensamblador

Página 2

UNIVERSIDAD NACIONAL DE SAN LUIS 2014 Facultad de Ciencias Físico Matemáticas y Naturales Técnico Universitario en Microprocesadores Ingeniería Electrónica Orientación Sistemas Digitales

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 ;PIN DE ENTRADA DEL INTERRUPTOR

ORG 0000

GOTO INICIO ; 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

Page 3: PROCESADORES I Guia TP7 Introducción al Assembler del PIC ...pmp/archivos/Guia_TP7_Directivas PIC16F628_v2.pdf · Especificar como device el PIC16F628A y como Toolsuite el ensamblador

Página 3

UNIVERSIDAD NACIONAL DE SAN LUIS 2014 Facultad de Ciencias Físico Matemáticas y Naturales Técnico Universitario en Microprocesadores Ingeniería Electrónica Orientación Sistemas Digitales

MOVWF TRISA ;RA (4:0)COMO SALIDA, RA(5),RA(6-7)DEPENDE

DEL MODO DEL OSCILADOR MOVLW B'00000001'

MOVWF TRISB ;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 ;ACTIVA INTERRUPCION POR RB0

BSF INTCON,GIE ;ACTIVA INTERRUPCIONES GLOBALES

BCF INTCON,INTF ;PONE EN BAJO EL FLAG DE INTERRUPCIONES POR

RB0

REPETIR BSF PORTA,LED

SLEEP

GOTO REPETIR

;***********************SUBRUTINA PARA RETARDO DE 1SEG***************

RETARDO

MOVLW P ;1

MOVWF CONT3 ;1

CICLO3 MOVLW M ;1

MOVWF CONT2 ;1

CICLO2 MOVLW N ;1

MOVWF CONT ;1

CICLO DECFSZ CONT,f ;1*(N-1)+2

GOTO CICLO ;2*(N-1)

DECFSZ CONT2,f ;1*(M-1)+2

GOTO CICLO2 ;2*(M-1)

DECFSZ CONT3,f ;1*(P-1)+2

GOTO CICLO3 ;2*(P-1)

RETURN

END

Page 4: PROCESADORES I Guia TP7 Introducción al Assembler del PIC ...pmp/archivos/Guia_TP7_Directivas PIC16F628_v2.pdf · Especificar como device el PIC16F628A y como Toolsuite el ensamblador

Página 4

UNIVERSIDAD NACIONAL DE SAN LUIS 2014 Facultad de Ciencias Físico Matemáticas y Naturales Técnico Universitario en Microprocesadores Ingeniería Electrónica Orientación Sistemas Digitales

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:

Page 5: PROCESADORES I Guia TP7 Introducción al Assembler del PIC ...pmp/archivos/Guia_TP7_Directivas PIC16F628_v2.pdf · Especificar como device el PIC16F628A y como Toolsuite el ensamblador

Página 5

UNIVERSIDAD NACIONAL DE SAN LUIS 2014 Facultad de Ciencias Físico Matemáticas y Naturales Técnico Universitario en Microprocesadores Ingeniería Electrónica Orientación Sistemas Digitales

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.

Page 6: PROCESADORES I Guia TP7 Introducción al Assembler del PIC ...pmp/archivos/Guia_TP7_Directivas PIC16F628_v2.pdf · Especificar como device el PIC16F628A y como Toolsuite el ensamblador

Página 6

UNIVERSIDAD NACIONAL DE SAN LUIS 2014 Facultad de Ciencias Físico Matemáticas y Naturales Técnico Universitario en Microprocesadores Ingeniería Electrónica Orientación Sistemas Digitales

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.

Page 7: PROCESADORES I Guia TP7 Introducción al Assembler del PIC ...pmp/archivos/Guia_TP7_Directivas PIC16F628_v2.pdf · Especificar como device el PIC16F628A y como Toolsuite el ensamblador

Página 7

UNIVERSIDAD NACIONAL DE SAN LUIS 2014 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

Page 8: PROCESADORES I Guia TP7 Introducción al Assembler del PIC ...pmp/archivos/Guia_TP7_Directivas PIC16F628_v2.pdf · Especificar como device el PIC16F628A y como Toolsuite el ensamblador

Página 8

UNIVERSIDAD NACIONAL DE SAN LUIS 2014 Facultad de Ciencias Físico Matemáticas y Naturales Técnico Universitario en Microprocesadores Ingeniería Electrónica Orientación Sistemas Digitales