Documentos de Académico
Documentos de Profesional
Documentos de Cultura
MICROCONTROLADOR 8051
INDICE
Pgina
INTRODUCCIN
PRIMERA PARTE.
CAPITULO 1, CARACTERSTICAS DEL MICROCONTROLADOR 8051
1.1CARACTERSTICAS DELC-8051
1.2DESCRIPCIN DE LAS LINEAS DEL C-8051
1.3CARACTERSTICAS ESPECFICAS DEL C-8051
1.3.1 Descripcin de los espacios de memoria.
6
6
9
9
11
11
11
12
14
2.1
2.2
2.3
2.4
20
26
27
27
28
29
30
32
M
M
C
R
O
C
O
N
T
R
O
L
A
D
O
R
MIIIC
CR
RO
OC
CO
ON
NT
TR
RO
OL
LA
AD
DO
OR
R88005511
Introduccin
35
5.1
5.2
5.3
5.4
5.5
5.6
5.7
36
36
36
37
37
37
38
38
39
MODOS DE DIRECCIONAMIENTO.
DIRECCIONAMIENTO DIRECTO.
DIRECCIONAMIENTO INDIRECTO.
DIRECCIONAMIENTO INMEDIATO.
DIRECCIONAMIENTO INDEXADO.
DIRECCIONAMIENTO POR REGISTRO.
TRANSFERENCIA DE DATOS.
5.7.1 RAM interna.
5.7.2 RAM externa.
5.7.3 Movimientos de tablas localizadas en la memoria del
programa
5.8 INSTRUCCIONES BOOLEANAS.
5.9 INSTRUCCIONES DE SALTO.
5.9.1 Saltos condicionados.
5.9.2 Saltos incondicionados.
39
39
40
40
41
SEGUNDA PARTE
CONJUNTO DE INSTRUCCIONES DEL C- 8051.
43
TERCERA PARTE
APLICACIONES DEL MICROCONTROLADOR 8051.
96
BIBLIOGRAFA
42
ANEXOS
.
M
M
C
R
O
C
O
N
T
R
O
L
A
D
O
R
MIIIC
CR
RO
OC
CO
ON
NT
TR
RO
OL
LA
AD
DO
OR
R88005511
Introduccin
INTRODUCCIN
Pero, qu es un microcontrolador ?
Un Microcontrolador es todo un "sistema mnimo" dentro de un
slo
dispositivo, lo cual ofrece un enorme panorama hacia el mundo de la compatibilidad.
Este dispositivo contiene: Un CPU (basado principalmente en un microprocesador
de 4, 8 16 bits), puertos paralelos de entrada y salida, puerto serie, timers,
M
M
C
R
O
C
O
N
T
R
O
L
A
D
O
R
MIIIC
CR
RO
OC
CO
ON
NT
TR
RO
OL
LA
AD
DO
OR
R88005511
Introduccin
Captulo 1
Captulo 1
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
RST
P3.0/RxD
P3.1/TxD
P3.2/INT0
P3.3/INT1
P3.4/T0
P3.6/T1
P3.6/WR
P3.7/RD
XTAL2
XTAL1
Vss
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
8051
8031
8751
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
Vcc
P0.0
P0.1
P0.2
P0.3
P0.4
P0.5
P0.6
P0.7
Vpp/EA
PROG/ALE
PSEN
P2.7
P2.6
P2.5
P2.4
P2.3
P2.2
P2.1
P2.0
Captulo 1
Descripcin de conexiones.
Nemnico Conex
Tipo
Vss
ENT
Tierra 0V referencia.
P0.0-P0.7 39-32
E/S
P1.0-P1.7 1-8
E/S
P2.0-P2.7 21-28
E/S
P3.0-P3.7 10-17
E/S
E
S
20
10
11
Nombre y funcin
Captulo 1
12
13
14
15
16
E
E
E
E
S
17
RST
ALE
30
E/S
PSEN
29
EA
31
XTAL1
19
XTAL2
18
Captulo 1
1.3.1
Captulo 1
MEMORIA DE PROGRAMA
MEMORIA DE DATOS
FFFH__
FFFH__
EPROM
EXTERNA
RAM
EXTERNA
PSEN=0
1000H__
EA=1 --0FFFH-EPROM
O PROM
INTERNA --000H-PSEN=1
EA=0
128 B.
SFRS
EPROM
128B
INTERNA
EXTERNA
0000H__
PSEN=0
VECTOR DE DIRECCIONES
0003H
000BH
0013H
001BH
0023H
002BH
Tabla 1. Interrupciones
Captulo 1
Una interrupcin puede ser causada de manera externa o interna, es decir puede ser
producida por un dispositivo perifrico o por programacin respectivamente. La
interrupcin con mayor alto orden es el RESET el cual no puede ser mascarable.
Cuando el RESET ocurre el programa comienza a partir de la direccin 0000H del
programa.
Cuando una interrupcin es producida, el Contador del Programa (PC) almacena su
contenido temporalmente dentro del SP (apuntador de apilamiento ) y se carga con la
direccin de la localidad donde se encuentra la rutina de servicio de la interrupcin
correspondiente. Una vez posicionado en esa localidad deber de comenzar la
ejecucin de la rutina de servicio, hasta que encuentre la instruccin RETI, que le
permitir al PC recuperar nuevamente su valor original almacenado en el SP, y
continuar con el programa anterior a la interrupcin.
Por ejemplo a la interrupcin 0, se le asigna la localidad 0003H, si la interrupcin no
se utiliza, esta localidad puede utilizarse para propsitos generales del programa, si la
interrupcin ha sido permitida, (estableciendo el bit correspondiente dentro del
registro de control IE), en el momento que exista una activacin de la interrupcin
(estado bajo en la lnea INTO) el PC se cargar con 0003 y saltar a esa localidad
para comenzar a ejecutar la rutina de servicio.
Estas localidades de memoria de los servicios de interrupcin estn separadas en
intervalos de 8 bytes, entre s. Cuando un servicio de interrupcin es corto, ste
puede estar contenido en los 8 bytes. En el caso de que fuese largo se puede
ejecutar un salto a otra localidad de memoria para continuar con la secuencia de
interrupcin. El trmino del servicio de interrupcin deber de realizarse mediante la
ejecucin de la instruccin de la instruccin RETI.
Cuando se utilizan elementos de la familia del 8051 con memoria interna ROM (o
16K), esta puede ser accesada mediante la conexin de la lnea EA =1 (Vcc). Si la
memoria interna es de 4 Kbytes y EA = 1, el CPU seleccionar internamente el ROM,
desde 0000H hasta 0FFFH y de manera externa automticamente a partir de 1000H
hasta FFFFH.
Por el contrario, si la lnea EA = 0, el CPU seleccionar de forma externa el ROM,
desde la direccin 0000H hasta FFFFH. En el caso del 8031 sta lnea se conecta
siempre a 0 Volts (Vss).
La lnea PSEN (Program Store Enable), que sirve para leer el ROM externo, es
activado en todas las bsquedas (Fetches) del programa. PSEN NO SE ACTIVA en
bsquedas (fetches) del ROM interno. La fig. 1.3 muestra un conexionado a una
EPROM externo.
P0
Captulo 1
BUS DE DATOS
CONTROLADOR
8051
LATCH
Sujeta
la dir.baja
EA
ALE
P2
EPROM
Dir. Baja
Direccin Alta
PSEN
OE
FFH
Alto 128
80H
7FH
FFH
Accesable por
direccionamiento
indirecto
Accesable por
direccionamiento
directo
80H
Registro de Funciones
Especiales: Puertos,
estado y control de Bits,
timer, SP, acumuladores,
etc.
Accesable por
direccionamiento
directo e
indirecto
Bajo 128
Fig. 1.4 Estructura de la memoria interna.
Captulo 1
Los primeros 128 bytes, son presentados en todos los dispositivos de la familia
MCS-51, que est mapeados como se presenta en la fig 1.5.
Bits de seleccin
del banco de
registros en el
PSW
7FH
ESPACIO LIBRE DE DATOS
30H
2FH
ESPACIO DE DIRECCIONAMIENTO
POR BITS
20H
1FH
11
18H
17H
10
10H
08H
07H
00
00H
Fig. 1.5 Distribucin de los 128 Bytes ms bajos de la memoria RAM interna.
Como se puede apreciar en la figura anterior, los 128 bytes ms bajos son divididos
en 4 bloques de 8 registros cada uno, que contienen los valores de los registros R0 A
R7, los bloques pueden ser seleccionados mediante la escritura en los bits 3 y 4 del
registro PSW (palabra del estado del programa), el cual veremos ms adelante. La
utilizacin de registros permiten un uso ms eficiente del espacio de cdigos debido a
que sus direccionamientos son de 8 bits nicamente.
Como ya habamos mencionado anteriormente, existen algunas versiones del 8051,
como el 8052, que contienen 128 bytes de memoria interna que puede ser
direccionada indirectamente. Por otro lado, todas las versiones del 8051 contienen un
espacio de 128 bytes en la parte alta de la memoria que son direccionados
directamente, en este espacio se localizan los Registros de Funciones Especiales
(SFR). Estos registros especiales, tienen sus localidades bien establecidas, y son
utilizados por el microcontrolador para realizar las distintas operaciones internas que
ejecuta el microcontrolador, as como tambin para el control y acceso de los
diferentes puertos de entrada y salida.
10
2.1
REGISTROS
DE
Captulo 2
FUNCIONES
ESPECIALES
(SFR)
En el captulo anterior habamos visto que los SFR se encuentran en la parte alta
(128 bytes) de la memoria RAM interna del 8051. Las direcciones de los SFR es
mostrado en la Tabla 2.
SMBOLO
NOMBRE
ACC
B
PSW
DIRECCIN
Acumulador
Registro B
Program Status Word
(Palabra de estado del programa)
SP
Stack Pointer (apuntador de apilamiento)
DPTR
Data Pointer (apuntador de datos)16bits
DPL
Data Pointer low byte
DPH
Data Pointer high byte
P0
Puerto 0
P1
Puerto 1
P2
Puerto 2
P3
Puerto 3
IP
Control de Prioridad de Interrup.
IE
Control de Validacin de Interrup.
TMOD
Modo de control Timer/Contador
TCON
Control del Timer/Contador
T2CON(8052)
Control 2 del Timer/Contador
TH0
Byte alto del T/C 0
TL0
Byte bajo del T/C 0
TH1
Byte alto del T/C 1
TL1
Byte bajo del T/C 1
TH2(8052)
Byte alto del T/C 2
TL2(8052)
Byte bajo del T/C 2
RCAP2H(8052) Byte alto del registro de captura T/C2
RCAP2L(8052) Byte bajo del registro de capt. del T/C2
SCON
Control serie
SBUF
Buffer de datos serie
PCON
Control de Potencia
0EOH
0F0H
0DOH
81H
82H
83H
80H
90H
0A0H
0B0H
0B8H
0A8H
89H
88H
OC8H
8CH
8AH
8DH
8BH
0CDH
0CCH
0CBH
0CAH
98H
99H
87H
15
Captulo 2
RCAP2L RCAP2H
TL2
TH2
TH0
TH1
FF
F7
EF
E7
DF
D7
CF
C7
BF
B7
AF
A7
9F
97
8F
PCON 87
SBUF
TMOD
SP
TLO
DPL
TL1
DPH
AC
F0
RS1
RS0
OV
PSW.7
PSW.6
PSW.5
PSW.4
PSW.3
PSW.2
PSW.1
PSW.0
16
Captulo 2
Este registro como ya se vio, reside en el espacio SFR. El registro contiene; el bit de
Carry, El bit Auxiliar (para operaciones BCD), los dos bits de seleccin del banco de
registros, la bandera de overflow, el bit de paridad y dos banderas sin definir.
El bit de Paridad refleja el nmero de 1s, en el acumulador:
SMOD
GF1
GF0
PD
IDL
SMOD
GF1
GF0
PD
IDL
17
Captulo 2
REGISTRO
IE
0
INT0
IT0
IED
BAJA
PRIORIDAD
TF0
0
INT1
IT1
IED
SECUENCIA
DE
TF1
SERVICIO
DE
RI
INTERRUPCIN
TI
ACCIN
INDIVIDUAL
DESHABILITADOR
GENERAL
18
Captulo 2
ET2
ES
ET1
EX1
ET0
EX0
IE.7
IE.5
IE.4
IE.3
IE.2
IE.1
IE.0
PT2
PS
PT1
PX1
PT0
PX0
IP.5
IP.4
IP.3
IP.2
IP.1
IP.0
Aunque los registros de control de los puertos del Timer / Contador y Serie
pertenecen a los registros de funciones especiales les vamos a dedicar un captulo
completo a cada uno de ellos debido a la importancia que presentan para el
desarrollo e interconexin con sistemas perifricos.
19
Temporizadores y Contadores
Captulo 3
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
Temporizadores y Contadores
Captulo 3
del
para
timer
colocar
0.
el
3.3
REGISTRO
DE
TIMER/CONTADOR
MODO
DE
CONTROL
DEL
GATE
C/T
M1
M0
TIMER 1
GATE
C/T
M1
M0
TIMER 0
Temporizadores y Contadores
C/T
Captulo 3
M1
M0
M1
0
0
1
1
M0
0
1
0
1
MODO
0
1
2
3
ESPECIFICACIN
Timer/contador de 13 bits
Timer/contador de 16 bits
Timer/contador de 8 bits recargables
Timer 0, TL0 Timer/contador de 8 bits, controlado
por los bits
de control del Timer 0 .
TH0 Timer de 8 bits controlado por los bits de Control
del timer 1. ( El Timer 1 no se utiliza )
OSC
1/12
0
TL1
5 BITS
C/T
1
ENTRADA T1
TH1
8 BITS
TF1
Inter
TR1
GATE
ENTRADA
INT1
Temporizadores y Contadores
Captulo 3
OSC
1/12
0
TL1
8 BITS
C/T
1
ENTRADA T1
TH1
8 BITS
TF1
TR1
GATE
ENTRADA
INT1
Inter
Temporizadores y Contadores
OSC
Captulo 3
1/12
0
TL1
8 BITS
C/T
1
ENTRADA T1
TF1
Inter
TR1
TH1
8 BITS
GATE
ENTRADA
INT1
OSC
1/12
0
TL0
8 BITS
C/T
1
ENTRADA T0
TF0
Inter
TR0
GATE
ENTRADA
INT0
TH0
8 BITS
OSC
12
TF1
8 BITS
Inter
TR1
Fig. 3.6 Modo 3, 2 timers de 8 bits
El Timer 1 puede ser activado o desactivado con solo salir o entrar al modo 3
respectivamente o puede permanecer siendo utilizado por el puerto Serie cuando
Temporizadores y Contadores
Captulo 3
F osc
TIMER1
SMOD
C/T
VALOR DE TH1
MODO
0
FDH
11.059 MHz
1
2
0
FDH
11.059 MHz
0
2
0
FAH
11.059 MHz
0
2
0
F4H
11.059 MHz
0
2
0
E8H
11.059 MHz
0
2
0
1DH
11.986 MHz
0
2
0
72H
6.000 MHz
0
2
FIG. 3.7 Tabla de valores para generar el Baud Rate
Puerto Serial
Captulo 4
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
27
Puerto Serial
Captulo 4
ESPECIFICACIN
BAUD RATE
Registro de corrimiento
F. Osc. /12
UART 8 bits
Variable.
UART 9 bits
F.Osc./32 o /64
UART 9 bits
Variable.
28
Puerto Serial
Captulo 4
la
29
Puerto Serial
Captulo 4
30
Puerto Serial
Captulo 4
Cuando los datos van saliendo por la derecha, ceros van entrando por la izquierda.
Cuando el bit ms significativo MSB, del caracter, est en la posicin de salida del
registro de corrimiento, el 1 que fue inicialmente cargado en la 9na. Posicin est
justo a la izquierda del MSB y todas las dems posiciones a la izquierda se
encuentran cargadas de ceros. Esta condicin establece al bloque de control Tx a
realizar un ltimo corrimiento y despus desactiva SEND y establece TI. Ambas
acciones ocurren en S1P1 del 10mo. Ciclo de la mquina despus de la escritura en
SBUF.
La recepcin es iniciada por la condicin REN=1 y RI=0. En S6P2 del siguiente ciclo
de mquina, la unidad de Control Rx escribe los bits 11111110 al registro de
corrimiento del receptor y en la siguiente fase del reloj activa RECEIVE.
31
Puerto Serial
Captulo 4
32
Puerto Serial
Captulo 4
33
Puerto Serial
Captulo 4
34
Puerto Serial
Captulo 4
35
Puerto Serial
Captulo 4
36
Puerto Serial
Captulo 4
Cada tiempo que dura el bit recibido, es dividido en 16 perodos. Durante los perodos
7mo., 8vo. Y 9no, el valor del bit es muestreado, el valor aceptado, es el que se
obtuvo en las ltimas dos muestras. Esto se hace para eliminar ruido. Si el valor
aceptado del primer bit es 1, el circuito receptor es restablecido y la unidad receptora
espera otro transiente de inicio. Si el bit de comienzo es correcto, es decir 0, contina
la recepcin.
Cuando RI=0 y SM2=0 o el 9no. bit de datos = 1, el 9no. bit de datos se introducir en
RB8, los 8 bits de datos en SBUF y RI se activa. A partir de este momento la unidad
receptora espera otra transicin negativa en la lnea RxD.
37
Modos de Direccionamiento
Captulo 5
de
direccionamiento
que
A,7FH
MOV
A,2EH
MOV
A,@R0
MOV
A,@R0
Modos de Direccionamiento
MOVX @DPTR,A
Captulo 5
A,#64H
ADD
A,#120
MOV
es
cargado
Modos de Direccionamiento
Captulo 5
A,R7
DEC
R0
;
;
;
;
;
;
;
;
A = <fuente>
<destino = A
<destino> = <fuente>
DPTR = constante de 16 bits inmediata.
INC SP <@SP> (fuente)
(destino) <@SP> ; DEC SP
ACC y <byte> intercambia sus datos.
ACC y @Ri intercambian nibble bajo.
Modos de Direccionamiento
Captulo 5
MOVX A, @Ri
MOVX @Ri,A
MOVX A,@DPTR
MOVX @DPTR,A
;
;
;
;
A
<@Ri>
A
<@DPTR>
<@Ri>
A
<@DPTR>
A
MOVC A, @A + DPTR ;
programa
MOVC A, @A + PC
;
Modos de Direccionamiento
ANL C,bit
ANL C,/bit
ORL C,bit
ORL C,/bit
MOV C,bit
MOV bit,C
CLR C
CLR bit
SETB C
SETB bit
CPL C
CPL bit
JC rel
Captulo 5
;
C C .AND. bit
;
C C .AND. .NOT. bit
;
C C .OR. bit
;
C C .OR. .NOT. bit
;
C bit
;
bit C
;
C0
bit 0
C1
;
bit 1
;
C .NOT. C
bit .NOT. bit
;
Brinca si C = 1
;
;
EJEMPLO :
CONTROL
BANDERA
DATA
BIT
ORG 100H
MOV C,BANDERA
MOV P1.0,C
20H
CONTROL,7
bit2
bit1
0
1
1
0
0
0
1
1
0
1
0
1
MOV C,bit 1
JNB bit 2,conti:
CPL C
Modos de Direccionamiento
conti: RET
Captulo 5
;Regresa al programa
;
;
;
;
;
Salta si A = 0
Salta si A 0
Decrementa y salta si no es igual a 0
Salta si A <byte>
Salta si <byte> #dato
CONTADOR,#10 ; N = 10
JMP direccin
JMP @A + DPTR
CALL direccin
RET
RETI
NOP
Manual del Microcontrolador 8051
;
;
;
;
;
;
Salta a la direccin.
Salta a la direccin A + DPTR
Llama a la subrutina "direccin".
Regreso a la subrutina.
Regreso de la interrupcin.
Sin operacin.
7
Modos de Direccionamiento
Captulo 5
C-8051
Conjunto de instruciones
ACALL direccin 11
(llamada absoluta)
(SP)
((SP))
(SP)
((SP))
(PC)+2
(SP)+1
(PC7-0)
(SP)+1
(PC15-8)
(PC10-8)
(PC7-0)
(PC15-11 INCREMENTADO)
(OP CODE 15-13) # de la pg.
(OP CODE 7-0) direc. en la pg.
EJEMPLO:
ORG 00H
0000 5100
0002 E8
LAZ02 :
0003 C6
0004 E9
0005 22
0006 02 0200
ORG 0200H
0200 F8 LAZ01: MOV R0, A
0201 22
RET
0202 1102
ACALL LAZO2; 000 1 0001 0000 0010
0204
END
pg.0
Direc. Pg.
44
C-8051
Conjunto de instruciones
PCINC = 0204
OPCODE = 1102
B
A
PC FINAL =
La direccin con la cual se carga el PC es 0002. Cabe aclarar que los bits 8 al
12 del OPCODE permanecen siempre constantes (10001), en cualquier llamado del tipo
ACALL.
Como puede observarse tambin, el valor del nibble de ms alto orden del PC INC
y el PC FINAL es el mismo, ello nos limita la longitud del salto.
El destino debe por lo tanto estar dentro del mismo block de 2K de memoria del
programa donde se encuentra la instruccin ACALL.
EJEMPLO:
El Acumulador contiene 0C3H (11000011B) y el registro 0 contiene 0AAH
(10101010B). La instruccin, ADD A,R0, dejara 6DH (01101101B) en el acumulador con la
bandera del acarreo auxiliar limpiada y las banderas de acarreo y sobreflujo establecidas .
45
ADD A,<SRC
BYTE>
C-8051
Conjunto de instruciones
ADD A,Rn
BYTES: 1
CICLOS: 1
CDIGO DE OPERACIN:
0010
OPERACIN:
1rrr
ADD
(A)
(A)+(Rn)
ADD A, @Ri
BYTES: 1
CICLOS: 1
CDIGO DE OPERACIN:
0010
OPERACIN:
111i
ADD
(A)
(A)+((Ri))
EJEMPLO:
RAM INTERNA
A=21
R0=10
0000
10
0000 28
ADD A,R0
0010
12
0001 26
ADD A,@R0
ADD A, directo
46
C-8051
Conjunto de instruciones
BYTES: 2
CICLOS: 1
CDIGO DE OPERACIN:
0010
OPERACIN:
0101
direccin directa
ADD
(A)
ADD A, #dato
BYTES: 2CICLOS: 1
CDIGO DE OPERACIN:
0010
OPERACIN:
dato inmediato
ADD
(A)
PSW7
CY
0100
(A) + #dato
PSW6
CY
PSW2
0V
BANDERAS QUE SE
ACTIVAN
EJEMPLO:
0000 7421
0002 7810
0004 2500
0006 751012
0009 2412
000B
ORG 00H
RAM INTERNA
MOV A,#21H
MOV R0,#10H; A21H
ADD A, 00H ;
A31H
MOV 10H,#12H
ADD A,#12 ;
A43H
END
R0 R1-----R7
0000 10
0009
0010 12
0018
47
ADDC A, <src-byte>
sumar con acarreo
(carry).
C-8051
Conjunto de instruciones
hacia afuera, o del bit 7 hacia afuera pero no del bit 6 al bit 7. de otro modo OV est limpio.
Cuando se suman enteros signados, el OV indica un nmero negativo producido como la
suma de dos operandos positivos un nmero positivo producido por la suma de dos
operandos negativos. Cuatro modos de direccionamiento de operandos fuente estn
permitidos: registro directo, registro indirecto inmediato.
EJEMPLO:
El Acumulador contiene 0C3H (11000011B) y el registro 0 contiene 0AAH
(10101010B) con la bandera de acarreo fija. La instruccin, ADDC A, R0, dejar 6EH
(01101110B) en el acumulador con AC limpiado y las banderas de acarreo y OV
establecidas.
ADDC A, Rn
BYTES: 1
CICLOS: 1
CDIGO DE OPERACIN:
0011
OPERACIN:
1rrr
ADDC
(A)
(A)+(C)+(Rn)
EJEMPLO:
A = C3
R0=AA C=1
ADDC A,R0
A 6E
AC 0
C3 = 11000011
AA= 10101010
CT=
1
1 01101110
CY=1
OV=1
ADDC A, @Ri
BYTES: 1
CICLOS: 1
CDIGO DE OPERACIN:
0011
OPERACIN:
011i
ADDC
48
C-8051
Conjunto de instruciones
(A)
(A)+(C)+((Ri))
ADDC A, directo
BYTES: 2
CICLOS: 1
CDIGO DE OPERACIN:
0011
OPERACIN:
0101
direccin directa
ADDC
(A)
(A)+(C)+(directo)
ADDC A, #dato
BYTES: 2
CICLOS: 1
CDIGO DE OPERACIN:
0011
OPERACIN:
0101
dato inmediato
ADDC
(A) (A)+(C)+(#dato)
CICLOS: 2
CDIGO DE OPERACIN:
a10 a9 a8 0 0 0 0 1
a7
49
a6
a5
a4
a3
a1
a1
AJMP direccin 11
(salto absoluto)
C-8051
Conjunto de instruciones
OPERACIN:
AJMP
(PC)
(PC)+2
EJEMPLO :
0000 C100
0600 7450
END
ANL <dest.>,<fuente>
ORG 00H
AJMP ETA ;ETA =0600H = 0000 0 110 0000 0000B
ETA: MOV A,#50
ANL Ejecuta la operacin lgica AND, bit a bit entre las variables indicadas y
guarda los resultados en la variable destino. Las banderas no son afectadas.
Esta operacin lgica permite 6 combinaciones de direccionamientos. Cuando
el destino es el acumulador, los direccionamientos pueden ser por registro, directo,
registro-indirecto, inmediato. Cuando el destino es una direccin, la fuente puede ser el
acumulador o el dato inmediato.
NOTA :
Cuando sta instruccin es usada para modificar un puerto de salida, el valor usado
como dato del puerto ser ledo del latch del puerto NO DE LA PATA DEL MISMO.
EJEMPLO :
Si el acumulador contiene OC3H (11000011B) y el registro contiene 55H
(01010101B) luego la instruccin, ANL A,R0 dejar 41H (01000001B) en el acumulador.
Cuando el destino es un byte direccionado directamente, sta instruccin limpiar
combinaciones de bits en cualquier localidad RAM o registro.
El byte mscara que determina el patrn de bits que sern limpiados puede ser una
constante contenida en la instruccin o un valor calculado en el acumulador. La
instruccin, ANL P1,#01110011B, limpiar los bits 7, 3, y 2 del latch del puerto de salida 1.
ANL A,Rn
BYTES: 1
CICLOS: 1
50
C-8051
Conjunto de instruciones
CDIGO DE OPERACIN:
0101
OPERACIN:
1rrr
ANL
(A)
(A)^(Rn)
ANL A,Directo
BYTES: 2
CICLOS: 1
CDIGO DE OPERACIN:
0101
OPERACIN:
0101
direccin directa
ANL
(A)
(A)^(directo)
ANL A,@Ri
BYTES: 1
CICLOS: 1
CDIGO DE OPERACIN:
0101
OPERACIN:
011i
ANL
(A)
(A)^((Ri))
ANL A,#dato
BYTES: 2
CICLOS: 1
CDIGO DE OPERACIN:
0101
OPERACIN:
0100
dato inmediato
ANL
(A)
(A)^#dato
ANL directo,A
BYTES: 2
CICLOS: 1
51
C-8051
Conjunto de instruciones
CDIGO DE OPERACIN:
0101
OPERACIN:
0010
direccin directa
ANL
(directo)
(directo)^(A)
ANL directo,#dato
BYTES: 3
CICLOS: 2
CDIGO DE OPERACIN:
0101
OPERACIN:
0011
direccin directa
dato inmediato
ANL
(directo)
(directo)^#dato
EJEMPLO :
A=C3
R0=55
ANL A,R0 ;
11000011 = A
01010101 = R0
01000001 = A x R0 = 41
ANL P1,#01110011B ; si
P1 es puerto de lectura
P1 = 11111111
P1 = 01110011
Limpia los bits 7, 3 y 2 del puerto de salida 1.
ANL C, bit
AND lgico para
bits variables
52
C-8051
Conjunto de instruciones
EJEMPLO :
Se coloca la bandera de acarreo si y solo si , P1.0=1, ACC.7=1 y OV=0:
MOV C,P1.0; C
ANL C,ACC.7;
ANL C,/0V;
casos.
ANL C,bit
BYTES: 2
CICLOS: 2
CDIGO DE OPERACIN:
1000
OPERACIN:
0010
bit direccionado
ANL
(C)
(C)^(bit)
ANL C,/bit
BYTES: 2
CICLOS: 2
CDIGO DE OPERACIN:
1011
OPERACIN:
0000
bit direccionado
ANL
(C)
(C)^/(bit)
CJNE. Compara las magnitudes del primero y segundo operando, y brinca si sus
valores no son iguales. El salto es calculado por la suma algebraica del valor actual del PC y
el desplazamiento relativo (operando REL). La bandera de acarreo es establecida si el valor
entero sin signo de la <palabra destino> es menor que el valor entero sin signo de la <palabra
fuente>; por otro lado el acarreamiento es limpiado. Ningn operando es afectado.
Los primeros dos operandos permiten cuatro combinaciones de modos
de
direccionamiento; el acumulador puede ser comparado con cualquier palabra directamente
direccionada un dato inmediato, y cualquier localidad de RAM indirecta registro
trabajando que puede ser comparado con una constante inmediata.
EJEMPLO :
El acumulador contiene 34H. El registro 7 contiene 56H. La primera instruccin
secuencia,
53
CJNE
<dest>,<fuente>
Compara y brinca
si no es igual
C-8051
Conjunto de instruciones
CJNE R7,#60H,NO_IGUAL
;R7=60H
NO_IGUAL: JC RIG_BAJO
;si R7<60H
;si R7>60H
CICLOS: 2
CDIGO DE OPERACIN:
1011
OPERACIN:
(PC)
0101
direccin directa
direccin relativa
(PC) + 3
De lo contrario:
(C)
1
0
54
C-8051
Conjunto de instruciones
CJNE A,#DATO,REL
BYTES: 3
CICLOS: 2
CDIGO DE OPERACIN:
1011
OPERACIN:
(PC)
0101
dato inmediato
direccin relativa
(PC) + 3
Entonces:
(C)
Adems:
(C)
CICLOS: 2
CDIGO DE OPERACIN:
1011
OPERACIN:
1rrr
dato inmediato
direccin relativa
CJNE
(PC)
(PC) + 3
55
C-8051
Conjunto de instruciones
De lo contrario:
(C)
CJNE @Ri,#DATO,REL
BYTES: 3
CICLOS: 2
CDIGO DE OPERACIN:
1011
OPERACIN:
011i
(PC)
dato inmediato
direccin relativa
(PC) + 3
De lo contrario:
(C)
CLR A
Limpia el acumulador
CICLOS: 1
CDIGO DE OPERACIN:
1110
OPERACIN:
0100
CLR
(A)
CLR bit
limpia el bit.
56
C-8051
Conjunto de instruciones
CLR. El bit indicado es limpiado (se convierte a cero). Ninguna otra bandera es
afectada. CLR puede operar sobre una bandera de acarreo o cualquier bit directamente
direccionable.
EJEMPLO :
El puerto 1 ha sido previamente escrito con 5DH (01011101B). La instruccin,
CLR P1.2
dejar el puerto colocado en 59H (01011001B El).
CLR C
BYTES: 1
CICLOS: 1
CDIGO DE OPERACIN:
1100
OPERACIN:
0011
CLR
(C)
CLR bit
BYTES: 2
CICLOS: 1
CDIGO DE OPERACIN:
11 00
OPERACIN:
0010
CLR
(bit)
57
CPL A
complemento del
acumulador.
C-8051
Conjunto de instruciones
EJEMPLO:
El acumulador contiene 5CH (01011100B).
acumulador colocado a 0A3H (10100011B).
La instruccin, CPL
A dejar el
CPL A
BYTES: 1
CICLOS: 1
CDIGO DE OPERACIN:
OPERACIN:
CPL
(A)
/(A)
Complemento del acumulador
CPL BIT
Complemento del bit
CICLOS: 1
CDIGO DE OPERACIN:
1011
0011
58
C-8051
Conjunto de instruciones
OPERACIN:
CPL
(C)
/(C)
CPL bit
BYTES: 2
CICLOS: 1
CDIGO DE OPERACIN:
1011
0010
OPERACIN:
(bit)
/(bit)
Complemento del acarreo
DA A, Ajusta el valor de los 8 bits del acumulador, resultado de una suma anterior de
dos variables (cada una en formato BCD), produciendo dos dgitos de cuatro bits. Cualquier
instruccin ADD o ADDC puede haber sido usada para ejecutar la suma.
Si en el acumulador los bits de 3-0 son, ms grandes que 9 (XXXX1010XXXX1111), o si la bandera AC es 1, 6 es sumado al acumulador produciendo el dgito en
BCD del nibble de bajo orden. Esta suma interna establecer la bandera de acarreo si un
acarreo hacia el exterior del campo de los cuatro bits de alto orden, del o contrario, limpiar la
bandera de acarreo.
Si la bandera de acarreo es ahora establecida si los cuatro bits de alto orden ahora
excedieron de nueve (1010XXXX-1111XXXX), estos bits de alto orden son incrementados por
seis, produciendo el dgito BCD en el nibble de alto orden. De igual forma, se establecera la
bandera de acarreo si hubiera un acarreo hacia el exterior de los bits de alto orden, de lo
contrario la bandera ser limpiada. As la bandera de acarreo indica si la suma de las dos
variables BCD, originales es ms grande que 100, permitiendo sumar mltiples decimales con
precisin. OV no es afectado.
Todo esto ocurre durante el ciclo de una instruccin. Esencialmente, esta instruccin
ejecuta la conversin decimal por adicin de 00H, 06H, 60H, 66H al acumulador,
dependiendo del acumulador inicial y las condiciones del PSW.
NOTA:
DA A no puede simplemente covertir un nmero hexadecimal en el acumulador a
notacin BCD; no se aplica DA A a substraccin decimal.
EJEMPLO:
59
DA A
Ajuste decimal del
acumulador por
adicin
C-8051
Conjunto de instruciones
ejecutar una suma estndar en complemento a dos binario, resultando el valor 0BEH
(101111110) en el acumulador. Las baderas de acarreo y acarreo auxiliar sern limpiadas.
La instruccin de ajuste decimal alterar entonces el acumulador al valor 24H
(00100100B), indicando el paquete de dgitos del nmero decimal 24, los dos dgitos de bajo
orden de la suma decimal de 56, 67, y el acarreo. La bandera de acarreo ser establecida por la
instruccin de ajuste decimal, indicando que ocurri un sobreflujo. La verdadera suma 56, 67,
y 1 es 124.
Las variables BCD pueden ser incrementadas o decrementaras por adicin de 01H
99H respectivamente. Si el acumulador inicialmente contiene 30H (representando los dgitos
del 30 decimal), entonces la secuencia de las instrucciones,
ADD
A,#99H
DA
CICLOS: 1
CODIGO DE OPERACIN:
1101
OPERACIN:
0100
DA
Los contenidos del acumulador estn contenidos en BCD
SI
SI
60
(A7-4) + 6
C-8051
Conjunto de instruciones
@R0
R0
@R0
Dejar el registro 0 colocado a 7EH y la localidad de la RAM interna 7EH y 7FH colocada a
0FFH y 3FH. Se indicar adems que hubo un sobreflujo, OV = 1.
DEC
A
BYTES:1
CICLOS:1
CDIGO DE OPERACIN:
0001
OPERACIN:
DEC
DEC
(A)
0100
(A) 1
Rn
BYTES:1
CICLOS: 1
CODIGO DE OPERACIN:
0001
OPERACIN:
(Rn)
1rrr
DEC
(Rn)
61
C-8051
Conjunto de instruciones
DEC
directo
BYTES:2
CICLOS:
CDIGO DE OPERACIN:
0001
OPERACIN:
0101
DEC
(directo)
direccin directa
(directo) 1
DEC @Ri
BYTES:1
CICLOS:1
CODIGO DE OPERACIN:
0001
0111
OPERACIN:
((Ri))
DIV AB
Divide
((Ri)) - 1
DIV AB divide el entero no signado del acumulador entre el entero no signado del
registro B. El acumulador recibe la parte entera del cociente; el registro B el residuo. El carry
y la bandera OV sern limpiadas.
EXCEPCIN:
Si B contiene originalmente 00H, los valores del acumulador y el registro B ser
indefinido, la bandera de sobreflujo ser establecida. La bandera de acarreo de limpiada en
cualquier caso.
EJEMPLO:
El acumulador contiene 251 (0FBH 11111011B) y B contiene 18 (12H
00010010B). La instruccin,
DIV
AB
BYTES: 1
CICLOS: 4
62
C-8051
Conjunto de instruciones
CODIGO DE OPERACIN:
1000
0100
OPERACIN: DIV
(A)15-8
(A) / (B)
(B))7-0
TOGGLE:
MOV R2,#8
CPL
P1.7
DJNZ R2,TOGGLE
Alternar el P1.7 ocho veces, causando cuatro pulsos de salida que aparecern en el
bit 7 del puerto de salida 1. Cada pulso durar tres ciclos de mquina; dos por DJNZ y uno por
alterar la terminal.
63
DJNZ <byte>,<rel>
decrementa y brinca
si no es cero
C-8051
Conjunto de instruciones
DJNZ Rn,rel
BYTES: 2
CICLOS: 2
CDIGO DE OPERACIN:
0000
OPERACIN:
0101
direccin directa
DJNZ
(PC)
(PC) + 2
(Rn)
(Rn) 1
Si (Rn) > 0 (Rn) < 0
Entonces:
(PC)
(PC) + rel
DJNZ directo,rel
BYTES: 3
CICLOS: 2
CDIGO DE OPERACIN:
1101
0101
OPERACIN:
DJNZ
Direccin directa
Direccin relativa
(PC)
(PC) + 2
(directo)
(directo) 1
Si (directo) > 0 (directo) < 0
Entonces:
(PC)
INC<byte>
incremento.
(PC) + rel
64
C-8051
Conjunto de instruciones
La instruccin secuencia,
INC @R0
INC R0
INC @R0
dejar el registro 0 colocado a 7FH y las localidades de la RAM interna 7EH y 7FH
conteniendo (respectivamente) 00H y 41H.
INC A
BYTES: 1
CICLOS: 1
CDIGO DE OPERACIN:
0000
OPERACIN:
0100
INC
(A)
(A) + 1
NOTA:
En esta instruccin de INC la bandera de paridad se ve afectada.
INC Rn
BYTES: 1
CICLOS: 1
CDIGO DE OPERACIN:
0000
OPERACIN:
0rrr
INC
(Rn)
(Rn) + 1
INC directo
BYTES: 2
CICLOS: 1
CDIGO DE OPERACIN:
0000
OPERACIN:
0101
direccin directa
INC
65
C-8051
Conjunto de instruciones
(directo)
(directo) + 1
INC @Ri
BYTES: 1
CICLOS: 1
CDIGO DE OPERACIN:
0000
OPERACIN:
INC
((Ri))
INC DPTR
incrementa el apuntador de
datos.
011i
((Ri)) + 1
DPL
contienen
12H
y 0FEH, respectivamente. La
INC DPTR
INC DPTR
INC DPTR
cambiar DPH y DPL a 13H y 01H respectivamente.
INC
BYTES: 1
CICLOS: 2
CDIGO DE OPERACIN:
1010
OPERACIN:
0011
INC
66
C-8051
Conjunto de instruciones
(DPTR)
(DPTR) + 1
JB. Si el bit indicado es uno, salta a la direccin formada por la suma algebraica
del PC incrementado y del byte de desplazamiento relativo, REL; de otra manera
procede con la siguiente instruccin. El bit marcado no se modifica. Las banderas no son
afectadas.
EJEMPLO :
El dato presente en el puerto de entrada 1 es CA (11001010B). El
contiene 56 (01010110B). La secuencia de instrucciones,
acumulador
JB 1.2,ETIQUETA1
JB ACC.2,ETIQUETA2
causar que el programa en ejecucin salte a la instruccin marcada con ETIQUETA2.
JB
BYTES: 3
CICLOS: 2
CDIGO DE OPERACIN:
0010
OPERACIN:
0000
direccin relativa
JB
(C)
(C) + 3
(C)
(C) + rel
Si (bit) = 1
Entonces:
JBC. Si el bit marcado es uno, lo limpia y salta a la direccin formada por la suma
algebraica del C incrementado y del byte de desplazamiento relativo, REL; de otra manera
procede con la siguiente instruccin. Las banderas no son afectadas.
NOTA : Cuando esta instruccin es usada para examinar una terminal de salida, el valor
usado como dato original ser ledo del latch de salida, no de la terminal de entrada.
EJEMPLO :
El acumulador contiene 56H (01010110B). La secuencia de instrucciones,
JBC ACC.3,ETIQUETA1
JBC ACC.2,ETIQUETA2
causar que la ejecucin del programa contine en la instruccin identificada
ETIQUETA2, con el acumulador modificado a 52H (01010010B).
JBC
67
por
JBC bit,rel
Si el bit esta establecido
lo limpia y salta.
C-8051
Conjunto de instruciones
BYTES: 3
CICLOS: 2
CDIGO DE OPERACIN:
0001
OPERACIN:
0000
direccin relativa
JBC
(PC)
(C) + 3
(bit)
(PC)
0
(PC) + rel
Si (bit) = 1
Entonces:
CICLOS: 2
CDIGO DE OPERACIN:
0100
OPERACIN:
0000
direccin relativa
JC
(C)
Si (C) = 1
(C) + 2
Entonces:
(C)
(C) + rel
JMP @A+DPTR
salto indirecto.
68
C-8051
Conjunto de instruciones
JMP_TBL:
MOV
DPTR,#JMP_TBL
JMP
@A+DPTR
AJMP ETIQTA0
AJMP ETIQTA1
AJMP ETIQTA2
AJMP ETIQTA3
CICLOS: 2
CDIGO DE OPERACIN:
0111
OPERACIN:
0011
JMP
(PC)
(A) + (DPTR)
69
JNB bit,rel
salta si el bit no es
colocado
C-8051
Conjunto de instruciones
BYTES: 3
CICLOS: 2
CDIGO DE OPERACIN:
0011
OPERACIN:
0000
bit de direccin
direccin relativa
JNB
(PC)
(PC) + 3
Si (bit) = 0
Entonces (PC)
(PC) + rel
EJEMPLO :
La bandera de acarreo est establecida. La secuencia de instrucciones:
JNC ETIQTA1
CPL C
JNC ETIQTA2
limpiar el acarreo y continuar la ejecucin del programa en la instruccin identificada con
la etiqueta ETIQTA2
BYTES: 2
CICLOS: 2
CDIGO DE OPERACIN:
0101
OPERACIN:
0000
direccin relativa
JNC
(PC)
(PC) + 2
Si (C) = 0
Entonces (PC)
JNZ rel
salta si
el acumulador no es
cero.
(PC) + rel
70
C-8051
Conjunto de instruciones
EJEMPLO :
El acumulador originalmente contiene 00H. La secuencia de instrucciones,
JNZ
INC
JNZ
ETIQUETA1
A
ETIQUETA2
CICLOS: 2
CDIGO DE OPERACIN:
0111
OPERACIN:
0000
direccin relativa
JNZ
(PC)
(PC) + 2
Si (A) $ 0
Entonces (PC)
(PC) + rel
JZ. Si todos los bits del acumulador son cero, salta a la direccin formada por
la suma algebraica del PC incrementado y del byte de desplazamiento relativo, REL; de otra
manera procede con la siguiente instruccin. El acumulador no se modifica. Las banderas no
son afectadas.
EJEMPLO :
El acumulador originalmente contiene 01H. La secuencia de instrucciones,
JZ ETIQUETA 1
DEC A
JZ ETIQUETA 2
cambiar el acumulador a 00H y causar que la ejecucin del programa contine en la
instruccin identificada por ETIQUETA 2.
BYTES: 2
CICLOS: 2
CDIGO DE OPERACIN:
0110
0000
direccin relativa
71
JZ rel
salta si el acumulador
es cero.
C-8051
Conjunto de instruciones
OPERACIN:
JZ
(PC)
Si (A) = 0
Entonces (PC)
LCALL direccin 16
llamada larga.
(PC) + 2
(PC) + rel
LCALL llama una subrutina que puede empezar en cualquier parte de la memoria
de programa (64K bytes). La instruccin suma tres al contador del programa para que apunte
a la direccin de la siguiente instruccin, luego incrementa el SP introduciendo el byte bajo del
PC e incrementa nuevamente el SP para introducir el byte alto del PC. El PC se carga con el
segundo y tercer byte de la instruccin LCALL. La ejecucin de las instrucciones de la
subrutina comienza en sta direccin, hasta que encuentre la instruccin RET, la cual
restablece el PC que haba sido almacenado en el SP, continuando nuevamente con el
programa inicial. Las banderas no son afectadas.
EJEMPLO :
Inicialmente el apuntador de apilamiento es igual a 07H. La etiqueta "SBRTN" es
asignada a la memoria del programa en la localidad 1234H. Despus de la ejecucin la
instruccin, LCALL
SUBRTN se localiza en 0123H, el apuntador de apilamiento
contendr 09H, las localidades de la RAM interna 08H y 09H contendr 26H y 01H, y la PC
contendr 1235H.
BYTES: 3
CICLOS: 2
0001
OPERACIN:
(PC)
(SP)
((SP))
(SP)
((SP))
(PC)
LJMP direccin 16
salto largo.
0010
direc. 15-direc. 8
direc. 7-direc. 0
LCALL
(PC) + 3
(SP) + 1
(PC7-0)
(SP) + 1
(PC15-8)
direc.15-0
72
C-8051
Conjunto de instruciones
0156 021145
LJMP SALTO
1145 7827
CICLOS: 2
CDIGO DE OPERACIN:
0000
OPERACIN:
0010
LJMP
(PC)
direc.15-0
ORG 00H
MOV R0,#30H
MOV A,@R0
MOV R1,A
MOV B,@R1
MOV @R1,P1
MOV P2,P1
;
;
;
;
;
;
R0 30H
A 40H
R1 4OH
B 10H
RAM(40H) 0CAH
P2 #0CAH
END
deja el valor 30H en el registro 0, 40H en ambos el acumulador y el registro 1, 10H en el
registro B, y 0CAH (11001010B) ambos en la localidad 40H de la RAM y sobre el puerto 2
de salida.
MOV A,Rn
BYTES: 1
CICLOS: 1
CDIGO DE OPERACIN:
73
C-8051
Conjunto de instruciones
1110
OPERACIN:
1rrr
MOV
(A)
(Rn)
MOV A,directo
BYTES: 2
CICLOS: 1
CDIGO DE OPERACIN:
1110
OPERACIN:
0101
direccin directa
MOV
(A)
(directo)
CICLOS: 1
CDIGO DE OPERACIN:
1110
OPERACIN:
011i
MOV
(A)
((Ri))
MOV A,#dato
BYTES: 2
CICLOS: 1
CDIGO DE OPERACIN:
0111
OPERACIN:
0100
dato inmediato
MOV
(A)
#dato
MOV Rn,A
74
C-8051
Conjunto de instruciones
BYTES: 1
CICLOS: 1
CDIGO DE OPERACIN:
1111
OPERACIN:
1rrr
MOV
(Rn)
(A)
MOV Rn,directo
BYTES: 2
CICLOS: 2
CDIGO DE OPERACIN:
1010
OPERACIN:
1rrr
direccin directa
MOV
(Rn)
(directo)
MOV Rn,#dato
BYTES: 2
CICLOS: 1
CDIGO DE OPERACIN:
0111
OPERACIN:
1rrr
dato inmediato
MOV
(Rn)
#dato
MOV directo,A
BYTES: 2
CICLOS: 1
CDIGO DE OPERACIN:
1111
OPERACIN:
0101
direccin directa
MOV
75
C-8051
Conjunto de instruciones
(directo)
(A)
MOV directo,Rn
BYTES: 2
CICLOS: 2
CDIGO DE OPERACIN:
1000
OPERACIN:
1rrr
direccin directa
MOV
(directo)
(Rn)
MOV directo,directo
BYTES: 3
CICLOS: 2
CDIGO DE OPERACIN:
1000
OPERACIN:
0101
direc. directa(dest.)
direc.directa(fuen.)
MOV
(directo)
(directo)
MOV directo,@Ri
BYTES: 2
CICLOS: 2
CDIGO DE OPERACIN:
1000
OPERACIN:
011i
direccin directa
MOV
(directo)
((Ri))
MOV directo,#dato
BYTES: 3
CICLOS: 2
CDIGO DE OPERACIN:
0111
OPERACIN:
0101
direccin directa
dato inmediato
MOV
76
C-8051
Conjunto de instruciones
(directo)
#dato
MOV @Ri,A
BYTES: 1
CICLOS: 1
CDIGO DE OPERACIN:
1111
OPERACIN:
011i
MOV
((Ri))
(A)
MOV @Ri,directo
BYTES: 2
CICLOS: 2
CDIGO DE OPERACIN:
1010
OPERACIN:
011i
direccin directa
MOV
((Ri))
(directo)
MOV @Ri,#dato
BYTES: 2
CICLOS: 1
CDIGO DE OPERACIN:
0111
OPERACIN:
011i
dato inmediato
MOV
((Ri))
#dato
77
MOV
<bit destino>
<bit fuente>
movimiento de bit
C-8051
Conjunto de instruciones
MOV C,bit
BYTES: 2
CICLOS: 1
CDIGO DE OPERACIN:
1010
OPERACIN:
0010
MOV
(C)
(bit)
MOV bit,C
BYTES: 2
CICLOS: 2
CDIGO DE OPERACIN:
10 01
OPERACIN:
MOV
(bit)
MOV DPTR,#DATO 16
carga al apuntador de datos
con una constante de 16 bits.
0010
(C)
BYTES: 3
CICLOS: 2
78
C-8051
Conjunto de instruciones
CDIGO DE OPERACIN:
10 01
OPERACIN:
0000
E
MA
MOV
DPH
DPL
#dato15-8
#dato7-0
INC
MOVC
RET
DB
DB
DB
DB
A
A,@A + PC
66H
77H
88H
99H
CICLOS: 2
CDIGO DE OPERACIN:
10 01
OPERACIN:
0011
MOVC
(A)
((A) + (DPTR))
MOVC A,@A + PC
79
C-8051
Conjunto de instruciones
BYTES: 1
CICLOS: 2
CDIGO DE OPERACIN:
10 00
OPERACIN:
0011
MOVC
(PC)
(A)
(PC) + 1
((A) + (PC))
80
C-8051
Conjunto de instruciones
A,@R1
@R0,A
CICLOS: 2
CDIGO DE OPERACIN:
1110
OPERACIN:
001i
MOVX
(A)
((Ri))
MOVX A,@DPTR
BYTES: 1
CICLOS: 2
CDIGO DE OPERACIN:
1110
OPERACIN:
0000
MOVX
(A)
((DPTR))
MOVX @Ri,A
BYTES: 1
CICLOS: 2
CDIGO DE OPERACIN:
1111
OPERACIN:
001i
MOVX
((Ri))
(A)
MOVX @DPTR,A
81
C-8051
Conjunto de instruciones
BYTES: 1
CICLOS: 2
CDIGO DE OPERACIN:
1111
OPERACIN:
0000
MOVX
(DPTR)
(A)
MUL AB multiplica los ocho bits del acumulador y los del registro B. El byte de
bajo orden del producto de 16 bits, se almacena en el acumulador, y el byte de alto orden en
B. Si el producto es ms grande que 255 (0FFH) la bandera de sobreflujo es establecida, de lo
contrario es limpiada.
EJEMPLO :
Originalmente el acumulador contiene el valor 80 (50H). El registro B contiene el
valor 160 (0A0H). La instruccin, MUL AB dar el producto 12,800 (3200H), as B es
cambiado a 32H (00110010B) y el acumulador es limpiado. La bandera de sobreflujo es
colocada, el acarreo es limpiado.
BYTES: 1
CICLOS: 4
CDIGO DE OPERACIN:
1010
OPERACIN:
0100
MUL
(A)7-0
(A) X (B)
(B)15-8
NOP
No operacin
82
C-8051
Conjunto de instruciones
NOP
NOP
SETB P2.7
NOP
BYTES:
CICLOS: 1
CDIGO DE OPERACIN:
0000
OPERACIN:
0000
NOP
(PC)
(PC) + 1
CICLOS: 1
CDIGO DE OPERACIN:
0100
1rrr
83
C-8051
Conjunto de instruciones
OPERACIN:
ORL
(A)
(A) V (Rn)
ORL A,directo
BYTES: 2
CICLOS: 1
CDIGO DE OPERACIN:
0100
OPERACIN:
0101
direccin directa
ORL
(A)
(A) V (directo)
ORL A,@Ri
BYTES: 1
CICLOS: 1
CDIGO DE OPERACIN:
0100
OPERACIN:
011i
direccin directa
ORL
(A)
(A) V ((Ri))
ORL A,#dato
BYTES: 2
CICLOS: 1
CDIGO DE OPERACIN:
0100
OPERACIN:
0100
dato inmediato
ORL
(A)
(A) V #dato
ORL directo,A
BYTES: 2
CICLOS: 1
CDIGO DE OPERACIN:
84
C-8051
Conjunto de instruciones
0100
OPERACIN:
0010
direccin directa
ORL
(directo)
(directo) V (A)
ORL directo,#dato
BYTES: 3
CICLOS: 2
CDIGO DE OPERACIN:
0100
OPERACIN:
0011
direccin directa
dato inmediato
ORL
(directo)
(directo) V #dato
EJEMPLO :
Coloca la bandera de acarreo s y solo s P1.0 = 1, ACC.7 = 1, 0V = 0:
MOV
ORL
ORL
C,P1.0
C,ACC.7
C,/OV
ORL C,bit
BYTES: 2
CICLOS: 2
CDIGO DE OPERACIN:
0111
OPERACIN:
0010
bit de direccin
ORL
(C)
(C) V (bit)
85
C-8051
Conjunto de instruciones
ORL C,/bit
BYTES: 2
CICLOS: 2
CDIGO DE OPERACIN:
10 10
OPERACIN:
0000
bit de direccin
ORL
(C)
(C) V /(bit)
BYTES: 2
CICLOS: 2
CDIGO DE OPERACIN:
1101
OPERACIN:
0000
Direccin directa
POP
(directo)---((SP))
(SP)---(SP) - 1
PUSH directo
almacenamiento en la
pila.
86
C-8051
Conjunto de instruciones
DPL
DPH
dejar el apuntador de apilamiento colocado a 0BH y guarda 23H y 01H en las localidades
de la RAM interna 0AH y 0BH, respectivamente.
BYTES: 2
CICLOS: 2
CDIGO DE OPERACIN:
1100
OPERACIN:
0000
direccin directa
PUSH
(SP)
((SP))
(SP) + 1
(directo)
RET extrae de la pila los bytes de bajo y alto orden del PC, decrementando dos veces
el apuntador de apilamiento. Una vez que el PC es cargado con la nueva direccin,
contina con la ejecucin del programa principal, en la instruccin siguiente a la
instruccin que llam a la subrutina (ACALL o LCALL). Las banderas no son afectadas.
EJEMPLO :
El apuntador de apilamiento originalmente contiene el valor 0BH. Las localidades de
la RAM interna 0AH y 0BH contienen los valores 23H y 01H, respectivamente. La instruccin,
RET dejar el apuntador de apilamiento con el valor 09H. La ejecucin del programa
continuar en la localidad 0123H.
BYTES: 1
CICLOS: 2
CDIGO DE OPERACIN:
0010
OPERACIN:
0010
RET
(PC15-8)
(SP)
(PC7-0)
(SP)
((SP))
(SP) - 1
((SP))
(SP) - 1
RETI
retorno de interrupcin.
87
C-8051
Conjunto de instruciones
RETI extrae de la pila, los bytes de alto y bajo orden del PC y restablece la lgica
de Interrupcin que le permite aceptar interrupciones adicionales de la misma o menor
prioridad. El apuntador de apilamiento es decrementado dos veces. Los otros registros no
son afectados; el estado de pre-interrupcin del PSW no es automticamente resguardado. La
ejecucin del programa contina a la direccin resultante, que generalmente es la
instruccin siguiente al punto en el cual la interrupcin fue detectada.
NOTA :
Una interrupcin de ms alta prioridad puede interrumpir el servicio de
interrupcin de una de baja prioridad. Si una interrupcin de nivel bajo del mismo nivel
de prioridad est pendiente cuando la instruccin RETI es ejecutada entonces una instruccin
deber ser ejecutada antes de que dicha interrupcin pendiente sea procesada.
EJEMPLO :
El apuntador de apilamiento originalmente contiene el valor 0BH. Una interrupcin
fue detectada durante la instruccin finalizando en la localidad 0122H. La localidad de la
RAM interna 0AH y 0BH contienen el valor 23H y 01H, respectivamente. La instruccin,
RETI dejar el apuntador de apilamiento igual a 09H y regresar al programa ejecutando la
localidad 0123H.
BYTES: 1
CICLOS: 2
CDIGO DE OPERACIN:
0011
OPERACIN:
0010
RETI
(PC15-8)
(SP)
(PC7-0)
(SP)
((SP))
(SP) - 1
((SP))
(SP) - 1
RL. Los ocho bits en el acumulador son rotados un bit a la izquierda. El bit 7
es rotado a la posicin del bit 0. Las banderas no son afectadas.
EJEMPLO :
El acumulador contiene el valor 0C5H (11000101B). La instruccin, RLA deja
el acumulador conteniendo el valor 8BH (10001011B) con el acarreo no afectado.
BYTES: 1
CICLOS: 1
CDIGO DE OPERACIN:
0010
0011
88
RL A
C-8051
Conjunto de instruciones
OPERACIN:
RL
(An + 1)
(A0)
a
(A7)
(An) n = 0 - 6
RLC. Los ocho bits en el acumulador y la bandera de acarreo son rotados un bit a la
izquierda. El bit 7 se mueve a la bandera de acarreo; el estado original de la bandera de
acarreo se mueve a la posicin del bit 0. Las banderas no son afectadas.
EJEMPLO :
El acumulador contiene el valor 0C5H (11000101B), y el acarreo es cero. La
instruccin, RLC A deja el acumulador conteniendo el valor 8AH (10001010B) con el
acarreo establecido.
BYTES: 1
CICLOS: 1
CDIGO DE OPERACIN:
0011
OPERACIN:
0011
RLC
(An + 1)
(A0)
(C)
a
(An) n = 0 - 6
(C)
(A7)
RR. Los ocho bits en el acumulador son rotados un bit a la derecha. El bit 0 es
rotado a la posicin del bit 7. Las banderas no son afectadas.
EJEMPLO :
El acumulador contiene el valor 0C5H (11000101B). La instruccin, RR A
deja al acumulador conteniendo el valor 0E2H (11100010B) con el acarreo no afectado.
BYTES: 1
CICLOS: 1
CDIGO DE OPERACIN:
0000
OPERACIN:
0011
RR
(An)
(A7)
(An + 1) n = 0 - 6
(A0)
RRC A rota el acumulador
a la derecha a travs de la
bandera de acarreo.
89
C-8051
Conjunto de instruciones
RRC. Los ocho bits en el acumulador y la bandera de acarreo son rotados un bit a
la derecha. El bit 0 se mueve a la bandera de acarreo; el valor original de la bandera de
acarreo se mueve a la posicin del bit 7. Las otras banderas no son afectadas.
EJEMPLO :
El acumulador contiene el valor 0C5H (11000101B), el acarreo es cero. La
instruccin, RRC A deja al acumulador conteniendo el valor 62 (01100010B) con el
acarreo establecido.
BYTES: 1
CICLOS: 1
CDIGO DE OPERACIN:
0001
OPERACIN:
0011
RRC
(An)
(A7)
(C)
(An + 1) n = 0 - 6
(C)
(A0)
SETB coloca el bit indicado en uno. SETB puede operar sobre la bandera de acarreo
cualquier bit direccionable directamente. Las otras banderas no son afectadas.
EJEMPLO :
La bandera de acarreo es limpiada. El puerto 1 de salida ha sido escrito con el valor
34H (00110100B). Las instrucciones,
SETB C
SETB P1.0
dejan la bandera de acarreo colocada a 1 y cambian el dato de salida en el puerto 1 a 35H
(00110101B).
SETB C
BYTES: 1
CICLOS: 1
CDIGO DE OPERACIN:
1101
OPERACIN:
0011
SETB
(C)
SETB bit
90
C-8051
Conjunto de instruciones
BYTES: 2
CICLOS: 1
CDIGO DE OPERACIN:
1101
OPERACIN:
0010
bit de direccin
SETB
(bit)
EJEMPLO :
La etiqueta RELAD es asignado a una instruccin en la localidad del programa
de memoria 0123H. La instruccin,
0100 8021
102
SJMP
RELAD
EL PC APUNTA A ESTA LOCALIDAD
0123 7420
BYTES: 2
CICLOS: 2
CDIGO DE OPERACIN:
1000
OPERACIN:
0000
direccin relativa
SJMP
(PC)
(PC) + 2
91
C-8051
Conjunto de instruciones
(PC)
(PC) + rel
CICLOS: 1
CDIGO DE OPERACIN:
1001
OPERACIN:
1rrr
SUBB
(A)
SUBB A,directo
BYTES: 2
CICLOS: 1
CDIGO DE OPERACIN:
1001
OPERACIN:
0101
direccin directa
SUBB
(A)
92
C-8051
Conjunto de instruciones
SUBB A,@Ri
BYTES: 1
CICLOS: 1
CDIGO DE OPERACIN:
1001
OPERACIN:
011i
SUBB
(A)
SUBB A,#dato
BYTES: 2
CICLOS: 1
CDIGO DE OPERACIN:
1001
OPERACIN:
0100
dato inmediato
SUBB
(A)
SWAP A intercambia los NIBBLES (campos de 4 bits) de alto y bajo orden del
acumulador (bits 3-0 y bits 7-4). La operacin puede tambin ser vista como una instruccin
de rotacin de 4 bits sin acarreo. Las banderas no son afectadas
.
EJEMPLO:
El acumulador contiene el valor 0C5H (11000101B). La instruccin, SWAP A
deja al acumulador conteniendo el valor 5CH (01011100B).
BYTES: 1
CICLOS: 1
CDIGO DE OPERACIN:
1 1 00
OPERACIN:
SWAP
(A3-0)
0100
(A7-4)
93
SWAP A
intercambia la parte
alta y parte baja del
acumulador.
C-8051
Conjunto de instruciones
EJEMPLO:
R0 contiene la direccin 20H. El acumulador contiene el valor 3FH
(00111111B). La localidad de la RAM interna 20H contiene el valor 75H (01110101B). La
instruccin, XCH A,@R0 dejar la localidad 20H de la RAM conteniendo los valores 3FH
(001111111B) y 75H (01110101B) en el acumulador.
XCH A,Rn
BYTES: 1
CICLOS: 1
CDIGO DE OPERACIN:
1 1 00
OPERACIN:
1rrr
XCH
(A)
(Rn)
XCH A,directo
BYTES: 2
CICLOS: 1
CDIGO DE OPERACIN:
1100
OPERACIN:
0101
direccin directa
XCH
(A)
(directo)
XCH A,@Ri
BYTES: 1
CICLOS: 1
CDIGO DE OPERACIN:
1100
OPERACIN:
011i
XCH
(A)
((Ri))
94
C-8051
Conjunto de instruciones
XCHD intercambia el NIBBLE de bajo orden del acumulador (bits 3-0), con el
NIBBLE bajo del dato de la RAM interna indirectamente direccionada por el registro
especificado. Las banderas no son afectadas.
EJEMPLO:
R0 contiene la direccin 20H. El acumulador contiene el valor 36H (00110110B).
La localidad 20H de la RAM interna contiene el valor 75H (01110101B). La instruccin,
XCHD A,@R0 dejar la localidad 20H de la RAM conteniendo el valor 76H
(01110110B) y en el acumulador 35 (00110101B).
BYTES: 1
CICLOS: 1
CDIGO DE OPERACIN:
1101
OPERACIN:
011i
XCHD
(A3-0)
((Ri3-0))
95
C-8051
Conjunto de instruciones
XRL A,Rn
BYTES: 1
CICLOS: 1
CDIGO DE OPERACIN:
0110
OPERACIN:
1rrr
XRL
(A)
(A) A (Rn)
XRL A,directo
BYTES: 2
CICLOS: 1
CDIGO DE OPERACIN:
0110
OPERACIN:
0101
direccin directa
XRL
(A)
(A) A (directo)
XRL A,@Ri
BYTES: 1
CICLOS: 1
CDIGO DE OPERACIN:
0110
OPERACIN:
011i
XRL
(A)
(A) A ((Ri))
XRL A,#DATA
BYTES: 2
CICLOS: 1
CDIGO DE OPERACIN:
96
C-8051
Conjunto de instruciones
0110
OPERACIN:
0100
dato inmediato
XRL
(A)
(A) A #dato
XRL directo,A
BYTES: 2
CICLOS: 1
CDIGO DE OPERACIN:
0110
OPERACIN:
0010
direccin directa
XRL
(directo)
(directo) A (A)
XRL directo,#dato
BYTES: 3
CICLOS: 2
CDIGO DE OPERACIN:
0110
OPERACIN:
0011
direccin directa
dato inmediato
XRL
(directo)
(directo) A #dato.
97
14 13 12 11 10 .... 3 2 1
SEAL
GND
VDD
Vo
RS
R/W
DB0
8
9-13
14
DB1
DB2
DB7
FUNCION
TIERRA 0 Volts.
5 Volts
VOLTAJE DE CONTRASTE
RS=1 ENTRADA DE DATO, RS=0
ENTRADA DE CONTROL
R/W=1 LECTURA
R/W=0 ESCRITURA
SEAL DE HABILITACION DEL
CIRCUITO
BIT MENOS SIGNIFICATIVO DEL
BUS DE DATOS
BUS DE DATOS 8 BITS
BIT MS SIGNIFICATIVO DEL
BUS DE DATOS
Regreso
al
Men principal
men principal
Interconexin de Perifricos
RS
0
R/W
0
DB7
0
DB6
0
DB5
1
DB4
1
DB3
1
DB2
0
DB1
0
DB0
0
Se enva la palabra de control al exhibidor (RS=0 y R/W=0), los bits DB5 y DB4
especifican el tamao del bus, y el bit DB3 el nmero de lneas del exhibidor.
Se espera un lapso de tiempo de 40 s antes de enviar la siguiente instruccin.
NOTA: Cada instruccin, toma un cierto tiempo de ejecucin que va de 40 s a 1.64 ms. (Ver
tiempos de ejecucin en la Tabla1.)
Cdigo
01H
RS
0
R/W
0
DB7
0
DB6
0
DB5
0
DB4
0
DB3
0
DB2
0
DB1
0
DB0
1
3. -Se establece el movimiento del cursor hacia la derecha, la pantalla del exhibidor
permanece fija con la entrada de los caracteres.
Cdigo
06H
RS
0
R/W
0
DB7
0
DB6
0
DB5
0
DB4
0
DB3
0
DB2
1
DB1
1
DB0
0
Cdigo
0EH
RS
0
R/W
0
DB7
0
DB6
0
DB5
0
DB4
0
DB3
1
DB2
1
posicin
DB1
1
del
DB0
0
Cdigo
80H
RS
0
R/W
1
DB7
0
Interconexin de Perifricos
DB6
0
DB5
0
DB4
0
DB3
0
DB2
0
DB1
0
DB0
0
__
6.-A partir de aqu se puede comenzar a enviar los caracteres que se desean exhibir
dejando un tiempo entre cada uno de ellos de 40 s. mnimo, y con RS=1
Por ejemplo se enviar n las letras A y B, por lo tanto se escribir
cdigo ASCII para la letra A, el cual se ejecuta en 40 s.
Cdigo
41H
A
RS
1
R/W
0
DB7
0
DB6
1
DB5
0
el siguiente
DB4
0
DB3
0
DB2
0
DB1
0
DB0
1
DB4
0
DB3
0
DB2
0
DB1
1
DB0
0
__
RS
1
R/W
0
DB7
0
DB6
1
DB5
0
Interconexin de Perifricos
BUS DE DATOS
33pF
31
19
11.05592MHz
VCC
18
10uF
RESET
EA/VP
P0.0
P0.1
P0.2
P0.3
P0.4
P0.5
P0.6
P0.7
X1
X2
33pF
9
100K
12
13
14
15
1
2
3
4
5
6
7
8
1N4148
RESET
P2.0
P2.1
P2.2
P2.3
P2.4
P2.5
P2.6
P2.7
INT0
INT1
T0
T1
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
39
38
37
36
35
34
33
32
3
4
7
8
13
14
17
18
21
22
23
24
25
26
27
28
1
11
D0
D1
D2
D3
D4
D5
D6
D7
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
2
5
6
9
12
15
16
19
10
9
8
7
6
5
4
3
25
24
21
23
2
26
27
OC
G
74LS373
17
16
29
30
11
10
RD
WR
PSEN
ALE/P
TXD
RXD
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
20
22
1
5V
O0
O1
O2
O3
O4
O5
O6
O7
11
12
13
15
16
17
18
19
10
9
8
7
6
5
4
3
25
24
21
23
2
26
1
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
20
22
27
CE
OE
VPP
D0
D1
D2
D3
D4
D5
D6
D7
11
12
13
15
16
17
18
19
CE
RD
WR
27256
43256
BUS DE DATOS
8031
EXHIBIDOR
LM 16256
14
1 6
5V
100K
D
13
Vcc
11
17
16
15
14
12
74HC08
A12
D0
D1
D2
D3
A14
6
4
5
A
B
C
Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7
G1
G2A
G2B
15
14
13
12
11
10
9
7
0.01uF
0.1uF
12
13
VCC
Y1
Y2
Y3
Y4
X1
X2
X3
X4
5 OSC
1
2
3
1
1
2
3
4
11
10
8
7
10K
6 KEYB
DA
/OE
GND
9
74HC138
REV
SISTEMA MINIMO2
Date:
Sheet
of
4000
4000
4000
4000
4000
4000
4003
4005
4008
400B
ORG 4000H
;LAS DIRECCIONES DEL EXHIBIDOR SON
;LA 8000H PARA CONTROL DEL EXHIBIDOR
;LA 8001H PARA EXHIBICI`N DEL CARACTER
;APUNTADAS POR LOS REGISTROS R0 Y P2.
904075
7800
75A050
124046
;CONTROL DEL
;EXHIBIDOR
400B
400B A3
400C 124046
INC DPTR
LCALL XCBDOR
400F
400F
400F
400F 124056
LCALL LIMPIA
4012
4012 90407D
4015
4015
BIEN:
MOV DPTR,#BIENV
;SE ENVIA A LA RUTINA QUE EXHIBE
;EN DOS LINEAS EN UNA VEZ.
4015 124030
4018 124064
401B
401B
401B
LCALL DOBLEX
LCALL TIME
;SE ENVIA EL CARACTER 01 DE CONTROL
;(LIMPIA PANTALLA), EL CUAL REQUIERE
;1.64MsEG. PARA SU EJECUCION.
401B 7800
401D 124056
4020
4020
4020
4023
4025
4028
402B
Interconexin de Perifricos
MOV R0,#00
LCALL LIMPIA
;SE ENVIA UN SOLO MENSAJE A LA PRIMERA
;LINEA A PARTIR DE LA COLUMNA 5.
90409F
7485
12403A
124064
124056
402E 80E2
4030
4030
4030
4030
MOV DPTR,#MEDIO
MOV A,#85H
;ESCRIBE EN LA 1era
LCALL COEXH ;LINEA (5ta. COLUMNA)
LCALL TIME
LCALL LIMPIA
TEREXH: SJMP BIEN
;************************************
;**** SUBRUTINA DE CONTROL Y PRE-****
;**** SENTACION DEL EXHIBIDOR
****
;************************************
4030
4032
4034
4035
4037
4039
403A
403C
403F
4040
4042
4043
4045
7450
113A
A3
74C0
113A
22
7800
75A080
F2
1151
08
1146
22
4046
4047
4048
404A
E4
93
6006
F2
XCBDOR: CLR A
MOVC A,@A+DPTR
JZ TERMIN
MOVX @R0,A
404B
404D
404E
4050
1151
A3
80F6
22
ACALL QARNTA
INC DPTR
SJMP XCBDOR
TERMIN: RET
4051
4051
4051
4051 7F14
4053 DFFE
4055 22
Interconexin de Perifricos
;TIEMPO 40uSEGS
;****************************************
;**** SUBRUTINA DE TIEMPO DE 40uSEGS ****
;****************************************
QARNTA: MOV R7,#20
TIEMPO: DJNZ R7,TIEMPO
RET
4056
;******************************************
;** SUBRUTINA QUE ENVIA EL CARACTER
***
;**
01 DE CONTROL, Y ADEMAS CONSUME
***
;** LOS 1.64 mSEGS PARA SU EJECUCION
***
;******************************************
4056
4056
4056
4056
4059
405C
405E
4061
4063
4064
4064
4064
4064
90407B
124046
7E28
124051
DEFB
22
4064
4066
4068
406A
406C
406E
4070
4072
4074
7902
785A
7E63
7F32
DFFE
DEFA
D8F6
D9F2
22
4075
4075
4075
TIME:
E2:
E3:
E4:
WAIT:
MOV R1,#02
MOV R0,#90
MOV R6,#99
MOV R7,#50
DJNZ R7,WAIT
DJNZ R6,E4
DJNZ R0,E3
DJNZ R1,E2
RET
;*****************************************
;**** TABLA DE MENSAJES DEL EXHIBIDOR ****
;*****************************************
4075
4076
4077
4078
4079
407A
407B
407C
38
00
06
0E
80
00
01
00
CONTEX: DB
DB
DB
DB
INIEXH: DB
DB
CLEAR: DB
DB
407D
408D
408E
409E
409F
40A6
0000
20424945
00
20534953
00
454E4D45
00
BIENV:
MEDIO
38H
00H
06H
0EH
80H
00H
01H
00H
BIEN
QARNTA
E2
WAIT
LIMPIA
COEXH
TI1600
P2
4012
4051
4066
406C
4056
403A
405E
00A0
DOBLEX
TIME
INIEXH
CLEAR
TERMIN
E4
CONTEX
TIEMPO
Interconexin de Perifricos
4030
4064
4079
407B
4050
406A
4075
4053
FEXH
BIENV
TEREXH
E3
XCBDOR
MEDIO
EXHIBE
4039
407D
402E
4068
4046
409F
4000
Interconexin de Perifricos
;********************************************
0000
ORG 00H
9000
TEC:
EQU 9000H
8000
EXHI:
EQU 8000H
0000 020064
LJMP TECLAD
0003
ORG 03H
0003 D200
SETB 20H.0
0005 909000
MOV DPTR,#TEC
0008 E0
MOVX A,@DPTR
0009 540F
ANL A,#0FH
000B 2430
ADD A,#30H ;VALOR ASCII
000D 32
RETI
;********************************************
;*****
PROGRAMA PRINCIPAL
********
;********************************************
0064
ORG 100
0064 758801
TECLAD: MOV TCON,#01H
0067 9000AE
MOV DPTR,#CONTRL
006A 7800
MOV R0,#00H
006C 1191
ACALL SUBEXH
006E 9000B6
MOV DPTR,#TEXTO
0071 118F
ACALL SUBEX1
0073 74C0
MOV A,#0C0H
0075 11A5
ACALL POSCUR
0077 9000C7
MOV DPTR,#TEXT1
007A 118F
ACALL SUBEX1
007C 3000FD
ESPTEC: JNB 20H.0,ESPTEC
007F C200
CLR 20H.0
0081 908001
MOV DPTR,#8001H
0084 F0
MOVX @DPTR,A
0085 7F20
MOV R7,#20H
0087 DFFE
TEX:
DJNZ R7,TEX
0089 7410
008B 11A5
008D 80ED
;*********************************************
;****** SUBRUTINA DE
EXHIBICION
********
;*********************************************
008F 7801
SUBEX1: MOV R0,#01H
0091 75A080
SUBEXH: MOV P2,#80H
0094 E4
SUBEX: CLR A
0095 93
MOVC A,@A+DPTR
0096 600C
JZ FINEXH
0098 F2
MOVX @R0,A
0099 7A10
MOV R2,#10H
009B 79FF
LAZEX2: MOV R1,#0FFH
009D D9FE
LAZEXH: DJNZ R1,LAZEXH
009F DAFA
DJNZ R2,LAZEX2
00A1 A3
INC DPTR
00A2 80ED
SJMP SUBEXH
00A4 22
FINEXH: RET
00A5
00A8
00A9
00AB
00AD
908000
F0
79FF
D9FE
22
Interconexin de Perifricos
;***********
TEXTOS
**********
;********************************************
00AE 38010206 CONTRL: DB 38H,01H,02H,06H,0FH,80H,00H
00B5 00
DB 00H
00B6 4F505249 TEXTO: DB 'OPRIMA UNA TECLA'
00C6 00
DB 00H
00C7 5445434C TEXT1: DB 'TECLA --> '
00D1 00
DB 00H
0000
END
---- TABLA SIMBOL ---CONTRL
0088
SUBEX
8000
FINEXH
0087
00AE
TEXT1
0094
LAZPOS
00A4
LAZEX2
00C7
TEC
00AB
P2
009B
ESPTEC
9000
SUBEX1
00A0
POSCUR
007C
TEXTO
008F
SUBEXH
00A5
LAZEXH
00B6
TECLAD
0091
TCON
009D
EXHI
0064
TEX
Perifricos
Regreso al
men principal
INTERCONEXIONANDO UN MOTOR DE PASOS CON EL
MICROCONTROLADOR 8051
En
muchas
aplicaciones de Control Automtico, es necesario el
accionamiento de vlvulas o sistemas de engranes con una exactitud y precisin muy
alta. En Robtica, son indispensables stas caractersticas, donde las manos y brazos
mecnicos deben de ejecutar movimientos de gran precisin. Existen muchas otras
ramas de la electrnica donde la utilizacin de dispositivos de posicionamiento mecnico
son indispensables.
Un motor de pasos resuelve en gran medida este problema, ya que su principio
de funcionamiento le permite realizar pequeos movimientos (pasos), con gran exactitud
y repetibilidad.
El motor de pasos es un motor elctrico cuyo eje gira una cantidad especfica por cada
pulso de entrada que recibe, lo cual permite el control de posicin, velocidad, y sentido
(direccin).
Existen diferentes tipos de motores de pasos, de los cuales veremos
funcionamiento de uno ellos, el Motor de Magneto Permanente.
el
Perifricos
on
2
S
N
S
on
N
N
S N
on
N
S
N
on
A on
3
N
S
N
on
S
N S
S
N
S
on
A
Fig. 2 Principio de funcionamiento de un motor de pasos
on
B
Perifricos
Perifricos
Como cada una de las bobinas deben ser energizadas en los dos sentidos,
(fig. 3).
VCC
Rc
Rb
NPN DAR
Rb
PNP DAR
SECUENCIA DE ENERGIZACION
Rc
-VCC
Size
Document Number
REV
A
Date:
Sheet
of
Perifricos
VCC
VCC
R13
VCC
3
R1
R9
2
NPN DAR
1
2
R2
VCC
VCC
-VCC
VCC
R3
B
7
R10
1
PNP DAR
6
2
3
4
5
6
7
11
9
10
1
SR
A
B
C
D
SL
R4
QA
QB
QC
QD
R14
15
14
13
12
VCC
VCC
-VCC
R15
VCC
VCC
C
R5
R11
14
CLK
S0
S1
CLR
R6
74194
NPN DAR
-VCC
VCC
VCC
R7
D
11
R12
Q?
PNP DAR
13
10
R8
LM339
R16
-VCC
VCC
Size
REV
A
Date:
Sheet
of
Perifricos
BUS DE DATOS
33pF
31
19
11.05592MHz
VCC
18
10uF
RESET
EA/VP
P0.0
P0.1
P0.2
P0.3
P0.4
P0.5
P0.6
P0.7
X1
X2
33pF
9
12
13
14
15
100K
1
2
3
4
5
6
7
8
1N4148
RESET
P2.0
P2.1
P2.2
P2.3
P2.4
P2.5
P2.6
P2.7
INT0
INT1
T0
T1
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
RD
WR
PSEN
ALE/P
TXD
RXD
8031
39
38
37
36
35
34
33
32
3
4
7
8
13
14
17
18
21
22
23
24
25
26
27
28
1
11
D0
D1
D2
D3
D4
D5
D6
D7
2
5
6
9
12
15
16
19
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
10
9
8
7
6
5
4
3
25
24
21
23
2
26
27
OC
G
74LS373
17
16
29
30
11
10
20
22
1
5V
VCC
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
O0
O1
O2
O3
O4
O5
O6
O7
11
12
13
15
16
17
18
19
VCC
CE
OE
VPP
2 OHMS
10 WATTS
27256
A
3
5
VCC
TIP120
4
1.2K
10k
1
10
9
11
VCC
7
6
5
4
3
2
1
2
CLR
S1
S0
CLK
SL
D
C
B
A
SR
B
VSS
10K
QD
QC
QB
QA
7
1
12
13
14
15
TIP125
6
1.2K
VCC
2 OHMS
2 OHMS
VSS
74HC194
10 WATTS
10 WATTS
9
14
TIP120
8
1.2K
BOBINA 2
D
DEL MOTOR
TIP125
11
13
VSS
10
1.2K
2 OHMS
10 WATTS
LM339
Size
A
Date:
REV
SISTEMA MINIMO2
March 30, 1998
Sheet
of
020012
758CD8
758AF0
32
758CD8
758AF0
C293
D293
C290
D290
MOTOR:
ORG 00H
LJMP MOTOR
ORG 0BH
MOV TH0,#0D8H
MOV TL0,#0F0H
RETI
MOV TH0,#0D8H
MOV TL0,#0F0H
CLR P1.3
SETB P1.3
CLR P1.0
SETB P1.0
;SE
;SE
;SE
;DE
; SE RECARGA EL T0 CON
;LA BASE DE T=-10,000
; SE CARGA CON LA BASE
;DE TIEMPO =
;10000useg.
DESACTIVA EL MOTOR
VUELVE ACTIVAR
CARGA EL VALOR INICIAL
CORRIMIENTO "0001"
;********************************************
;**EL MOVIMIENTO SE REALIZARA A LA DERECHA **
;*********
S0=1 y S1=0
***********
;********************************************
0020 758901
MOV TMOD,#01H ;SE ESTABLECE T0 COMO
0023 758810
0026 75A882
0029 C291
Perifricos
002B D292
SETB P1.2
002D 113B
ACALL PSS
002F 114B
0031
ACALL PARO
;S1=0
;S0=1
;SE LLAMA A LA RUTINA DE ;PASOS
;SE LLAMA A LA RUTINA DE PARO
;********************************************
;* EL MOVIMIENTO SE REALIZARA A LA IZQUIERDA*
;*********
S0=0 y S1=1
**********
;********************************************
0031 C292
CLR P1.2 ;S0=0
0033 D291
SETB P1.1 ;S1=1
;SE LLAMA A LA RUTINA DE PASOS
0035 113B
ACALL PSS
;SE LLAMA A LA RUTINA DE PARO
0037 114B
ACALL PARO
;SE REPITE LA SECUENCIA DE MANERA INDEFINIDA
0039 80EE
SJMP REPITE
;*********************************************
;*** RUTINA DE MOVIMIENTO DEL MOTOR
********
;*********************************************
003B
003D
003F
0042
0044
0046
0048
004A
7B07
7AD0
308DFD
C290
D290
DAF7
DBF3
22
PSS:
PAS1:
PASO:
MOV R3,#07H
;R2R3 COMO CONTADORES DE
MOV R2,#0D0H ;2000 PASOS=10 VUELTAS
JNB TCON.5,PASO ; ESPERA 10 mseg.
CLR P1.0
;SE ENVIA UN PULSO DE
SETB P1.0
;RELOJ "CLK"
DJNZ R2,PASO
DJNZ R3,PAS1
RET
;*********************************************
;******* RUTINA DE PARO DEL MOTOR
*********
;*********************************************
004B
004D
004F
0051
0053
0055
0057
0059
005B
005D
005F
0000
C293
7C14
7D00
7E00
DEFE
DDFC
DCFA
D293
C290
D290
22
PARO:
CLR P1.3
; SE DESACTIVA EL MOTOR
MOV R4,#20
; CONTADORES PARA 2 SEG.
MOV R5,#00
; DE PARO TOTAL DEL
MOV R6,#00
; MOTOR.
TIEMPO: DJNZ R6,TIEMPO
DJNZ R5,TIEMPO
DJNZ R4,TIEMPO
SETB P1.3
;SE VUELVE ACTIVAR EL M.
CLR P1.0 ;SE CARGA EL VALOR INICIAL
SETB P1.0 ;DE CORRIMIENTO "0001"
RET
END
Transmisin serial
Perifricos
Un parmetro importantsimo , que debe ser tomado en cuenta, al inicio de todos los
diseos, es la capacidad de almacenamiento de informacin de los dispositivos principalmente
en laos sistemas de adquisicin de datos, donde, el tratamiento, anlisi y clculo de resultados
es indispensable.
El almacenar datos en memoria RAM, es relativamente sencillo y fcil de realizar, la
rapidez de acceso de estos circuitos, permite procesar datos en tiempo real, ms sin embargo, su
capacidad de almacenamiento es relativamente limitada. Por otro lado, aunque de menor
velocidad de acceso, los discos flexibles y discos duros, ofrecen una capacidad mucho mayor de
almacenamiento.
Por tal motivo, en este ejemplo se plantea la transmisin de datos, de la memoria RAM
hacia una computadora del tipo IBM-PC compatible, haciendo uso del puerto serie del
microcontrolador y su interconexin a la interfase del tipo RS-232C.
El protocolo de transmisin de datos en serie, contempla lo siguiente:
El primer bit que se transmite es el bit de inicio (Start bit), el cual tiene la caracterstica
de ser siempre un 0 lgico.
Posteriormente los bits que le siguen son los 8 bits de datos, comenzando con el menos
significativo D0.
La transmisin termina con el envio de un ltimo bit, denominado bit de paro (Stop
bit), que siempre ser un 1 lgico.
Regreso al
men principal
Transmisin serial
Perifricos
9600 Hz.
8 BITS
1 BIT
1 BIT
1 BIT
C1+
V+
C1-
Doblador de voltaje de
5 a 10 V +
16
Inversor de voltaje de
10+ a -10 V
15
Vcc
Gnd
T1salida
14
C2+
13
R1entrada
C2-
12
R1salida
V-
11
T1entrada
T2salida
10
T2entrada
R2 entrada
R2 salida
Transmisin serial
Perifricos
BUS DE DATOS
31
33pF
19
5V
11.0592Mhz
18
33pF
10uF
RESET
12
13
14
15
100k
1N4148
1
2
3
4
5
6
7
8
EA/VP
P0.0
P0.1
P0.2
P0.3
P0.4
P0.5
P0.6
P0.7
X1
X2
RESET
P2.0
P2.1
P2.2
P2.3
P2.4
P2.5
P2.6
P2.7
INT0
INT1
T0
T1
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
RD
WR
PSEN
ALE/P
TXD
RXD
39
38
37
36
35
34
33
32
3
4
7
8
13
14
17
18
21
22
23
24
25
26
27
28
1
11
D0
D1
D2
D3
D4
D5
D6
D7
2
5
6
9
12
15
16
19
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
10
9
8
7
6
5
4
3
25
24
21
23
2
26
27
OC
G
74LS373
17
16
29
30
11
10
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
20
22
1
VCC
11
12
13
15
16
17
18
19
O0
O1
O2
O3
O4
O5
O6
O7
10
9
8
7
6
5
4
3
25
24
21
23
2
26
1
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
20
22
27
CE
OE
VPP
11
12
13
15
16
17
18
19
D0
D1
D2
D3
D4
D5
D6
D7
CE
RD
WR
27256
43256
8031
CONEXIONADO DEL
CONECTOR STANDARD
DEL PUERTO SERIE
DEL LA PC-IBM
1
14
2
15
3
16
4
17
5
18
6
19
7
20
8
21
9
22
10
23
11
24
12
25
13
18
17
16
15
14
13
12
11
22uF
TxD
8
7
6
5
4
3
2
1
RS232
RxD
RS232
RQS
CTS
22uF
TTL/CMOS
TTL/CMOS
RS232
RS232
1
2
3
5
22uF
DSR
ICL-232
2
3
GND
DTR
CD8
VI+
VICLKR
19
150pF
10K
CLK
CS
RD
WR
INTR
Ventrada
masa analog.
VCC
9
VREF
AGND
ADC0801
1
22uF
3.3K
RI
9
10
11
12
13
14
15
16
DB0
DB1
DB2
DB3
DB4
DB5
DB6
DB7
DTR
DSR
3.3K
1K
74HC08
A121
A132
A143
A
B
C
6
4
5
G1
G2A
G2B
CONNECTOR DB25
Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7
15
14
13
12
11
10
9
7
2.5V
10K
74HC138
INTERCONEXIONADO DEL MICRCONTROLADOR PARA
LA TRANSMISION DE DATOS EN SERIE HACIA LA PC
Size
Document Number
SISTEMA MINIMO 5
A
Date:
Sheet
REV
of
;********************************************
;***** PROGRAMA DE TRANSMISION DE DATOS ****
;* POR EL PUERTO SERIE DEL MICROCONTROLADOR *
;** CON EL CONVERTIDOR A/D SE TOMAN DATOS **
;** CADA 3 SEGUNDOS Y SE ALMACENAN EN RAM **
;** DURANTE 24 HORAS SE TIENEN 28800 DATOS **
;** DESPUES SON TRANSMITIDOS POR EL PUERTO **
;* SERIE. SE UTILIZA UN RELOJ DE 11.0592MHz *
;********************************************
0000
0000
0001
00E0
0000
0000 020100
BANDER:
BANTEM:
CAD:
MEMRAM:
ORG 00H
EQU 20H.0
EQU 20H.1
EQU 0E0H ;DIRECCION DEL C-A/D
EQU 0000H
LJMP TRANSMI
;********************************************
Transmisin serial
0003
0003
0005
0006
0007
000B
000B
000E
0011
0013
0015
0017
Perifricos
D200
E2
F0
32
;******
RUTINA DE SERVICIO DE LA
*******
;******
INTERRUPCION 0
*******
;********************************************
ORG 03H
SETB BANDER
MOVX A,@R0 ;SE ADQUIERE EL DATO CA/D
MOVX @DPTR,A ;SE ALMACENA EL DATO RAM
RETI
758C1F
758A00
DC04
D201
7C30
32
;********************************************
;******
RUTINA DE SERVICIO DE LA
*******
;******
INTERRUPCION DEL TIMER 0
*******
;********************************************
ORG 0BH
MOV TH0,#01FH ;SE CARGA LA BASE DE
MOV TL0,#00H ;TIEMPO 62,500 uSeg.
DJNZ R4,SALE
SETB BANTEM
MOV R4,#30H ;30H=48
SALE:
RETI
0023
0023 E0
0024 A3
0025 32
0100
0100
0103
0105
0107
010A
010D
0110
0113
0116
75A0E0
7800
7C30
758DFD
758BFD
900000
758C1F
758A00
758921
0119
011C
011F
0121
0123
0126
0128
0129
012C
012E
012F
758851
75A883
7F70
7E80
3001FD
C201
E2
3000FD
C200
A3
DEF2
;********************************************
;******
RUTINA DE SERVICIO DE LA
********
;****** INTERRUPCION DEL PUERTO SERIE *******
;********************************************
ORG 23H
MOVX A,@DPTR
INC DPTR
RETI
ORG 100H
TRANSMI:MOV P2,#CAD
MOV R0,#00H
MOV R4,#30H
MOV TH1,#0FDH ;PARA GENERAR EL BAUD
MOV TL1,#0FDH ;RATE A 9600
REPIT: MOV DPTR,#MEMRAM
MOV TH0,#01FH ;SE CARGA LA BASE DE
MOV TL0,#00H
;TIEMPO 62,500 uSeg.
MOV TMOD,#21H ;CON RELOJ DE 11.059
;SE ACTIVA EL T0 EN MODO 1 Y T1 EN MODO 2
MOV TCON,#51H ;INT0 POR TRANSCIENTE
MOV IE,#83H ;SE PERMITE LA INT T0
MOV R7,#70H ;R7R6 CONTADORES DE
LAZ0:
MOV R6,#80H ;28800 DATOS
TIAD:
JNB BANTEM,TIAD ;TIEMPO DE ADQUIS.
CLR BANTEM
;DE 3 seg.
MOVX A,@R0
;COMIENZA LA CONVERSI.
TICONV: JNB BANDER,TICONV ;TIEMPO DE CONVER.
CLR BANDER
INC DPTR
DJNZ R6,TIAD
Transmisin serial
0131 DFEE
0133 C2A8
0135 C2A9
0137
013A
013C
013F
0140
0142
0144
0146
0149
014B
014D
759840
D2AC
900000
E0
7F70
7E80
F599
3099FD
C299
DEF7
DFF3
014F 80BC
0000
Perifricos
DJNZ R7,LAZ0
CLR IE.0 ;DESACTIVA LAS INTERRUP.
CLR IE.1 ;DEL T0 Y INT0
;SE TERMINA LA ADQUISICION DE DATOS Y
;COMIENZA LA TRANSMISION DE DATOS.
MOV SCON,#40H ;MODO1 DE TRANSMISION
SETB IE.4
;SE PERMITE INTERRUPCION
MOV DPTR,#MEMRAM ;DEL PUERTO SERIE
MOVX A,@DPTR ;SE CARGA 1er.DATO
MOV R7,#70H ;SE RECARGAN LOS CONTADS.
LAZ2:
MOV R6,#80H ;CON 28800
LAZ3:
MOV SBUF,A ;SE TRANSMITE EL DATO
ESPTR: JNB SCON.1,ESPTR
CLR SCON.1
DJNZ R6,LAZ3
DJNZ R7,LAZ2
;EL CICLO SE VUELVE A REPETIR INDEFINIDAMENTE
SJMP REPIT
END
Perifricos
la impresora al
En la tabla 1 se puede apreciar las seales caractersticas de la interfase paralelo del tipo
Centronics: Asimismo en la fig. 1 se puede apreciar las seales que se activan en el momento
de la impresin de datos.
Terminal
1
2
3
4
5
6
7
8
9
10
Nombre
Stro
D0
D1
D2
D3
D4
D5
D6
D7
ACKN
Funcin
Pasa de alto a bajo (>.5
s) cuando se activa
Dato 0 del bus de datos
Dato 1 del bus de datos
Dato 2 del bus de datos
Dato 3 del bus de datos
Dato 4 del bus de datos
Dato 5 del bus de datos
Dato 6 del bus de datos
Dato 7 del bus de datos
Pulso de reconocimiento de dato 5
s bajo
Regreso al
men principal
11
Perifricos
BUSY
BUS DE DATOS
31
33pF
19
5V
11.0592Mhz
33pF
18
9
10uF
RESET
12
13
14
15
100k
1
2
3
4
5
6
7
8
1N4148
EA/VP
X1
X2
P0.0
P0.1
P0.2
P0.3
P0.4
P0.5
P0.6
P0.7
RESET
INT0
INT1
T0
T1
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
P2.0
P2.1
P2.2
P2.3
P2.4
P2.5
P2.6
P2.7
RD
WR
PSEN
ALE/P
TXD
RXD
39
38
37
36
35
34
33
32
3
4
7
8
13
14
17
18
21
22
23
24
25
26
27
28
1
11
D0
D1
D2
D3
D4
D5
D6
D7
2
5
6
9
12
15
16
19
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
10
9
8
7
6
5
4
3
25
24
21
23
2
26
27
OC
G
74LS373
17
16
29
30
11
10
VCC
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
20
22
1
11
12
13
15
16
17
18
19
O0
O1
O2
O3
O4
O5
O6
O7
10
9
8
7
6
5
4
3
25
24
21
23
2
26
1
20
22
27
CE
OE
VPP
27256
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
11
12
13
15
16
17
18
19
D0
D1
D2
D3
D4
D5
D6
D7
CE
RD
WR
43256
8031
1
7408
13
25
12
24
11
23
10
22
9
21
8
20
7
19
6
18
5
17
4
16
3
15
2
14
1
SELECT IN
GND
PAPER END
GND
BUSY
GND
ACKN
GND
D7
GND
D6
GND
D5
GND
D4
GND
D3
D2
D1
D0
STROBE
CLK
OC
19
16
15
12
9
6
5
2
Q7
Q6
Q5
Q4
Q3
Q2
Q1
Q0
D7
D6
D5
D4
D3
D2
D1
D0
7
9
10
11
12
13
14
15
11
1
18
17
14
13
8
7
4
3
74LS374
G2B
G2A
G1
C
B
A
5
4
6
3
2
1
A14
A13
A12
74HC138
Size
Date:
Y7
Y6
Y5
Y4
Y3
Y2
Y1
Y0
Sheet
REV
of
Perifricos
;********************************************
;**** PROGRAMA PARA IMPRESIN DE DATOS *****
;**** UTILIZANDO UN CONECTOR PARALELO
*****
;****
TIPO CENTRONICS
*****
;**** UTILIZA CUATRO TERMINALES DE P1
*****
;**** Y UN FIJADOR (74374) COMO PERIFE- *****
;**** RICO DE SALIDA DE DATOS. DIR=C000H*****
;****
P1.0 = SELECTOR
*****
;****
P1.1 = PAPER END (NO HAY PAPEL *****
;****
P1.2 = BUSY (OCUPADO)
*****
;****
P1.3 = STROBE (VALIDACION)
*****
;****
INT0 = ACKNOLEDGE (RECONOCIM) *****
;********************************************
0000
ORG 00H
0000 010B
AJMP IMPRES
0003
ORG 03H
0003 D200
0005 F2
0006 C293
SETB 20H.0
MOVX @R0,A
CLR P1.3
;SE ESTABLECE EL
0008 D293
000A 32
SETB P1.3
RETI
STROBE
;*******************************************
;** ESTE PROGRAMA CONTROLARA LA IMPRESORA **
;** PRIMERO SALTARA 4 LINEAS, DESPUS ES- **
;** CRIBIR "BIENVENIDOS AL SISTEMA 2000 **
;** VOLVER A SALTAR 2 LINEAS DARA UN TAB **
;** Y ESCRIBIRA "ESTA ES UNA PRUEBA DE
**
;** IMPRESIN DE DATOS", VOLVER A SALTAR **
;** 2 LINEAS DARA UN TAB Y ESCRIBIRA "PARA**
;** IMPRIMIR LOS CARACTERES HAY QUE ENVIAR**
;** SU CDIGO ASCII", POR LTIMO SALTAR 2**
;** LNEAS DARA UN TAB Y ESCRIBIRA
**
;** "123456789"
**
;*******************************************
000B 901000
000E 75A0C0
0011 1140
0013 1140
0015 1140
0017 1140
0019 1152
001B 1164
001D 1140
001F 1140
Perifricos
0021 90101C
0024 1152
0026 1164
0028 1140
002A 1140
002C 1152
002E 901044
0031 1164
0033 1140
0035 1140
0037 1152
039 90107F
003C 1164
003E 80FE
MOV DPTR,#PRLE
ACALL HT
ACALL IPRE
ACALL LF
ACALL LF
ACALL HT
MOV DPTR,#SELE
ACALL IPRE
ACALL LF
ACALL LF
ACALL HT
MOV DPTR,#NUMER
ACALL IPRE
TERMIN: SJMP TERMIN
0040
0042
0043
0045
0047
0049
004C
004F
0051
740D
F2
C293
D293
740A
2092FD
3000FD
C200
22
LF:
0052
0054
0055
0057
0059
005B
005E
0061
0063
740D
F2
C293
D293
7409
2092FD
3000FD
C200
22
HT:
0064
0065
0067
0068
006A
006C
E0
6017
F2
C293
D293
3090FD
IPRE:
006F 2091FD
0072 2092FD
0075 3000FD
0078 C200
007A A3
007B E0
007C 70EE
007E 22
007F
OCUP0:
REC0:
OCUP:
REC:
MOV A,#0DH
MOVX @R0,A
CLR P1.3
;SE ESTABLECE EL STROBE
SETB P1.3
MOV A,#0AH
JB P1.2,OCUP0 ;OCUPADA LA IMPRESORA
JNB 20H.0,REC0 ;ESPERA RECONOCIMIENTO
CLR 20H.0
RET
MOV A,#0DH
MOVX @R0,A
CLR P1.3
;SE ESTABLECE EL STROBE
SETB P1.3
MOV A,#09H
JB P1.2,OCUP
;OCUPADA LA IMPRESORA
JNB 20H.0,REC ;ESPERA RECONOCIMIENTO
CLR 20H.0
RET
MOVX A,@DPTR
JZ FIN
CARGA: MOVX @R0,A
CLR P1.3
;SE ESTABLECE EL STROBE
SETB P1.3
ESPLIN: JNB P1.0,ESPLIN ;ESPERA QUE SE PONGA
;EN LINEA LA IMPRESORA
NHPAP:
OCUPA:
RECO:
FIN:
JB P1.1,NHPAP
;NO HAY PAPEL
JB P1.2,OCUPA
;OCUPADA LA IMPRESORA
JNB 20H.0,RECO ;ESPERA RECONOCIMIENTO
CLR 20H.0
INC DPTR
MOVX A,@DPTR
JNZ ESPLIN
RET
1000
1000
101B
101C
103B
1043
1044
1064
107E
107F
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
0000
4249454E
00
45535441
44452044
00
50415241
51554520
00
30
31
32
33
34
35
36
37
38
39
00
Perifricos
ORG 1000H
DB 'BIENVENIDOS AL SISTEMA 2000'
DB 00H
PRLE:
DB 'ESTA ES UNA PRUEBA DE IMPRESIN'
DB 'DE DATOS'
DB 00H
SELE:
DB 'PARA IMPRIMIR LOS CARACTERES HAY'
DB 'QUE ENVIAR SU CDIGO ASCII'
DB 00H
NUMER: DB 30H
DB 31H
DB 32H
DB 33H
DB 34H
DB 35H
DB 36H
DB 37H
DB 38H
DB 39H
DB 00H
END
TABLA: