1
Podstawy techniki
mikroprocesorowej
ETEW006
Architektura wybranych
mikrokontrolerów
Andrzej Stępień
Katedra Metrologii Elektronicznej i Fotonicznej
C51: Typy pamięci
CODE
DATA
IDATA
IDATA
DATA
0
0
7Fh
80h
0FFh
SFR
RAM
rejestry
R
A
M
XDATA
wewn
ę
trzna
pami
ęć
kodu
programu
zewn
ę
trzna
pami
ęć
kodu
programu
zewn
ę
trzna
pami
ęć
danych
wewn
ę
trzna
pami
ęć
danych
0
C51: Adresowanie pamięci RAM i SFR
adresowanie
po
ś
rednie
(
@Ri
)
adresowanie
bezpo
ś
rednie
(
addr
)
adresowanie
rejestrowe (
Rn
)
DATA
IDATA
IDATA
DATA
0
7Fh
80h
0FFh
SFR
RAM
rejestry
R
A
M
segment bitowy
C51: - segment bitowy i pamięć RAM
adresowanie bitu CY
w rejestrze PSW
( adres 0D0h ):
CLR 0D0h.7
CLR 0D7h
CLR PSW.7
CLR C
adresowanie bitu:
CLR 2Dh.3
CLR 6Bh
C51: Rejestry specjalne (SFR)
C51, C515, C517A
Rejestry specjalne (SFR)
C51,
C515,
C517A
2
C51, ST7: CPU Architecture
temp
ALU
A
RBn
ROM
SFR
RAM
SP
PSW
C51
ST72334
PC
B
temp
ALU
A
X
ROM
Periph
RAM
SP
CC
PC
Y
DPTR
internal registers
Register R1 (SP)
Register R4
Register R15
Register R3 (CG2)
ALU + Shifter
Cin
C (Carry)
Z (Zero)
N (Negative)
V (oVerflow)
Temp
Register
Increment logic
Register R0 (PC)
Memory Data
Bus MDB
Memory Address
Bus MAB
Memory Address Register MA
Instruction
Fetch
Register
S
e
q
u
e
n
c
e
r
...........
Register R2 (SR/CG1)
MSP430
CPU Architecture
MSP430
Status Register
SCG
1
SCG
0
OSC
Off
CPU
Off
GIE
N
Z
C
V
RESERVED
+2
+4
+8
+1
most used constant:
R0 - Program Counter PC
R1 - Stack Pointer SP
R2
-
Status Register SR
/ Constant Generator CG1
(+4, +8
)
R3 - Constant Generator CG2 (
0, +1, +2,
−−−−
1
)
R4 .. R15 - User working Registers
MSP430x4xx Family User’s Guide.
Texas Instruments, SLAU056G, 2007, p.4-9
MSP430
Constant Generator
R2
-
Status Register SR
/
Constant Generator CG1
(
+4, +8
)
R3 - Constant Generator CG2
(
0, +1, +2, –1
≡≡≡≡
FFh, FFFFh
):
CLR
*
Clear destination:
MOV
#
0
, dst
; 0
→
dst
*
):
MOV #
0
, dst
CLRC
*
Clear Carry bit:
BIC
#
1
, SR
;
0
→
C
*
):
BIC
#
1
, SR
CLRZ
*
Clear Zero bit:
BIC
#
2
, SR
;
0
→
Z
*
):
BIC
#
2
, SR
SETN
*
Clear Negative bit:
BIS
#
4
, SR
; 1
→
N
*
):
BIS
#
4
, SR
EINT
*
Disable general
BIS
#
8
, SR
; 1
→
GIE
*
):
BIS
#
8
, SR
interrupts:
INV
*
Invert destination:
INV.W dst
;
*
):
XOR #
0FFFFh
, dst
*
) Emulation
MSP430x4xx Family User’s Guide.
Texas Instruments, SLAU056G, 2007, p.4-61 ...
MSP430 —
Core
&
Emulated Instructions
MOV
- move source to destination:
scr
⇒
⇒
⇒
⇒
dst
MOV
⇐
⇐
⇐
⇐
BR
Branch to destination:
MOV Rn, PC
CLR
Clear destination:
MOV #0, dst
NOP
No operation:
MOV #0, #0
POP
Pop word from stack to destination:
MOV @SP+ dst
RET
Return from subroutine:
MOV @SP+, PC
ADD
- add source operand to the destination operand:
scr + dst
⇒
⇒
⇒
⇒
dst
ADD
⇐
⇐
⇐
⇐
INC
Increment destination:
ADD #1, dst
INCD
Double-Increment destination:
ADD #2, dst
RLA
Rotate left arithmetically:
ADD dst, dst
BIC
- clear bits in destination:
.NOT. scr .AND. dst
⇒
⇒
⇒
⇒
dst
BIC
⇐
⇐
⇐
⇐
CLRC
Clear Carry bit:
BIC #1, SR
CLRZ
Clear Zero bit:
BIC #2, SR
CLRN
Clear Negative bit:
BIC #4, SR
DINT
Disable general interrupts:
BIC #8, SR
ARM7: CPU Architecture
PC
(Program
Counter)
User
System
Supervisor
Abort
Undefined Interrupt
Fast
Interrupt
Privileged Modes
Exception Modes
R14_fiq
R13_fiq
R12_fiq
R11_fiq
R10_fiq
R9_fiq
R8_fiq
R14_irq
R13_irq
R14_und
R13_und
R14_abt
R13_abt
R14_svc
R13_svc
CPSR_svc
SPSR_svc
CPSR_abt
SPSR_abt
CPSR_und
SPSR_und
CPSR_irq
SPSR_irq
CPSR_fiq
SPSR _fiq
R0
R1
R2
R3
R4
R5
R6
R7
R8
R9
R10
R11
R12
R13
(Stack Pointer
)
R14
(Link Register)
Current Program
Status Register
CPSR
CPSR
Saved Program
Status Register
3
Multiplexed Bus
(1/2)
Magistrala multipleksowana
(
Multiplexed Bus
)
- najcz
ęś
ciej poł
ą
czenie całej
lub cz
ęś
ci magistrali adresowej i danych; rozdzielenie czasowe oparte jest o
dodatkowy sygnał, np. ALE (
Address Latch Enable
) w rodzinie
C51
:
– ALE = 1 oznacza przesyłanie adresów
– ALE = 0 oznacza przesyłanie danych
Address
Bus
Data
Bus
16 bit
8 bit
Ex-
ter-
nal
Me-
mory
I/O
Non-Multiplexed Address Bus
(16 CPU Lines)
D
7
..D
0
A
15
..A
0
Address
Bus
Data Bus
8 bit
(all Bus)
Multiplexed Address Bus
(9 CPU Lines)
Buffer
Strobe
D
7
..D
0
A
15
..A
8
A
7
..A
0
Multiplexed Bus
(2/2)
Address
Bus
Data
Bus
16 bit
8 bit
Ex-
ter-
nal
Me-
mory
I/O
Address
Bus
Data Bus
8 bit
(all Bus)
Non-Multiplexed Address Bus
(16 CPU Lines)
Multiplexed Address Bus
(9 CPU Lines)
Buffer
Strobe
D
7
..D
0
D
7
..D
0
A
15
..A
0
A
15
..A
8
A
7
..A
0
A
15
..A
8
Port P2
Port P0
A
7
..A
0
Data
A
7
..A
0
ALE
Znaczniki
C, H, V, S, N, Z
(AVR - 1/2)
Rd Rr
bez znaku
C
H
V
N
S
Z
0xFF + 1 = 1111 1111b
255 + 1 = 256 !
0000 0001b
–1 + 1 = 0
C=1
0000 0000b
1
1
0
0
0
1
ze znakiem
R
H
V
C = 1,
Rd
7
=1, Rr
7
=0, R
7
=0
H = 1,
Rd
3
=1, Rr
3
=0, R
3
=0
V = 0,
Rd
7
=1, Rr
7
=0, R
7
=0
N = 0, R
7
=0
S = 0
Z = 1, all R
n
=0
7
Rd
7
R
7
R
7
Rr
7
Rr
7
Rd
C
•
+
•
+
•
=
0
1
4
R
R
2
R
3
R
R
5
R
6
R
7
R
Z
•
•
•
•
•
•
•
=
7
R
N
=
7
7
R
7
Rr
Rd
7
R
7
Rr
7
Rd
V
•
•
+
•
•
=
3
Rd
3
R
3
R
3
Rr
3
Rr
3
Rd
H
•
+
•
+
•
=
V
N
S
⊕
=
C51:
OV = C xor A
7 | 6
P = 0 dla parzystej liczby 1 w Acc
8-bit AVR Instruction Set.
Atmel, Rev. 0856G–AVR–07/08, doc0856, p.15
C51:
OV = C xor A
7 | 6
P = 0 dla parzystej liczby 1 w Acc i C
Znaczniki
C, H, V, S, N, Z
(AVR - 2/2)
Rd Rr
bez znaku
C
H
V
N
S
Z
0x7F + 1 = 0111 1111b
127 + 1 = 128
0000 0001b
+127 + 1 = – 128 !
C=0
1000 0000b
0
1
1
1
0
0
ze znakiem
R
H
V
C = 0,
Rd
7
=0, Rr
7
=0, R
7
=1
H = 1,
Rd
3
=1, Rr
3
=0, R
3
=0
V = 1,
Rd
7
=0, Rr
7
=0, R
7
=1
N = 1, R
7
=1
S = 0
Z = 0,
all R
n
=0
7
Rd
7
R
7
R
7
Rr
7
Rr
7
Rd
C
•
+
•
+
•
=
0
1
4
R
R
2
R
3
R
R
5
R
6
R
7
R
Z
•
•
•
•
•
•
•
=
7
R
N
=
7
7
R
7
Rr
Rd
7
R
7
Rr
7
Rd
V
•
•
+
•
•
=
3
Rd
3
R
3
R
3
Rr
3
Rr
3
Rd
H
•
+
•
+
•
=
V
N
S
⊕
=
C51
Program Status Register
Program Status Word
(PSW) Register:
addr in SFR = 0D0h
Carry flag
Auxiliary Carry flag
General purpose user flag
Register bank select control bits
Overflow flag
Parity flag
CY AC
F0 RS1 RS0
OV
F1
P
UM10344. P89LPC9151/9161/9171 User manual.
NXP Semiconductors, 7 January 2010, Rev. 01
C51
Conditional Branch
Test
Mnemonic
Operation
A = 0
JZ
rel
jump if Acc = 0
A
≠
0
JNZ rel
jump if Acc
≠
0
C = 0
JNC
rel
jump if C = 0
C = 1
JC
rel
jump if C = 1
bit = 0
JNB bit, rel
jump if bit = 0
bit = 1
JB
bit, rel
jump if bit = 1
bit = 1
JBC bit, rel
jump if bit = 1 & clear bit
Carry flag
Auxiliary Carry flag
General purpose
user flag
Register bank select
control bits
Overflow flag
Parity flag
AC
F0
RS
1
CY
F1
P
OV
RS
0
P0
TCON
P1
SCON
P2
IE
P3
PSW
ACC
B
80h
88h
90h
98h
0A0h
0A8h
0B0h
0B8h
IE
0C0h
0C8h
0D0h
0D8h
0E0h
0E8h
0F0h
0F8h
C51 SFR
Bit
addressing
SP
TMOD
SBUF
4
ST7
Condition Code Register
1
1
H
1
N Z C
I
Condition Code
(CC) Register
Carry flag
Half Carry flag
General Interrupt flag
Negative flag
Zero flag
ST7 FAMILY. PROGRAMMING MANUAL.
STMicroelectronics, November 2005, p.30
ST7
Conditional
Branch
xx
Condition
Comment
NC
C = 0
Not Carry
UGE
C = 0
Unsigned Greater or Equal (>=)
C
C = 1
Carry
ULT
C = 1
Unsigned Lower Than (<)
NE
Z = 0
Not Equal
EQ
Z = 1
Equal
UGT
(C
OR
Z) = 0
Unsigned Greater Then (>)
ULE
(C
OR
Z) = 1
Unsigned Lower or Equal (<=)
T
True
(1)
RF
False
(0)
NH
H = 0
Not Half-Carry
RH
H = 1
Half-Carry
IL
Interrupt Line is Low
IH
Interrupt Line is High
NM
I = 0
Not Interrupt Mask
M
I = 1
Interrupt Mask
PL
N = 0
Plus
MI
N = 1
Minus
Test
Mnemonic
Operation
bit = 0
BTJF
dst, #pos
jump if bit is false (0)
bit = 1
BTJT
dst, #pos
jump if bit is true (1)
xx
JRxx
jump if condition is true
1 1
H
1
Z C
I
Carry flag
Half Carry
flag
General Interrupt flag
Negative
flag
Zero flag
N
MSP430
Status Register (R2)
SCG
1
SCG
0
OSC
Off
CPU
Off
GIE
N
Z
C
V
RESERVED
+2
+4
+8
+1
most used constant:
V
Overflow bit
SCG1
System clock generator 1
SCG0
System clock generator 0
OSC Off
Oscillator Off
CPU Off
CPU Off
GIE
General interrupt enable
N
Negative bit
Z
Zero bit
C
Carry bit
for Entering Low-Power
Modes
MSP430x4xx Family. User’s Guide.
Texas Instruments 2007, SLAU056G
N
Z
C
MSP430
Contitional and unconditional Jumps
JMP
; jump
JC / JHS
; jump if carry set / higher or same (
C=1
)
JEQ / JZ
; jump if equal / zero set (
Z=1
)
JGE
; jump if greater or equal (
N .xor. V=0
)
JL
; jump if less (
N .xor. V=1
)
JN
; jump if negative (
N=1
)
JNC / JLO
; jump if carry not set / lower (
C=0
)
JNE / JNZ
; jump if not equal / zero not set (
Z=0
)
jump width 10-bit signed offset
Offset
0
10
OP - Code
15
12
0
1
0
13
S
9 8
OP-Code: operand code field (6 bit)
S: sign (1 bit sign offset)
CPU
Off GIE
N
Z
C
RESERVED
OSC
Off
SCG
0
SCG
1
V
ARM7
Current/Saved Program Status Register
N
Z
C
31 30 29 28
•
27
•
26
•
8
•
•
I
7
6
T
4
M4 M3
3
M2
2
M1
1
M0
0
State bit:
T=1, Thumb state,
16-bit Thumb
instruction set
FIQ (Fast Interrupt Request) disable
IRQ (Interrupt Request) disable
25
•
24
• •
Condition code flags:
Negative or less than
Zero
Carry or borrow or extend
Overflow
V
F
Current / Saved
Program Status Register
access only in Privileged Modes
10000 User
10001 FIQ
10010 IRQ
10011 Supervisor
10111 Abort
11011 Undefined
11111 System
Steve Furber: ARM System-on-chip Architecture. Secon Edition
ARM7
Instruction Set
All ARM instruction can be
conditionally executed
no
overflow
V clear
VC
unsigned
lower
C clear
CC
/
LO
overflow
V set
VS
unsigned
higher or
same
C set
CS
/
HS
signed less
than or equal
Z set,
or
N set and V clear,
or
N clear and V set
(Z == 1 or N != V)
LE
positive or
zero
N clear
PL
not equal
Z clear
NE
signed greater
than
Z clear, and either
N set and V set,
or
N clear & V clear
(Z == 0,N == V)
GT
negative
N set
MI
equal
Z set
EQ
N
Z
C
31 30 29 28
•
•
I
T M4 M3 M2 M1 M0
•
V
F
0
7
ARM Architecture Reference Manual.
ARM DDI 0100E. ARM DDI 0027D,
June 2000, p.A3-6
Status Register
always
AL
signed less
than
N set and V clear,
or
N clear and V set
(N != V)
LT
signed greater
than or equal
N set and V set,
or
N clear and
V clear (N == V)
GE
unsigned lower
or same
C clear or Z set
LS
unsigned
higher
C set and Z clear
HI
5
C390
- Maxim / Dallas Semiconductors
MD2
0D0h
MA
MB
MC
0C8h
0D8h
•
5 registers: MCNT0, MCNT1, MA, MB, MC,
•
on-chip arithmetic accelerator
PSW
MCNT0 MCNT1
DS80C390. Dual CAN High-Speed Microprocessor.
Maxim Integrated Products, 2005, REV: 110905, p.33
Table 2. Arithmetic Accelerator Execution Times
OPERATION
RESULT
EXECUTION
TIME (t
CLCL
)
32-Bit/16-Bit Divide
32-Bit Quotient, 16-Bit Remainder
36
16-Bit/16-Bit Divide
16-Bit Quotient, 16-Bit Remainder
24
16-Bit/16-Bit Multiply
32-Bit Product
24
32-Bit Shift Left/Right
32-Bit Result
36
32-Bit Normalize
32-Bit Mantissa, 5-Bit Exponent
36
C390
- Maxim / Dallas Semiconductors - operacje
kolejno
ść
wykonywania operacji:
pierwszy wpis
do MA lub MB
ostatni wpis
do MA, MB
lub MCNT0
MST=0
pierwszy odczyt
z MA
ostatni odczyt
z MA, MB
lub MCNT0
faza 3
faza 2
faza 1
czas
wpis do rejestrów
obliczenia
odczyt z rejestrów
C390
- Maxim / Dallas Semiconductors - typy operacji
typ
dzielenie
dzielenie
operacji
32 bity / 16 bitów
16 bitów / 16 bitów
36 t
CLCL
24 t
CLCL
pocz
ą
tek
MA
←
←
←
←
dzielna (LSB)
MA
←
←
←
←
dzielna (LSB)
w
MA
←
←
←
←
dzielna (LSB+1)
p
MA
←
←
←
←
dzielna (LSB+2)
i
MA
←
←
←
←
dzielna (MSB)
MA
←
←
←
←
dzielna (MSB)
s
MB
←
←
←
←
dzielnik (LSB)
MB
←
←
←
←
dzielnik (LSB)
koniec
MB
←
←
←
←
dzielnik (MSB)
MB
←
←
←
←
dzielnik (MSB)
pocz
ą
tek o
MA
→
→
→
→
iloraz (MSB)
MA
→
→
→
→
iloraz (MSB)
d
MA
→
→
→
→
iloraz (LSB+2)
c
MA
→
→
→
→
iloraz (LSB+1)
z
MA
→
→
→
→
iloraz (MSB)
MA
→
→
→
→
iloraz (LSB)
y
MB
→
→
→
→
reszta (MSB)
MB
→
→
→
→
reszta (MSB)
koniec
t
MB
→
→
→
→
reszta (LSB)
MB
→
→
→
→
reszta (LSB)
czekaj a
ż
MST=0
C390 - 40-Bit Accumulator
incorporates an
automatic accumulator
function, permitting the
implementation of
multiply-and-accumulate
and
divide-and-accumulate
functions
without any additional delay
each time the
accelerator
is used for a multiply or divide operation,
the result is
transparently added to a 40-bit accumulator
(this can
greatly increase speed of DSP and other high-level math operations)
accumulator
is
initialized
by performing
five writes to
the multiplier
C register
(MC;D5h), LSB first
accumulator
can be
read
by performing
five reads of
the multiplier
C register
, MSB first
DS80C390. Dual CAN High-Speed Microprocessor.
Maxim Integrated Products, 2005, REV: 110905, p.34
Assembler
Assembler
source file
∗
.asm
∗
.a51
Assembler
listing file
∗
.lst
Assembler
object file
∗
.obj
Absolute / Relocatable
object file
Assembler
Compiler
Compiler
source file
∗
.c
∗
.c51
Compiler
listing file
∗
.lst
Compiler
object file
∗
.obj
Absolute / Relocatable
object file
Compiler
Source file
∗
.asm
∗
.a51
∗
.src
on
some
compilers
6
Linker
Compiler
object file
∗
.obj
Absolute / Relocatable object file
Assembler
object file
∗
.obj
Assembler
object file
∗
.obj
Assembler
object file
∗
.obj
Compiler
object file
∗
.obj
Compiler
object file
∗
.obj
Linker
[Converter]
Map file
∗
.map
∗
. m51
Library file
∗
.lib
Absolute file
∗
.
∗
.abs
∗
.hex
Symbol file
∗
.sym
C51
Arytmetyka BCD
korekcja dziesi
ę
tna
Dod_BCD: MOV A, #95h
ADD
A, #85h
DA
A
MOV
R6, A
CLR
A
MOV
Acc.0, C
MOV
R7, A
;
A
←
95h,
95h = 1001 0101b
; A
←
A + 85h,
85h = 1000 0101b
;
C=1
, AC=0, A = 1Ah = 0001 1010b
; A
←
A + 6 poniewa
ż
A
3..0
> 9
;
+6 = 0000 0110b
;
C=1
,
A = 20h = 0010 0000b
; A
←
A + 60h poniewa
ż
C=1
;
+60h = 0110 0000b
;
C=1
,
A = 80h = 1000 0000b
; R6
←
A
; A
←
0
; A
0
←
C,
A = 0000 0001b
; R7
←
A
Doda
ć
dwie liczby zapisane w
kodzie BCD: 95h i 85h.
Wynik dodawania w rejestrach:
R7 (01h) i R6 (80h).
C51
Arytmetyka BCD
DEC_8
DEC-rementacja 8-bitowej zmiennej zapisanej w kodzie BCD,
np. 00
−
1 = 99
DEC_arg8:
MOV A, Arg8
; (Arg8) = 0
BCD
= 0000 0000b
ADD A, #99h
;
99h = 1001 1001b
;
A = 1001 1001b, AC = 0, A
3
.. A
0
≤
9
;
C = 0,
A
7
.. A
4
≤
9
;
przy odejmowaniu: przekroczenie
;
zakresu liczb BCD (0 . 99)
DA
A
; brak korekcji
MOV Arg8, A
;
(Arg8)
←
←
←
←
99
MSP430
DADD scr, dst
The source operand and the destination operand are treated as four binary
coded decimals (BCD) with positive signs. The source operand and the carry
C are added decimally to the destination operand:
scr + dst + C
⇒
⇒
⇒
⇒
dst |
decimally
The result is not defined for non-BCD numbers
Status bits:
N=MSB
Z=1 if result is zero
C=1 if the result > 9999 |
WORD
or 99 |
BYTE
V=undefined
Example:
The 8-digit-BCD number contained in R4 and R5 is added decimally to a 8-
digit_BCD number contained in R6 and R7 (R4 and R6 contain the MSDs)
CLRC
; C=0
DADD
R5, R7
; (R5 + C + R7)
BCD
⇒
R7, add LSDs
DADD
R4, R6
; (R4 + C + R6)
BCD
⇒
R6, add MSDs with carry
JC
Overflow
; if carry occurs go to error handling routine
Kod ASCII
(American Standard Code for Information Interchange)
:
• 7-bitowy kod konwersji cyfr, liter, znaków interpunkcyjnych i
kodów steruj
ą
cych;
• 8-bitowy rozszerzony kod ASCII zawieraj
ą
cy znaki narodowe
@
A
F
G
Y
Z
[
^
_
64
65
70
71
89
90
91
94
95
znak
ASCII
40h
41h
46h
47h
59h
5Ah
5Bh
5Eh
5Fh
`
a
f
g
y
z
{
~
DEL
96
97
102
103
121
122
123
126
127
znak
ASCII
60h
61h
66h
67h
79h
7Ah
7Bh
7Eh
7Fh
+20h
–20h
LF
CR
space
!
/
0
1
9
:
10
13
32
33
47
48
49
57
58
znak
ASCII
0Ah
0Dh
20h
21h
2Fh
30h
31h
39h
3Ah
30h+
Kod ASCII
Przedstawi
ć
zawarto
ść
rejestru R7 w postaci znaków w kodzie ASCII
‘A’ = 41h
Addr + 1
‘1’ = 31h
R0
= Addr
1A h
R7
R0
IDATA
RAM
pozostawienie 4 mniej znacz
ą
cych bitów
dodanie 30 h
wynik > 39 h
NIE
cyfry
dodanie 7
TAK
litery
koniec
przesłanie wyniku do RAM
Zamiana Hex
→
→
→
→
ASCII
7
MOV
R0, #Addr
; R0 adresuje pami
ęć
wyników
MOV
A, R7
; A
←
R7
SWAP A
; A
7..4
⇔
A
3..0
CALL Hex_ASCII
; wywołanie podprogramu zamiany
MOV
A, R7
; A
←
R7
CALL Hex_ASCII
; wywołanie podprogramu zamiany
..............................
Hex_ASCII:
; podprogram zamiany
ANL
A, #0Fh
; wydzielenie 4 mniej znacz
ą
cych bitów
ADD
A, #30h
; A
←
A + 30h
CJNE A, #39h+1, Hex_ASCII_1 ; je
ś
li A = 30h .. 39h (cyfry) to C = 1
Hex_ASCII_1:
; je
ś
li A > 39h (litery) to C = 0
JC
Hex_ASCII_2
ADD
A, #7
; korekcja 7 znaków : ; < = > ? @
Hex_ASCII_2:
MOV
@R0, A
; przesłanie wyniku do pami
ę
ci RAM
INC
R0
; przygotowanie do kolejnego przesłania
RET
; koniec podprogramu
C51: Hex
→
→
→
→
ASCII - obliczenia
C51
pobieranie danych z pamięci kodu
wart_1
Addr_2 = Addr_1 + A
Addr_1 = DPTR
0000h
CODE
MOV
DPTR, #data_16
; DPTR
←
data_16
MOVC A,
@A+DPTR
@A+PC
; A
←
(A + DPTR)
CODE
; A
←
(A + PC)
CODE
; A jest 8-bitow
ą
liczb
ą
; liczb
ą
całkowit
ą
bez znaku
; PC wskazuje adres
; pierwszego bajtu nast
ę
pnej
; instrukcji
MOV
R0, #Addr
; R0 adresuje pami
ęć
wyników
MOV
DPTR, #Tab_ASCII
; DPTR adresuje tablic
ę
kodów ASCII
MOV
A, R7
; A
←
R7
SWAP A
; A
7..4
⇔
A
3..0
CALL Hex_ASCII_Tab
; wywołanie podprogramu zamiany
MOV
A, R7
; A
←
R7
CALL Hex_ASCII_Tab
; wywołanie podprogramu zamiany
..............................
Hex_ASCII_Tab:
; podprogram zamiany
ANL
A, #0Fh
; wydzielenie 4 mniej znacz
ą
cych bitów
MOVC A, @A+DPTR
; pobranie kodu ASCII z tablicy kodów
MOV
@R0, A
; przesłanie wyniku do pami
ę
ci RAM
INC
R0
; przygotowanie do kolejnego przesłania
RET
; koniec podprogramu
Tab_ASCII:
DB
30h, 31h, 32h, 33h, 34h, 35h, 36h, 37h, 38h, 39h ; cyfry
DB
41h, 42h, 43h, 44h, 45h, 46h
; litery
C51
Hex
→
→
→
→
ASCII - tablica
(1/2)
MOV
R0, #Addr
; R0 adresuje pami
ęć
wyników
MOV
DPTR, #Tab_ASCII
; DPTR adresuje tablic
ę
kodów ASCII
MOV
A, R7
; A
←
R7
SWAP A
; A
7..4
⇔
A
3..0
CALL Hex_ASCII_Tab
; wywołanie podprogramu zamiany
MOV
A, R7
; A
←
R7
CALL Hex_ASCII_Tab
; wywołanie podprogramu zamiany
..............................
Hex_ASCII_Tab:
; podprogram zamiany
ANL
A, #0Fh
; wydzielenie 4 mniej znacz
ą
cych bitów
MOVC A, @A+DPTR
; pobranie kodu ASCII z tablicy kodów
MOV
@R0, A
; przesłanie wyniku do pami
ę
ci RAM
INC
R0
; przygotowanie do kolejnego przesłania
RET
; koniec podprogramu
Tab_ASCII:
DB
‘0123456789’
; cyfry
DB
‘ABCDEF’
; litery
C51
Hex
→
→
→
→
ASCII - tablica
(2/2)
rozmieszczenie segmentów
we wska
ź
niku 7-segmentowym
i sterowania segmentów w bajcie:
a
h
b
c
d
e
f
g
h g f e
d c b a
wł
ą
czenie cyfry 3
wymaga wpisania
warto
ś
ci 4Fh:
0 1 0 0
1 1 1 1
a
h
b
c
d
e
f
g
Problem jak przedstawi
ć
zawarto
ść
rejestru R7 w postaci znaków
w kodzie 7-segmentowym ?
C51
Hex
→
→
→
→
7-segment - tablica
(1/2)
MOV
R0, #Addr
; R0 adresuje pami
ęć
wyników
MOV
DPTR, #Tab_ 7_Segment ; DPTR adresuje tablic
ę
kodów
MOV
A, R7
; A
←
R7
SWAP A
; A
7..4
⇔
A
3..0
CALL
Hex_7_Segment_Tab
; wywołanie podprogramu zamiany
MOV
A, R7
; A
←
R7
CALL
Hex_7_Segment_Tab
; wywołanie podprogramu zamiany
..............................
Hex_7_Segment_Tab:
; podprogram zamiany
ANL
A, #0Fh
; wydzielenie 4 mniej znacz
ą
cych bitów
MOVC A, @A+DPTR
; pobranie nowego kodu z tablicy kodów
MOV
@R0, A
; przesłanie wyniku do pami
ę
ci RAM
INC
R0
; przygotowanie do kolejnego przesłania
RET
; koniec podprogramu
Tab_7_Segment:
DB
3Fh, 06h, 5Bh, 4Fh, 66h, 6Dh, 7Dh, 07h, 7Fh, 6Fh
; cyfry
DB
77h, 7Ch, 39h, 5Eh, 79h, 71h
; litery
C51
Hex
→
→
→
→
7-segment - tablica
(2/2)