Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Microcontroladores 8051
1.1. Caractersticas de los microcontroladores
8051/8052
En la siguiente lista se indican las caractersticas ms importantes de los
microcontroladores de la familia 8051/8052.
Oscilador interno.
2 interrupciones externas.
2. Estructura de la
memoria en los
microcontroladores 8051
2.2. Memoria de datos interna
Los microcontroladores 8051 disponen de una memoria interna muy
limitada, un total de 256 posiciones destinadas a los datos, registros de trabajo y
registros especiales. En la familia de microcontroladores 8052 se ha ampliado
mediante la incorporacin de 128 nuevas posiciones entre las posiciones de
memoria 80H y FFH que se solapan con las actuales. Para poder acceder a un
grupo o al otro se ha de hacer por medio del direccionamiento, de esta forma, a
la memoria principal se accede mediante el direccionamiento directo y a la
secundaria o solapada mediante el indirecto. Atendiendo a los modos de
direccionamiento del microcontrolador, podemos distinguir tres zonas de
memoria:
MOV R0,#90H
acceder
MOV @R0,#00H
contenido
INC R0
(91H)
MOV @R0,#00H
INC R0
(92H)
MOV @R0,#00H
INC R0
(93H)
MOV @R0,#00H
interna, tenemos el RB0 que ocupa las posiciones 00H a 07H, el RB1 de la 08H
a 0FH y as sucesivamente (ver la siguiente figura).
Se puede conmutar de banco de registros de trabajo por software
mediante la configuracin de los bits B3 y B4 del registro de estado PSW. Este
sistema se utiliza para salvaguardar el estado de los registros internos entre
diferentes procesos del software con la CPU, se puede conmutar de banco de
registros cuando se accede o retorna en una subrutina, ante una peticin de
interrupcin etc.
rea de direccionamiento bit a bit
El rea de direccionamiento bit a bit est formada por 16 Bytes en las posiciones
de la RAM interna 20H a 2FH. Cada Byte est dividido en 8 bits, con nmeros
correlativa entre el 0 y el 127 da un total de 128 bits, a los cuales se puede
acceder con instrucciones especificas de direccionamiento bit a bit. Para hacer
referencia a un bit en concreto, se puede indicar su numeracin o la de la
posicin de memoria y el bit en cuestin desde el 0 al 7. Por ejemplo, el bit 0 es
el 20.0, el 1 el 20.1, el 9 es 21.0 y as sucesivamente.
Esta zona tambin admite el direccionamiento normal por Byte. Por ejemplo,
podemos activar el bit 09H por medio de instrucciones de bits.
FFH
F7H
EFH
E7H
DFH
D7H
RCAP2L # RCAP2H # TL2 # TH2 #
SBUF
CFH
C7H
BFH
B7H
AFH
A7H
9FH
90H P1 *
88H TCON *
80H P0 *
TMOD TL0
SP
DPL
TL1
DPH
TH0
TH1
97H
8FH
PCON 87H
La siguiente tabla muestra la descripcin y los smbolos de cada bit o pin de los
registros internos (SFR) de la familia de microcontroladores 8051/8052.
Regist Descripci Direcci Smbolo del bit o funcin alternativa
ro
n
n
del puerto
LS
MSB
B
Acumulado
r
ACC*
E0H
E7
E6 E5 E4 E3 E2 E1 E0
(Accumulat
or)
Registro B
B*
F0H
F7
F6 F5 F4 F3 F2 F1 F0
(register B)
Apuntador
a
datos
DPTR: (Data
pointer) (2
bytes)
Byte alto
del DPTR
DPH
(Data
83H
pointer
high)
Byte bajo
del DPTR
DPL
(Data
82H
pointer
low)
AF
AE AD AC AB AA A9 A8
Habilitaci
n
de
interrupcio
ET
ET EX
EX
IE*
A8H
EA
ES
ET0
nes
2
1
1
0
(Interrupt
enable)
BF
BE BD BC BB BA B9 B8
Prioridad
de
las
interrupcio
PT
PT PX
PX
IP*
B8H
PS
PT0
nes
2
1
1
0
(Interrupt
priority)
87
86 85 84 83 82 81 80
P0*
Puerto
0 80H
AD7 AD AD AD AD AD AD1 AD
Valor
del reset
00H
00H
00H
00H
0x00000
0B
0x00000
0B
FFH
(Port 0)
P1*
P2*
Puerto
(Port 1)
Puerto
(Port 2)
90H
A0H
97
6 5 4 3
96 95 94 93
2
92
0
90
A7
A6
A1
4
B6
W
R
A5
A1
3
B5
GF GF
PD
1
0
IDL
D7
D6 D5 D4 D3 D2 D1
D0
CY
AC F0
A15
B7
Puerto
3
B0H
(Port 3)
Control del
PCON consumo
87H
1
(Power
control)
P3*
PSW*
Palabra de
estado del
programa
D0H
(Program
status
word)
RD
SMO
T1
91
T2E
T2 FFH
X
A4 A3 A2 A1 A0
A1
A11 A10 A9 A8 FFH
2
B4 B3 B2 B1 B0
INT INT
Rx
T0
TxD
FFH
1
0
D
RS RS
OV
1 0
0xxxxxxx
B
00H
Valor
Regist Descripci Direcc Smbolo del bit o funcin alternativa
del
ro
n
in
del puerto
reset
MS
LSB
B
Byte alto
RCAP2 de captura
CBH
00H
H#
(Capture
high)
Byte Bajo
RCAPL de captura
CAH
00H
#
(Capture
low)
Buffer de
datos serie
xxxxxx
SBUF (Serial
99H
xxB
data
buffer)
9F 9E 9D 9C 9B
9A 99 98
SCON* Control
98H
SM SM SM RE TB8 RB TI RI
00H
puerto
0
1
2
N
8
serie
(Serial
SP
controller)
Puntero
del stack
81H
(Stack
pointer)
Control de
las
temporizad
TCON*
88H
ores
(Timer
control)
Control del
T2CO timer
2
N*#
(Timer 2
control)
Temporiza
dor 0 parte
TH0
alta
(Timer
high 0)
Temporiza
dor 1 parte
TH1
alta
(Timer
high 1)
Temporiza
dor 2 parte
TH2# alta
(Timer
high 2)
Temporiza
dor 0 parte
TL0
baja
(Timer low
0)
Temporiza
dor 1 parte
TL1
baja
(Timer low
1)
Temporiza
dor 2 parte
TL2# baja
(Timer low
2)
TMOD Modo de
C8H
07H
8F
8E
8D
8C 8B
8A 89 88
TF1
TR
TF0 TR0 IE1
1
CF
CE CD CC CB
CA C9 C8
TF2
00H
8CH
00H
8DH
00H
CDH
00H
8AH
00H
8BH
00H
CCH
00H
89H
00H
los
temporizad
ores
(Timer
mode)
* Registro
con
direccionamiento
a
nivel
# Registros aadidos en la familia de microcontroladores 8052.
de
bit.
3. Modos de
direccionamiento 8051
3.1. Directo (Dir)
Dir. En el direccionamiento directo, se indica la direccin a operar de forma
absoluta.
Para la familia de microcontroladores 8051 se dispone de 256 direcciones
directas, correspondientes a (Ram interna + Registros SFR).
El OpCode va seguido de un byte que representa la direccin.
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
Direccionamiento indirecto
3.4. Implcito
La instruccin indica implcitamente el registro sobre el que se ha de operar.
INC A
;
A<-(A)+1,
incrementar
el
acumulador
CPL A ; A<-(), complementa el acumulador
MOV A,#0
;
A<-0,
poner
cero
en
el
Acc
MOV R1,#123 ; R1<-123, poner el valor 123 (decimal)
en el registro uno
3.6. Indexado
Se utilizan dos registros para apuntar a la direccin que contiene el dato. La
suma del contenido del DPTR ms el acumulador determina la direccin a
operar.
Este direccionamiento esta limitado a dos nicas instrucciones que mueven
datos de la ROM al acumulador.
Direccionamiento indexado
4. Tipos de instrucciones
en los microcontroladores
8051
Instrucciones aritmticas.
MOV A,#3
inmediato
MOV R0,#2
inmediato
A<-3
Mueve
A<-2
Mueve
al
al
Acumulador
registro
el
el
dato
3
dato
2
MOV A,#5
; A<-5 Mueve al Acumulador el dato
inmediato
5
CLR C
; C<-0 Pone a 0 el carry, por si en
operaciones anteriores ha sido afectado, para que no
interfiera
en
la
resta
SUBB A,#03H ; A<-(A)-3 Se resta al Acumulador el
dato inmediato
3, el
resultado queda
en el
Acumulador
INC byte. Incremento. Incrementa una unidad el contenido de un Byte (Acc,
registro, memoria), con el direccionamiento indicado.
MOV R0,#30H
; R0<-30H Mueve al registro 0 el dato
inmediato
30H
INC @R0
; ((R0))<-((R0))+1 Incrementa el
contenido de la posicin de memoria que indica R0
DEC byte. Decremento. Decremento de una unidad el contenido de un Byte
(Acc, registro, memoria), con el direccionamiento indicado.
DEC R1
de R1
3. Instrucciones lgicas
MOV A,#0F0H
; A<-F0H Mover al acumulador el dato
inmediato
F0H
ANL A,#10H
; A<-(A).10H Realiza la AND lgica
entre el acumulador y el dato inmediato.
AND lgica.
ORL destino,origen. OR (O) lgica de bits. Realizala operacin lgica O entre
el byte de origen y el byte de destino.
XRL destino,origen. XOR (O exclusivo) lgica de bits. Realizala operacin
lgica O exclusivo entre el byte de origen y el byte de destino.
A
0
0
1
1
B
0
1
0
1
Del acumulador
CLR A. A = 0, Borrar el acumulador.
XOR
0
1
1
0
JMP SALTO1
Salto
incondicional
...
...
SALTO1
...
...
C: Indicador de acarreo.
Ac: Indicador de acarreo auxiliar, indica el acarreo del bit 3, se utiliza en las
operaciones BCD.
Rs1
Rs0
Banco
Direccin
00H a 07H
08H a 0FH
10H a 17H
18H a 1FH
Ov
Ac
ADD
ADDC
SUBB
MUL
DIV
DA
RRC
RLC
SETB C
CLR C
CPL C
ANL C,Bit
ANL C,/Bit
ORL C,Bit
ORL C,/Bit
MOV C,Bit
CJNE
STACK EQU
NAME
ESTRUCTURA
030H
;*************************************
; Iniciar los vectores de interrupcin
;*************************************
USING 0
ORG
0H
(Posicin de la memoria ROM)
VECTOR:
JMP
;Origen
INICIO
del
;Reset
ORG
VECTOR+3H
;INT0
ORG
VECTOR+0BH
;Timer 0
ORG
VECTOR+13H
;INT1
ORG
VECTOR+1BH
;Timer 1
ORG
VECTOR+23H
;Puerto serie RI + TI
cdigo
ORG
VECTOR+2BH
;Timer 2
;********************************
; Tareas iniciales de preparacin
;********************************
ORG
VECTOR+30H
INICIO:
del stack
MOV
MOV
de registros 0
MOV
SP,#STACK-1
PSW,#00000000B
P1,#0H
;Fijar
el
puntero
;Selecciona el banco
;Preparar el puerto
;*******************
; Programa principal
;*******************
PROGRAMA:
0 a 0
MOV
P1,#0H
CALL
MOV
RETARDO
P1,#0FFH
;Realizar un retardo
;Poner los bits del puerto
CALL
JMP
RETARDO
PROGRAMA
;Realizar un retardo
;Reiterar de forma infinita
0 a 1
;***************************
; Subrutina de temporizacin
;***************************
RETARDO:
RET_3:
RET_2:
RET_1:
END
MOV
MOV
MOV
DJNZ
DJNZ
DJNZ
RET
R2,#7FH
R1,#0FFH
R0,#0FFH
R0,RET_1
R1,RET_2
R2,RET_3
5. Programacin en
Ensamblador
5.1. Ejemplos bsicos de programacin
Ejemplos de programas en ensamblador de los microcontroladores 8051.
E-1. Contador en el Acumulador de 0 a 99 en Hexadecimal
NAME
CONTADOR_HEX
ORG
INICIO:
REPETIR:
0
MOV
INC
CJNE
A,#0
A
A,#99,REPETIR
END
NAME
CONTADOR_BCD
ORG
INICIO:
REPETIR:
0
MOV
ADD
DA
CJNE
A,#0
A,#1
A
A,#99,REPETIR
END
NAME
ROTACION_ACUMULADOR
ORG
INICIO:
REPETIR:
0
MOV
RR
JMP
A,#1
A
REPETIR
END
E-4. Retardo por programa de 256 instrucciones DJNZ.
El tiempo de un retardo por programa no tiene un valor fijo, este depende
de las instrucciones que forman parte del bucle (los ciclos mquina utilizados) y
de la velocidad del reloj del microprocesador (CPU).
Para este ejemplo en cuestin, el bucle se realiza sobre la instruccin DJNZ, la
cual necesita dos ciclos mquina para su ejecucin. Cada ciclo mquina utiliza
12 periodos de reloj. Si la frecuencia de la CPU es de 12MHz, el tiempo
empleado en realizar las 256 iteraciones es de 512 s (microsegundos).
NAME
RETARDO_1
ORG
INICIO:
RET1:
0
MOV
DJNZ
R0,#0FFH
R0,RET1
END
Para determinar el tiempo se han de modificar los bits que representan los
valores ms significativos, correspondientes al R2.
Malgastar la capacidad de clculo de la CPU en temporizaciones o retardos por
software solo tiene sentido cuanto el microprocesador nicamente ha de
atender a un proceso. El trabajo normal es utilizar los timers y las
interrupciones para realizar las tareas de temporizacin, y dejar a la CPU libre
para otros procesos.
NAME
RETARDO_2
ORG
RETARDO:
RET3:
RET2:
RET1:
0
MOV
MOV
MOV
DJNZ
DJNZ
DJNZ
END
R2,#0FFH
R1,#0FFH
R0,#0FFH
R0,RET1
R1,RET2
R2,RET3
MOV SP,#2FH ;
posicin 30H
Situar
el
puntero
del
stack
en
la
(SP) = (SP)+1
((SP))
(Direccin)
Ejemplo:
...
PUSH A ; Situar
Acumulador
PUSH B ; Situar
registro B
en
el
Stack
el
contenido
del
en
el
Stack
el
contenido
del
Instruccin PUSH
5.3.3. POP
(Direccin) =
((SP))
(SP) = (SP)-1
...
...
POP B ; Recupera en el registro B el contenido del
Stack
POP A ; Recupera en el acumulador el contenido del
Stack
Instruccin POP
Pueden ser llamadas tantas veces como sea necesario por lo que se
reduce el cdigo el programa al tener el efecto de reutilizacin de
cdigo.
Como buen consejo, se recomienda siempre que sea posible la divisin del
programa en subrutinas o subprogramas y se minimice el contenido de
sentencias en el programa principal. Sobre todo, las subrutinas son necesarias
cuando una parte de un programa se ha de ejecutar mltiples veces.
Conseguiremos que el programa se mas sencillo y que ocupe menos espacio en
la ROM.
Si una subrutina est formada por pocas instrucciones, puede ser no aconsejable
crearla, ya que el mecanismo de llamada y retorno puede hacer que sea ms
lenta su ejecucin que situar las instrucciones directamente en el programa
principal.
(PC) = (PC)
+3
(SP) = (SP)
+1
((SP))
=
(PC7-0)
(SP) = (SP)
+1
((SP))
=
(PC15-8)
(PC)
=
Addres15-0
Instruccin RET
Retorno de subrutina. Se recupera del stack el contador del programa PC y se
contina la ejecucin del programa en la siguiente instruccin de la llamada a la
subrutina CALL.
RET
(PC15-8)
=
((SP))
(SP) = (SP)2
1
(PC7-0)
=
3
((SP))
(SP) = (SP)4
1
1
Anidamiento de subrutinas
Anidamiento de subrutinas
6. Programacin en C
6.1. Tipos de datos
Declaracin de los tipos de memoria
En la declaracin de la variable se puede indicar en que tipo de memoria se
almacenar.
La siguiente tabla muestra el tipo de memoria que se puede especificar.
Bits
1
8
8
8 / 16
16
Bytes
1
1
1 or 2
2
Rango
0a1
-128 a +127
0 a 255
-128 a +127 o -32768 a +32767
-32768 a +32767
unsigned short
signed int
unsigned int
signed long
unsigned long
float
sbit*
sfr*
sfr16*
16
16
16
32
32
32
1
8
16
2
2
2
4
4
4
1
2
0 a 65535
-32768 a +32767
0 a 65535
-2147483648 a 2147483647
0 a 4294967295
1.175494E-38 a 3.402823E+38
0a1
0 a 255
0 a 65535
Las comunicaciones en
serie
Las comunicaciones en serie RS-232 es una interfaz de comunicaciones
para la transmisin de datos en serie entre dispositivos electrnicos como
ordenadores,
mdems
etc.
La
norma RS-232C establecida
por
la EIA (Electronic Industries Alliance) determina las caractersticas fsicas de la
comunicacin de datos binarios entre dispositivos, DTE (Data Terminal
Equipment o Equipo Terminal de Datos) normalmente asociado a un ordenador
y dispositivos DCE (Data Communication Equipment o Equipo de
Comunicacin de Datos) para los quipos perifricos como mdems o autmatas.
En muchas ocasiones se realiza una equiparacin directa entre bps (bit rate)
y Bps (baud rate o baudios por segundo) y esto solo es cierto cuando el smbolo
que se trasmite corresponde a un bit.
C/T
M1
Timer 1
M0
GATE
LSB
M0
C/T
M1
Timer 0
M0
0
1
0
1
de
la
seal
de
reloj.
(bits
Modo 0: 1 M (mx.)
Modo 2: 375 K
Modo 1, 3: 62,5 K
19200
9600
4800
2400
1200
137500
110000
110000
por Frecuencia
reloj
12 MHz
12 MHz
12 MHz
11,0592 MHz
11,0592 MHz
11,0592 MHz
11,0592 MHz
11,0592 MHz
11,0592 MHz
6 MHz
12 MHz
del
Timer 1
SMOD
Valor
C/T Modo
recarga
X
X X
X
1
X X
X
1
0 2
FFH
1
0 2
FDH
0
0 2
FDH
0
0 2
FAH
0
0 2
F4H
0
0 2
E8H
0
0 2
1DH
0
0 2
72H
0
0 1
FEEBH
de
SM1
9EH
SM2
9DH
REN
9CH
TB8
9BH
RB8
9AH
TI
99H
LSB
RI
98H
SM0
0
0
1
1
SM1
0
1
0
1
Descripcin
Registro de desplazamiento
UART de 8 bits
UART de 9 bits
UART de 9 bits
Velocidad de operacin
fija (reloj / 12)
variable
fija (reloj / 64 o reloj / 32)
variable
de
recepcin.
caracteres.
En modo 0: No se utiliza.