gama baja (pic16c5x) arquitectura básica

Anuncio
GAMA BAJA (PIC16C5X)
ARQUITECTURA BÁSICA
1. Memoria de Programa
ROM/EPROM
9-11
@
9-11
PC
Memoria
de
programa
8
Registros
Especiales
IR
Decodif
5
PA0,PA1
2
2
2
FSR<4:0>
9
5
5
2
STATUS
PCL
FSR
RA0,RA1
7
@
Registros
Propósito
General
8
8
8
W
A10 A9
A8
A7-A0
000h
2
Página#0
00
01
1FFh
200h
Página#1
3FFh
400h
DEC
10
3
11
Z,C,DC
12
PCL
SRAM
9-11
1
PC
2
9
Pila
Nivel1
Nivel2
2
STATUS
STATUS<6:5>
=PA1,PA0
•33 Instrucciones
•12-bit de palabra de instrucción
•ROM/EPROM desde 512 a 2048 palabras
•Hasta 4 páginas (512x12bits) de memoria de programa
•8-bit de datos
•RAM desde 25 a 73 bytes
•Hasta 4 bancos (32x8bits) de 32 registros
•El PC (9 a 11-bits) se obtiene de concatenar el PCL con
los bits PA1,PA0 del STATUS y el bit A8
•Los bits A10-A8 se actualizan al realizar un RESET o
ejecutar instrucciones de saltos (goto,call) o de
modificación del PCL
•Hasta 4 páginas de 512x12 bits
Página#2
5FFh
600h
Página#3
•Comportamiento de A8:
•RESET coloca A8=1
•La instrucción goto modifica el PCL y A8
•La instrucción de salto call o una escritura a PCL
limpia A8=0. Las subrutinas llamadas por call se
deben situar en las primeras 256 palabras de página
7FFh
8
2
A10 A9
(*)9 a 11 bits de bus de @ para memoria de programa, dependiendo del µC
8
A8
A7-A0
PC
PCL
0
2
A10 A9
A8
<7:0>
IR call
STATUS
9
STATUS<6:5>
=PA1,PA0
8
<8:0>
ALU
IR goto
STATUS
STATUS<6:5>
=PA1,PA0
3
8
A7-A0
PC
PCL
2. Memoria de Datos
•Los registros se encuentran organizados hasta en 4
bancos de 32 registros (bytes) cada uno
•Dos tipos de registro: Registros especiales (SFR) y de
propósito general (GPR)
•La selección del banco se hace con RA1,RA0 del FSR
•Los 16 primeros registros (0x00 a 0x0F) sólo se
encuentran en el Banco 0, y no son usados RA1,RA0
durante la selección a estos. Contienen los registros
especiales (PCL,FSR,STATUS,INDF,TMR0,PORTA...)
•La cantidad máxima de registros de propósito general
es 72 ó 73 (si no existe PORTC)
5
FSR<4:0>
FSR<6:5>=RA1,RA0
2
3
00h
01h
02h
03h
04h
05h
06h
07h
111
101
110
100
011
001
010
000
DEC
08h
GPR
0Fh
10h
1
5
0
2Fh
30h
4Fh
50h
6Fh
70h
D/I
Registros de propósito general(GPR)
1Fh
3Fh
Banco 0
00
Banco 1
01
5Fh
Banco 2
10
7Fh
Banco 3
11
Nota 1: Registro no real
Nota 2: Sólo en dispositivos con PORTC (PIC16C55/C57)
RA1,RA0
5
IR
20h
40h
60h
INDF1
TMR0
PCL
STATUS
FSR
Estas direcciones se
PORTA
mapean en el Banco 0
PORTB
PORTC2
<4>
•Cambio de página con A10-A9:
•Cambiar PA1, PA0 y ejecutar un salto goto, call
o escritura a PCL
bsf STATUS,PA1 ;PA1=1
bcf STATUS,PA0 ;PA0=0
movlw 0x5F
;W=0x5F
movwf PCL
;PCL=W=>Salto a 0x45F
•Ejecución de la última instrucción de una página. No
cambia PA1,PA0. Un salto goto, call o escritura
a PCL (sin modificar PA1,PA0) devolvería el PC a
la página anterior
nop
;instrucc en 0x3FF
nop
;instrucc en 0x400
goto 0x05F
;Salto a 0x25F
•RESET coloca A10=A9=A8=1, PCL=$FF y
PA1=PA0=0.
(El vector de reset se situa en la última palabra de
memoria de programa del µC, y la selección de
página apunta a Página#0)
•0x1FF para 512 palabras (PIC16C56 )
•0x3FF para 1024 palabras (PIC16C57 )
•0x7FF para 2048 palabras (PIC16C58 )
org 0x1FF
;ó 0x3FF,0x7FF
goto 0x0
;vector reset a 0x0
1
0
0
0
1
0
1
1
8
1
1
1
IR
W
ROM/EPROM
E2PROM/FLASH
@
9-13
PC
Memoria
de
programa
9-13
Pila
Nivel1
Nivel2
SRAM
Registros
Especiales
Nivel8
5
PCLATH
PCL
8
FSR
IRP,RP1,RP0
STATUS
FSR<7>
3
8
1
14
IR
Decodif
9-13
11
2
2
7
7
9
7
@
Registros
Propósito
General
8
8
8
W
8
3
ALU
8
(*)9 a 13 bits de bus de @ para memoria de programa, dependiendo del µC
3
Z,C,DC
•Direccionamiento Directo: Los 5 LSBs de la
palabra de instrucción seleccionan el registro y
RA1,RA0 del FSR seleccionan el banco
bsf FSR,6
;RA1=1
bcf FSR,5
;RA0=0
movwf 0x10
;Registro 0x50=W
movwf 0x26
;Equivale a movwf PORTB
•Direccionamiento Indirecto: Se usa un acceso al
registro no real INDF (0x00), accediéndose al registro
apuntado por FSR
movlw 0x10
movwf FSR
;FSR=0x10
b0 clrf INDF
;(FSR)=0; Dir indirecto
incf FSR,F
;FSR++
btfss FSR,5 ;Si FSR<0x20
goto b0
; Nueva iteración bucle
•14-bit de palabra de instrucción
•Memoria de programa desde 512 a 8192 palabras
•Hasta 4 páginas (2048x14bits) de memoria de programa
•8-bit de datos
•RAM desde 80 a 368 bytes
•Hasta 4 bancos (128x8bits) de 128 registros
2
1
GAMA MEDIA (PIC16CXXX)
ARQUITECTURA
BÁSICA
•35 Instrucciones
FSR<6:0>
•Tipos de direccionamiento: Inmediato, Directo, Indirecto
•Direccionamiento Inmediato: Los 8 LSBs de la
palabra de instrucción contiene el dato, que es
cargado a W
movlw 0x5F
;W=0x5F
PCH
IR goto o call
PCLATH
PC
PCL
PCH
A7-A0
5
A7-A0
3
8
2
8
11
0000h
13
Página#0
0000h
Memoria
de programa 1FFFh
00
•Comportamiento del PC:
•RESET coloca A12-A0 y PCLATH a 0, situando el
vector de reset en la primera posición (0x000)
org 0x0
goto 0x300
;vector reset a 0x0300
•La modificación del PCL actualiza PCH con los
5 LSBs del PCLATH. Selección lineal
<4:0>
PCLATH
PC
5
PCH
PCL
A12-A8
A7-A0
5
8
13
Memoria
de programa
movlw
movwf
movlw
movwf
11
2
A12-A8
PCL
A12-A8
<10:0>
•El PC (13-bits) se obtiene de la concatenación del PCL
con 5 bits A12-A8 (PCH)
•Los bits del PC se actualizan al realizar un RESET o
ejecutar instrucciones de saltos (goto,call) o de
modificación del PCL
PC
•En instrucciones de salto goto y call se obtienen
11 bits de la palabra de instrucción, actualizándose
PCL y PCH. PCLATH permite la selección paginada,
de hasta 4 páginas de 2048x14 bits
<4:3>
1. Memoria de Programa
0000h
1FFFh
0x1A
PCLATH
0x40
PCL
;Salto a 0x1A40
01
07FFh
0800h
Página#1
0FFFh
1000h
DEC
10
11
Página#2
17FFh
1800h
Página#3
1FFFh
bsf PCLATCH,3
bcf PCLATCH,4
call 0x45A
;PCLATH<3>=1
;PCLATH<4>=0
;Subrutina en 0x0C5A
•Ejecución de la última instrucción de una página. No
cambia PCLATH. Un salto goto, call o escritura
a PCL (sin modificar PCLATH) devolvería el PC a
la página anterior
nop
;instrucc en 0x0FFF
nop
;instrucc en 0x1000
goto 0x45A
;Salto a 0x0C5A
2. Memoria de Datos
•Los registros se encuentran organizados hasta en 4
bancos de 128 registros (bytes) cada uno
•Dos tipos de registro: Registros especiales (SFR) y de
propósito general (GPR)
•La selección del banco se hace dependiendo del tipo de
direccionamiento directo o inmediato, con RP1,RP0 del
STATUS, o con IRP del STATUS y el MSB del FSR
•Hay registros SFR (INDF,PCL,STATUS,FSR,PCLATH...)
mapeados en todos los bancos
•En algunos dispositivos los últimos 16 GPRs de cada
banco están mapeados en el Banco 0 (Common RAM)
8
FSR<7:0>
FSR<6:0>
FSR<7>
7
STATUS<7>= IRP
2
2
STATUS<6:5>=RP1,RP0
STATUS<7:5>
0
1
D/I
2
11
01
10
00
DEC
3
00h
01h
02h
03h
04h
05h
06h
80h INDF
INDF1
TMR0
OPTION
PCL
PCL
STATUS
STATUS
FSR
FSR
PORTA
TRISA
PORTB
TRISB
100h
INDF
180h
INDF
TMR0
PCL
STATUS
FSR
OPTION
PCL
STATUS
FSR
PORTB
TRISB
0
9Fh
A0h
11Fh
120h
19Fh
1A0h
F0h
170h
1F0h
FFh
17Fh
1FFh
Registros de propósito general(GPR)
6Fh
70h
7
IR
7
Otros SFR y GPR
1Fh
20h
1
D/I
Mapeados en el Banco 02
7Fh
Banco 0
00
Banco 1
01
Banco 0,1
0
Banco 2
10
Banco 3
11
Banco 2,3
1
RP1,RP0 (direcc. directo)
IRP (direcc. indirecto)
Nota 1: Registro no real
Nota 2: Algunos dispositivos mapean todos estos registros en el Banco 0 (common RAM)
•Tipos de direccionamiento: Inmediato, Directo, Indirecto
•Direccionamiento Inmediato: Los 8 LSBs de la
palabra de instrucción contiene el dato, que es
cargado a W
movlw 0x5F
;W=0x5F
1
1
0
0
X
X
0
1
0
1
1
8
1
1
1
IR
W
•Direccionamiento Directo: Los 7 LSBs de la
palabra de instrucción seleccionan el registro y
RP1,RP0 del STATUS seleccionan el banco
bsf STATUS,RP0
;RP0=1
bcf STATUS,RP1
;RP1=0
movwf 0x3F
;Registro 0xBF=W
movwf PORTB
;Registro TRISB=W
•Direccionamiento Indirecto: Se usa un acceso al
registro no real INDF (0x00), accediéndose al registro
apuntado por FSR<6:0>, y seleccionando el banco
con IRP del STATUS y FSR<7>
bsf STATUS,IRP
;IRP=1
movlw 0xA0
movwf FSR
;FSR=0xA0, FSR’=0x1A0
b0 clrf INDF
;(FSR’)=0; Dir indirecto
incf FSR,F
;FSR’++
btfss FSR,6 ;Si FSR’<0x1C0
goto b0
; Nueva iteración bucle
INSTRUCCIONES
PIC16C5X/16CXXX
PIC16C5X:
Aritméticas
33 Instrucciones (2 especif.
), 12-bit Program Word
PIC16CXXX: 35 Instrucciones (4 especif.
), 14-bit Program Word
31 Instrucciones Comunes
Manipulación bits individuales:
Ciclos
STATUS
bcf f,b
BIT ‘b’ CLEAR of ‘f’
1
-
bsf f,b
BIT ‘b’ SET of ‘f’
1
-
CLEAR W
1
CLEAR ‘f’
1
Z
movlw k
MOVE LITERAL ‘k’ TO W
1
-
movf
f,d1
f,d1
MOVE W TO ‘f’
MOVE ‘f’ TO ‘d’
1
Z
decf f,d1
DECREMENT ‘f’ PUTTING TO ‘d’
1
Z
comf f,d1
COMPLEMENT ‘f’ PUTTING TO ‘d’
1
Z
addlw k
ADD LITERAL ‘k’ TO W
1
C,DC,Z
addwf f,d1
ADD W AND ‘f’ PUTTING TO ‘d’
1
C,DC,Z
sublw k
SUBSTRACT W FROM LITERAL ‘k’
1
C,DC,Z
subwf f,d1
SUBSTRACT W FROM ‘f’ PUT TO ‘d’
1
C,DC,Z
andlw k
AND LITERAL ‘k’ TO W
1
Z
andwf f,d1
AND W WITH ‘f’ PUTTING TO ‘d’
1
Z
iorlw k
INCL-OR LITERAL ‘k’ TO W
1
Z
iorwf f,d1
INCL-OR W WITH ‘f’ PUTTING TO ‘d’
1
Z
xorlw k
EXCL-OR LITERAL ‘k’ TO W
1
Z
xorwf f,d1
EXCL-OR W WITH ‘f’ PUTTING TO ‘d’
1
Z
Z
clrf f
movwf f
INCREMENT ‘f’ PUTTING TO ‘d’
Lógicas:
Transferencia de datos:
clrw
incf f,d1
1
1
Z
SWAP NIBBLES OF ‘f’ PUTTING TO ‘d’
1
-
tris f2
MOVE W TO TRIS’f’
1
-
Rotaciones:
option
MOVE W TO OPTION
1
-
rlf f,d1
ROTATE LEFT ‘f’ PUTTING TO ‘d’
1
C
rrf f,d1
ROTATE RIGHT ‘f’ PUTTING TO ‘d’
1
C
swapf
Nota1: d={0,1}; W=0⇒W, F=1⇒‘f’
Nota2: f={5,6,7}; PORTA=5⇒TRISA, PORTB=6⇒TRISB,
PORTC=7⇒TRISC
Saltos:
goto label
GOTO INSTRUCCTION @’label’
2
-
PIC16C5X:
STATUS
(03h,23h,43h,83h)
call label
CALL SUBRUTINE @’label’
2
-
return
RETURN FROM SUBRUTINE
2
-
retlw k
RETURN SUBR., MOVE LITERAL ‘k’ TO W
2
-
retfie
RETURN FROM INTERRUPT, RE-ENABLE
2
-
btfsc f,b3
BIT ‘b’ TEST OF ‘f’, SKIP IF CLEAR
1/24
-
btfss f,b3
BIT ‘b’ TEST OF ‘f’, SKIP IF SET
1/24
-
decfsz f,d1
DECREMENT ‘f’ PUTTING TO ‘d’,
SKIP IF ZERO
1/24
-
INCREMENT ‘f’ PUTTING TO ‘d’,
SKIP IF ZERO
1/24
-
incfsz
Nota3: b=[0,7]
Nota4: 1 SI NO SALTA, 2 SI SALTA
Otras:
clrwdt
CLEAR WATCHDOG TIMER
1
sleep
SLEEP MODE
1
nop
NO OPERATION
1
TO=1
PD=1
TO=1
PD=0
-
R/W
R/W
R
PA21 PA1 PA0 TO
R
R/W
R/W
R/W
PD
Z
DC
C
R
R/W
R/W
R/W
PD
Z
DC
C
usado. No se recomienda usarlo para futura compatibilidad
PIC16CXXX:
STATUS
(03h, 83h,103h,183h)
2 Algunos
Saltos condicionales:
f,d1
1 No
R/W
R/W
R/W
R/W
R
IRP2 RP11 RP0 TO
dispositivos no usan estos bits: deben mantenerse a 0
Z: Flag de Zero
C: Flag de Carry/Borrow
DC: Flag de Digit Carry/Borrow (4-bit LSBs)
A
equ 0x20
...
movlw 0x25
xorwf A,W
btfsc STATUS,Z
goto ZERO
movlw 0x10
subwf A,W
btfss STATUS,C
goto MENOR0x10
movlw 0xCF
addwf A,F
btfsc STATUS,C
goto DESBORDE
...
;GPR 0x20 contiene A
;W=0x25
;W=A xor W
;Si A=0x25 => Z=1
;
salta a ZERO
;W=0x10
;W=A-W
;Si A-0x10<0 => C=0
; salta a MENOR0x10
;W=0xCF
;A=A+0xCF
;Si A+0xCF>0xFF => C=1
; salta a DESBORDE
CONVERSIÓN DE CÓDIGO
PIC16C5X/16CXXX
•Los dispositivos de gama baja sólo poseen TIMER0,
WDT, y puertos PORTA,PORTB,PORTC
•El PORTB de la gama media permite pull-up interno
•Los registros OPTION,TRISA,TRISB,TRISC están
direccionados en los bancos de registros en la gama
media, pero no en la baja
•2 Niveles de pila en gama baja, 8 en gama media
•La gama media incorpora nuevas instrucciones
•Vector de RESET en 0x0 en gama media, y en la última
palabra de instrucción en la gama baja
•No permiten interrupciones en gama baja
•Reubicar adecuadamente las variables almacenadas
en los GPR
•Revisar el uso del registro OPTION
•Revisar el uso de los registros de selección de bancos
de registros y paginación de memoria de programa:
STATUS,FSR,PCL,PCLATH,INDF
•Es recomendable el uso de las directivas del PASM
pagesel en instrucciones de salto call o goto, y
banksel en instrucciones con direccionamiento directo
•Gama baja (PIC16C5X):
•pagesel: bsf y bcf de STATUS<6:5>=PA1,PA0
•banksel: bsf y bcf de FSR<6:5>=RA1,RA0
DATO1
DATO2
INIT
SUBR1
INST2
equ 0x10
equ 0x50
org 0
banksel DATO1
clrf DATO1
banksel DATO2
clrf DATO2
pagesel SUBR1
call SUBR1
pagesel INST2
goto INST2
org 0x0FF
retlw 0
org 0x300
;GPR en Banco0
;GPR en Banco2
Direcc. Directo/Indirecto
;Ensambla bcf 0x4,0x5 y bcf 0x4,0x6
;Ensambla bcf 0x4,0x5 y bsf 0x4,0x6
;Ensambla bcf 0x3,0x5 y bcf 0x3,0x6
;Ensambla bsf 0x3,0x5 y bcf 0x3,0x6
;Subrutina en Página0
;Intrucciones en Página1
Optimizable!
•Gama media (PIC16CXXX):
•pagesel: bsf y bcf de PCLATH<4:3>
•banksel: bsf y bcf de STATUS<6:5>=RP1,RP0
DATO1
DATO2
INIT
SUBR1
INST2
equ 0xA0
equ 0x120
org 0
banksel DATO1
clrf DATO1
banksel DATO2
clrf DATO2
pagesel SUBR1
call SUBR1
pagesel INST2
goto INST2
org 0x1000
return
org 0x1800
;GPR en Banco1
;GPR en Banco2
Sólo direcc. Directo
;Ensambla bsf 0x3,0x5 y bcf 0x3,0x6
;Ensambla bcf 0x3,0x5 y bsf 0x3,0x6
;Ensambla bcf 0xA,0x3 y bsf 0xA,0x4
;Ensambla bsf 0xA,0x3 y bsf 0xA,0x4
;Subrutina en Página2
;Intrucciones en Página3
Optimizable!
Descargar