Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ATE-Universidad de Oviedo
Organizacin de la Memoria
ORGANIZACIN de la MEMORIA
Dentro del PIC16F877 se distinguen tres bloques de memoria.
Memoria de programa
En sus 8192 posiciones (8Kx14bits) contiene el programa con las
instrucciones que gobiernan la aplicacin. Es del tipo no voltil.
Memoria de datos RAM
Guarda las variables y datos. Son registros de 8 bits. Es voltil.
Memoria EEPROM de datos
Es una pequea rea de memoria de datos de lectura y escritura no voltil
que permite garantizar que determinada informacin estar siempre
disponible al reinicializarse el programa. Se gestiona de manera distinta a la
memoria de datos RAM.
ATE-Universidad de Oviedo
Organizacin de la Memoria
Memoria
de Programa
y de datos
8K x 14
368 x 8
Microcontrolador
PIC16F877
(familia media)
256 x 8
ATE-Universidad de Oviedo
Organizacin de la Memoria
14 bits
0000h
RESET
0001h
0002h
0003h
0004h
0005h
0006h
0007h
0008h
0009h
000Ah
000Bh
1FFCh
1FFDh
1FFEh
1FFFh
INT
La memoria de programa
Organizacin de la Memoria
Organizacin de la Memoria
Acceso a la
Memoria de
Programa
Lneas de datos
de la memoria
de programa
(contenido)
ATE-Universidad de Oviedo
Organizacin de la Memoria
Organizacin de la Memoria
PC y PCLATH
El PC de 13 bits se divide en dos registros: PCH (parte alta) y PCL (parte baja).
El registro PCL es uno ms de los registros de RAM, pero PCH no es accesible
directamente
Cada vez que se opere con PCL o se cargue el PC con 11 bits procedentes de
un salto o llamada a subprograma, un registro denominado PCLATH, aportar
los bits que le falten al PC para llegar a los 13 (aporta 5 bits 2 bits).
El PCLATH no es la parte alta del PC, sino que es un complemento al PCL o a
la direccin que aporta una instruccin de salto o llamada a subprograma
PCLATH
c7 c6 c5 c4 c3 c2 c1 c0
PC
Organizacin de la Memoria
MAPA DE MEMORIA DE
PROGRAMA EN UN
PIC16F876/877
MAPA DE MEMORIA DE
PROGRAMA EN UN
PIC16F873/874
ATE-Universidad de Oviedo
Organizacin de la Memoria
ORG 0X05
BSF STATUS,RP0
MOVLW 0X00
MOVWF TRISB
....
ATE-Universidad de Oviedo
10
Organizacin de la Memoria
ORG 0XF0
BTFSC INTCON,RBIF
GOTO RSI_PORTB
....
ATE-Universidad de Oviedo
11
Organizacin de la Memoria
ATE-Universidad de Oviedo
12
Organizacin de la Memoria
CONTADOR DE PROGRAMA
El contador de programa (PC) es un registro de 13 bits que se descompone en 2
registros:
12
8 7
PCH
PCL
ATE-Universidad de Oviedo
Organizacin de la Memoria
CONTADOR DE PROGRAMA
Instrucciones que tengan el PCL como destino
DIR. DE MEMORIA
DE PROGRAMA
INSTRUCCIN
CODIGO INSTRUCCION
0015h
MOVLW 0xF0
0016h
MOVWF PCL
0016h
12
0 0 0 0 0
12
CONTENIDO DEL
REGISTRO PCLATH
0 0 0 1 0 1 1 0
87
0 0 0 0 0
12
87
0 0 0 1 0 1 1 1
87
0 0 0 1 0
1 1 1 1 0 0 0 0
0 0 0 0 0 0 1 0
La pila no se ve
afectada por la
instruccin
ATE-Universidad de Oviedo
14
Organizacin de la Memoria
CONTADOR DE PROGRAMA
Instruccin GOTO
DIR. DE MEMORIA
DE PROGRAMA
.......
0025h
......
......
0856h
INSTRUCCIN
CODIGO INSTRUCCION
12
GOTO LABEL1
12
LABEL1
MOVLW 0xF0
87
0 0 0 0 0
0026h
0 0 1 0 0 1 1 0
87
0 1 0 0 0
0857h
0 1 0 1 0 1 1 1
0856h
CONTENIDO DEL
REGISTRO PCLATH
4 3
12 11 10
87
0 1 0 0 0
0 1 0 1 0 1 1 0
X X X 0 1 X X X
La pila no se ve
afectada por la
instruccin
ATE-Universidad de Oviedo
Organizacin de la Memoria
CONTADOR DE PROGRAMA
Instruccin CALL
DIR. DE MEMORIA
DE PROGRAMA
INSTRUCCIN
CODIGO INSTRUCCION
0004h
0005h
......
......
1000h
........
1100h
......
CALL SUBRUT1
12
12
SUBRUT1
MOVLW 0xF0
0 0 0 0 0 1 1 0
87
1 0 0 0 0
0 0 0 0 0 0 0 1
RETURN
CONTENIDO DEL
REGISTRO PCLATH
12
87
0 0 0 0 0
87
0 0 0 0 0
4 3
12 11 10
87
1 0 0 0 0
0 0 0 0 0 0 0 0
X X X 1 0 X X X
0 0 0 0 0 1 1 0
ATE-Universidad de Oviedo
16
Organizacin de la Memoria
CONTADOR DE PROGRAMA
Instruccin RETURN, RETFIE RETLW
DIR. DE MEMORIA
DE PROGRAMA
INSTRUCCIN
CODIGO INSTRUCCION
0004h
0005h
......
......
1000h
........
1100h
......
CALL SUBRUT1
MOVLW 0xF0
SUBRUT1
RETURN
NO AFECTA AL
CONTENIDO DEL
REGISTRO PCLATH
EL RETORNO DE
SUBRUTINA
12
4 3
12
87
0 0 0 0 0 0 0 1
1 0 0 0 1
87
0 0 0 0 0
0 0 0 0 0 1 1 0
X X X X X X X X
87
0 0 0 0 0
12
0 0 0 0 0 1 1 0
ATE-Universidad de Oviedo
Organizacin de la Memoria
CONTADOR DE PROGRAMA
Debe tenerse cuidado al implementar tablas de conversin (como por ejemplo en las
utilizadas en teclados matriciales) que la tabla no quede a caballo entre 2 pginas de
memoria.
En la porcin de programa para un PIC16F877 que se adjunta, se puede
apreciar como en un determinado momento se pretende cargar el contenido
del PORTB (que puede variar entre 0x00 y 0x1F), sumarle 0x20 y sacar el
valor obtenido por el PORTC (suponer los registros asociados a los puertos
programados oportunamente). Se observa, no obstante, que para
determinados valores del PORTB la operacin no se ejecuta correctamente.
Por qu?. Propngase una posible solucin para resolver el problema.
Vector
Start
Bucle
org
TABLA
include "p16F877.inc"
org
00h
goto
org
nop
org
Start
0F0h
bsf
clrf
bcf
STATUS,RP0
TRISC
STATUS,RP0
movlw
movwf
movf
call
movwf
goto
7F0h
0x07
PCLATH
PORTB,w
TABLA
PORTC
Bucle
addwf
retlw
retlw
retlw
retlw
retlw
retlw
PCL,f
0x20
0x21
0x22
0x23
0x24
0x25
;Reset
100h
ATE-Universidad de Oviedo
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
end
0x26
0x27
0x28
0x29
0x2A
0x2B
0x2C
0x2D
0x2E
0x2F
0x30
0x31
0x32
0x33
0x34
0x35
0x36
0x37
0x38
0x39
0x3A
0x3B
0x3C
0x3D
0x3E
0x3F
18
Organizacin de la Memoria
ATE-Universidad de Oviedo
Organizacin de la Memoria
INCLUDE P16C67.INC
ORG 0X00
ESPERA
BSF
PCLATH,3
CALL
SUBRUT1
GOTO
ESPERA
ORG
ESPERA
0X800
INCLUDE P16C67.INC
INCLUDE P16C67.INC
ORG 0X00
ORG 0X00
MOVLW
0XFF
BSF
MOVWF
PCLATH
BSF
PCLATH,4
CALL
SUBRUT1
CALL
SUBRUT1
GOTO
ESPERA
ORG
0X800
ESPERA
PCLATH,3
GOTO
ESPERA
ORG
0X800
NOP
NOP
NOP
SUBRUT1
ORG
0X1800
CLRF
TMR0
BCF
PCLATH,3
SUBRUT1
ORG
0X1800
ORG
0X1800
CLRF
TMR0
SUBRUT1
CLRF
TMR0
CLRF
PCLATH
CLRF
PCLATH
RETURN
RETURN
END
END
RETURN
END
NO
SI
ATE-Universidad de Oviedo
SI
20
10
Organizacin de la Memoria
Cul o cuales de los siguientes programas para PIC16C67 realizar
correctamente la ejecucin desde la posicin 0x100 hasta la etiquetada
como WAIT?. Suponer que TECLA es una variable donde se tiene el valor
para el desplazamiento dentro de TABLA. Raznese la respuesta.
b)
a)
INCLUDE
P16C67.INC
INCLUDE P16C67.INC
ORG 0X100
BSF PCLATH,4
MOVF TECLA,W
CALL TABLA
WAIT GOTO WAIT
ORG 0X100
MOVLW 0x10
MOVWF PCLATH
MOVF TECLA,W
CALL TABLA
CLRF PCLATH
WAIT GOTO WAIT
ORG 0X1000
TABLA
ADDWF PCL,F
RETLW 0x01
RETLW 0x02
................
RETLW....0x0F
END
ORG 0X1000
TABLA
ADDWF PCL,F
RETLW 0x01
RETLW 0x02
................
RETLW....0x0F
END
SI
NO
c)
d)
INCLUDE P16C67.INC
ORG 0X100
MOVLW 0x1F
MOVWF PCLATH
MOVF TECLA,W
CALL TABLA
CLRF PCLATH
WAIT GOTO WAIT
INCLUDE P16C67.INC
ORG 0X100
BSF PCLATH,3
MOVF TECLA,W
CALL TABLA
CLRF PCLATH
WAIT GOTO WAIT
ORG 0X1000
TABLA
ADDWF PCL,F
RETLW 0x01
RETLW 0x02
................
RETLW....0x0F
END
ORG 0X1000
TABLA
ADDWF PCL,F
RETLW 0x01
RETLW 0x02
................
RETLW....0x0F
END
NO
NO
21
ATE-Universidad de Oviedo
Organizacin de la Memoria
8bits
000h
a
07Fh
080h
a
0FFh
100h
a
17Fh
180h
a
1FFh
22
11
Organizacin de la Memoria
STATUS
La memoria de datos
STATUS
STATUS
STATUS
PORTB
23
Organizacin de la Memoria
ATE-Universidad de Oviedo
24
12
Organizacin de la Memoria
ATE-Universidad de Oviedo
Organizacin de la Memoria
DIRECTO
(RP1:RP0)
INDIRECTO
(IRP)
ATE-Universidad de Oviedo
26
13
Organizacin de la Memoria
DIRECCIONAMIENTO INDIRECTO
1)
2)
3)
Ejemplo de direccionamiento
indirecto donde se limpian las
posiciones de memoria de datos
comprendidas entre la posicin
20h y la 2Fh (ambas incluidas)
NEXT
CONTINUE
:
ATE-Universidad de Oviedo
27
Organizacin de la Memoria
;
; Banco 2
; (**Solo si el micro tiene banco 2 **)
;
;
BSF STATUS, IRP ; Selecciona Banco 2 y 3
MOVLW 0x20
; 1 dir de los GPRs en el banco
MOVWF FSR
; Moverlo al reg, de dir. ind.
Bank2_LP
CLRF INDF0
; Limpia el GPR apuntado por FSR
INCF FSR
; Inc.puntero
BTFSS FSR, 7
; Fin de banco? (FSR = 80h, C = 0)
GOTO Bank2_LP ; NO, limpia siguiente
;
; Banco 3
; (**Solo si el micro tiene banco 3 **)
;
MOVLW 0xA0
; 1 dir de los GPRs en el banco
MOVWF FSR
; Moverlo al reg, de dir. ind.
Bank3_LP
CLRF INDF0
; Limpia el GPR apuntado por FSR
INCF FSR
; Inc.puntero
BTFSS STATUS,C ; Fin de banco? (FSR = 00h, C = 1)
GOTO Bank3_LP ; NO, limpia siguiente
ATE-Universidad de Oviedo
28
14
Organizacin de la Memoria
bit 7 IRP: Register Bank Select bit (used for indirect addressing)
1 = Bank 2, 3 (100h - 1FFh)
0 = Bank 0, 1 (00h - FFh)
bit 6-5 RP1:RP0: Register Bank Select bits (used for direct addressing)
11 = Bank 3 (180h - 1FFh)
10 = Bank 2 (100h - 17Fh)
01 = Bank 1 (80h - FFh)
00 = Bank 0 (00h - 7Fh)
Each bank is 128 bytes
29
ATE-Universidad de Oviedo
Organizacin de la Memoria
Bit Value
ATE-Universidad de Oviedo
000
001
010
011
100
101
110
111
TMR0 Rate
1:2
1:4
1:8
1 : 16
1 : 32
1 : 64
1 : 128
1 : 256
WDT Rate
1:1
1:2
1:4
1:8
1 : 16
1 : 32
1 : 64
1 : 128
30
15
Organizacin de la Memoria
ATE-Universidad de Oviedo
31
Organizacin de la Memoria
ATE-Universidad de Oviedo
32
16
Organizacin de la Memoria
I2C Master
- A transmission/reception has taken place.
- The initiated START condition was completed by the SSP module.
- The initiated STOP condition was completed by the SSP module.
- The initiated Restart condition was completed by the SSP module.
- The initiated Acknowledge condition was completed by the SSP module.
bit 6 ADIF: A/D Converter Interrupt Flag bit
- A START condition occurred while the SSP module was idle (Multi-Master
1 = An A/D conversion completed
system).
0 = The A/D conversion is not complete
- A STOP condition occurred while the SSP module was idle (Multi-Master
system).
bit 5 RCIF: USART Receive Interrupt Flag bit
0 = No SSP interrupt condition has occurred.
1 = The USART receive buffer is full
bit 2 CCP1IF: CCP1 Interrupt Flag bit
0 = The USART receive buffer is empty
Capture mode:
1 = A TMR1 register capture occurred (must be cleared in software)
bit 4 TXIF: USART Transmit Interrupt Flag bit
0 = No TMR1 register capture occurred
1 = The USART transmit buffer is empty
Compare mode:
0 = The USART transmit buffer is full
1 = A TMR1 register compare match occurred (must be cleared in software)
0 = No TMR1 register compare match occurred
bit 3 SSPIF: Synchronous Serial Port (SSP) Interrupt Flag
PWM mode:
1 = The SSP interrupt condition has occurred, and must be cleared in software
Unused in this mode
before returning from the Interrupt Service Routine. The conditions that will set
bit 1 TMR2IF: TMR2 to PR2 Match Interrupt Flag bit
this bit are:
1 = TMR2 to PR2 match occurred (must be cleared in software)
SPI - A transmission/reception has taken place.
0 = No TMR2 to PR2 match occurred
I2C Slave - A transmission/reception has taken place.
bit 0 TMR1IF: TMR1 Overflow Interrupt Flag bit
1 = TMR1 register overflowed (must be cleared in software)
0 = TMR1 register did not overflow
Note 1: PSPIF is reserved on PIC16F873/876 devices; always maintain33
this bit
ATE-Universidad
de Oviedo
clear.
bit 7 PSPIF(1): Parallel Slave Port Read/Write Interrupt Flag bit
1 = A read or a write operation has taken place (must be cleared in software)
0 = No read or write has occurred
Organizacin de la Memoria
34
17
Organizacin de la Memoria
ATE-Universidad de Oviedo
35
Organizacin de la Memoria
ATE-Universidad de Oviedo
36
18