Diapositiva 1

Anuncio
Assembler para PICs
Características generales del lenguaje:
• Emplea los mnemotécnicos de las instrucciones del μC. En nuestro caso corresponderá
al set de instrucciones de los PICs de la gama media (35 instrucciones).
• Permite la utilización de etiquetas, tanto para apuntar a direcciones como para definir
valores constantes.
• Permite expresar las cantidades numéricas en diferentes bases.
• Se guarda en un archivo en formato ASCII, utilizando la extensión *.ASM
• Cuenta con una serie de pseudo-instrucciones o directivas (además de las ya conocidas
ORG, EQU y END) específicas para estos μCs. Veamos algunas…
Assembler para PICs: Directivas más usadas
PROCESSOR
__CONFIG
ó
FUSES
Define el PIC que se va a usar y determina el set de instrucciones.
Ejemplo:
PROCESSOR PIC16F84A
Define la palabra de configuración específica para el PIC que se esté
usando.
Ejemplo:
__CONFIG _PWRTE_ON & _WDT_OFF & _XT_OSC
donde:
_PWRTE_ON: activa el power-up timer
_WDT_OFF: desactiva el watchdog
_XT_OSC: configura oscilador con cristal
Los parámetros permitidos para __CONFIG dependerán del modelo de
PIC que se esté usando y de las características especiales de este.
INCLUDE
Incluye como parte del programa al archivo indicado. Generalmente
usado para incluir definiciones estándar de etiquetas, o bien archivos
de usuario conteniendo por ejemplo subrutinas de uso frecuente.
Ejemplo:
INCLUDE <P16F84A.INC>
ó
INCLUDE "DELAY100.INC"
Assembler para PICs: Directivas más usadas
RADIX
Define la base numérica usada por default. Puede ser dec, hex u oct
Ejemplo:
RADIX dec
Representación numérica:
Tipo:
Sintaxis:
Ejemplo:
d' '
d'197'
.
.197
h' '
h'7E'
0x
0x7e
Octal
o' '
0'123'
Binario
b' '
b'00101101'
a' '
a'C'
' '
'C'
Decimal
Hexadecimal
ASCII
Assembler para PICs
Palabra de configuración: parámetros de la directiva __CONFIG
Característica
Parámetro
Función
Aplicable a
Watchdog
_WTD_ON / _WDT_OFF
activa / desactiva
16F84 y 16F628
Power-up timer
_PWRTE_ON / _PWRTE_OFF
activa / desactiva
16F84 y 16F628
Protección de código
_CP_ON / _CP_OFF
activa / desactiva
16F84 y 16F628
_XT_OSC
Cristal normal
16F84 y 16F628
_HS_OSC
Cristal HF (> 4MHz)
16F84 y 16F628
_RC_OSC
Circuito RC
16F84 y 16F628
_LP_OSC
Cristal low power
16F84 y 16F628
_INTOSC_OSC_CLKOUT
clock interno 4MHz
con salida por pin 15
solo 16F628
_INTOSC_OSC_NOCLKOUT
clock interno 4MHz
sin salida
solo 16F628
Entrada MCLR
_MCLRE_ON / _MCLRE_OFF
pin 4 actúa como
MCLR / RA5
solo 16F628
Low voltaje
programming (LVP)
_LVP_ON / _LVP_OFF
pin 10 actúa como
LVP PGM / RB4
solo 16F628
Oscilador de clock
Nota: diferentes parámetros se combinan con la operación &
Assembler para PICs
Configuration word 16F84:
Assembler para PICs
Configuration word 16F628:
Assembler para PICs
Ejemplos para el PIC 16F84:
• oscilador a cristal (4 MHz)
• watchdog activado!
• power-up timer activado
• (sin protección de código)
__CONFIG _PWRTE_ON & _WDT_ON & _XT_OSC
• oscilador con circuito RC
• sin watchdog
• protección de código activada
• (power-up timer desactivado)
__CONFIG _CP_ON & _WDT_OFF & _RC_OSC
Assembler para PICs
Ejemplos para el PIC 16F628:
__CONFIG _MCLRE_ON & _WDT_OFF & _XT_OSC & _LVP_OFF
• MCLR disponible en pin 4
• oscilador a cristal
• sin watchdog
• RB4 en pin 10
__CONFIG _MCLRE_ON & _WDT_OFF & _INTOSC_OSC_NOCLKOUT & _LVP_OFF
• pin 4 asignado a RA5 y no a MCLR
• oscilador interno sin cristal, y sin clockout en pin 15
• sin watchdog
• RB4 en pin 10
Assembler para PICs
Watchdog timer (WDT):
•Cuenta con su propio oscilador interno (independiente del oscilador principal de clock)
•Un fin de cuenta (time-out) del WDT puede producir:
• Un RESET si el pic está ejecutando instrucciones de forma normal.
• Un WAKEUP si el pic esta en modo SLEEP
•Puede ser desactivado de forma permanente en la palabra de configuración.
•El período básico de time-out es de alrededor de 18ms (no es preciso).
•Se puede ampliar hasta 2.3seg haciendo uso del prescaler (ver registro OPTION).
•El bit 4 del registro STATUS indica (con un cero) si se produjo un time-out.
•Existe la instrucción CLRWDT que reinicia el WDT timer y previene el RESET.
Assembler para PICs
Programa de ejemplo:
PROCESSOR P16F84A
INCLUDE <P16F84A.INC>
; Carga etiquetas para el PIC 16F84
; Proteccion de codigo = OFF
; Watchdog = Usado !
; Power up Timer = Usado !
; Tipo de oscilador = Cristal XT (4MHz)
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_ON & _XT_OSC
CUENTA1
CUENTA2
EQU
EQU
0C
0D
ORG
GOTO
0000
INICIO
ORG
RETFIE
0004
INICIO
BSF
MOVLW
MOVWF
BCF
STATUS,RP0
B'00000000'
TRISB
STATUS,RP0
LOOP
MOVLW
MOVWF
CALL
MOVLW
MOVWF
CALL
GOTO
B’11110000’
PORTB
DELAY
B’00001111’
PORTB
DELAY
LOOP
; primera posicion de la RAM
;
;
;
;
;
entramos al bank 1
movemos 00000000b a W
puerto B todo salida
volvemos al bank 0
no modifico OPTION => el WDT es de ~18 ms
; demora de ~100ms (con un cristal de 4MHz)
Assembler para PICs
Programa de ejemplo: subrutina de delay
DELAY
SAL2
D1MS
SAL1
MOVLW
MOVWF
CALL
NOP
DECFSZ
GOTO
RETURN
D'100'
CUENTA2
D1MS
MOVLW
MOVWF
CLRWDT
DECFSZ
GOTO
RETURN
D'249'
CUENTA1
END
CUENTA2
SAL2
CUENTA1
SAL1
;
;
;
;
;
;
;
1c
1c
1c+1ms
1c *** se podría reiniciar el watchdog aquí ***
1c/2c
2c
2c
;
;
;
;
;
;
1c
1c
1c *** aquí reinicia el watchdog ***
1c/2c
2c
2c
Descargar