Программирование микроконтроллера МКС-51
Курсовая работа по дисциплине
«Вычислительные машины,
системы
и сети»
Вариант:
18
1. Система команд и программная модель
Аппаратная
часть модели ядра МКС-51
Программная
модель МК системы
| 7 | . | . | . | . | . | . | 0 | |
| FFH: | Регистр специальных функций (SFR) | |||||||
| . | ||||||||
| . | ||||||||
| 80H: | ||||||||
| 7FH: | ||||||||
| . | ||||||||
| 30H: | ||||||||
| . | ||||||||
| 2FH: | 7F | 7E | 7D | 7C | 7B | 7A | 79 | 78 |
| 2EH: | 77 | 76 | 75 | 74 | 73 | 72 | 71 | 70 |
| . | ||||||||
| . | ||||||||
| . | ||||||||
| 22H: | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 |
| 21H: | 0F | 0E | 0D | 0C | 0B | 0A | 09 | 08 |
| 20H: | 07 | 06 | 05 | 04 | 03 | 02 | 01 | 00 |
| 1FH: | R7
Банк 3
: (*) | |||||||
| . | ||||||||
| 19H: | ||||||||
| 18H: | ||||||||
| 17H: | R7
Банк 2
: (*) | |||||||
| . | ||||||||
| 11H: | ||||||||
| 10H: | ||||||||
| 0FH: | R7
Банк 1
: (*) | |||||||
| . | ||||||||
| 09H: | ||||||||
| 08H: | ||||||||
| 07H: | R7
Банк 0
: (*) | |||||||
| . | ||||||||
| 01H: | ||||||||
| 00H: | ||||||||
Внутренняя память данных
| 7 | . | . | . | . | . | . | 0 | |
| FFFFH: | Внешняя
при EA = 0 | |||||||
| FFFEH: | ||||||||
| . | ||||||||
| . | ||||||||
| . | ||||||||
| . | ||||||||
| . | ||||||||
| 1001H: | ||||||||
| 1000H: | ||||||||
| 0FFFH: | Внутренняя
при EA = 1 | |||||||
| 0FFEH: | ||||||||
| . | ||||||||
| . | ||||||||
| . | ||||||||
| . | ||||||||
| . | ||||||||
| 0001H: | ||||||||
| 0000H: | ||||||||
Память
программ
(*) —
Содержимое Ri может использоваться
как адрес
| 7 | . | . | . | . | . | . | 0 | |
| FFFFH: | DPTR
– 16 бит
DPTR = DPH +
DPL MOVX A, @DPTR MOVX @DPTR, A | |||||||
| FFFEH: | ||||||||
| . | ||||||||
| . | ||||||||
| . | ||||||||
| . | ||||||||
| . | ||||||||
| 1001H: | ||||||||
| 1000H: | ||||||||
| 0FFFH: |
MOVX A, @Ri
MOVX @Ri,
A Ri (R0;R1) Любого банка | |||||||
| 0FFEH: | ||||||||
| . | ||||||||
| . | ||||||||
| . | ||||||||
| . | ||||||||
| . | ||||||||
| 0001H: | ||||||||
| 0000H: | ||||||||
Внешняя
память данных
| 7 | . | . | . | . | . | . | 0 | ||
| FFH: | … | ||||||||
| … | … | ||||||||
| F0H: | F7 | F6 | F5 | F4 | F3 | F2 | F1 | F0 | *B |
| … | … | ||||||||
| E0H: | E7 | E6 | E5 | E4 | E3 | E2 | E1 | E0 | *A |
| … | … | ||||||||
| D0H: | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | *PSW |
| … | … | ||||||||
| B8H: | . | . | . | BC | BB | BA | B9 | B8 | *IP |
| … | … | ||||||||
| B0H: | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 | *P3 |
| … | … | ||||||||
| A8H: | AF | … | … | AC | AB | AA | A9 | A8 | IE |
| … | … | ||||||||
| A7 | A6 | A5 | A4 | A3 | A2 | A1 | A0 | *P2 | |
| … | … | ||||||||
| 99H: | SBUF | ||||||||
| 98H: | 9F | 9E | 9D | 9C | 9B | 9A | 99 | 98 | *SCON |
| … | … | ||||||||
| 90H: | 97 | 96 | 95 | 94 | 93 | 92 | 91 | 90 | *P1 |
| … | … | ||||||||
| 8DH: | TH1 | ||||||||
| 8CH: | TA0 | ||||||||
| 8BH: | TL1 | ||||||||
| 8AH: | TL0 | ||||||||
| 89H: | TMOD | ||||||||
| 88H: | 8F | 8E | 8D | 8C | 8B | 8A | 89 | 88 | *TCON |
| 87H: | PCON | ||||||||
| … | … | ||||||||
| 83H: | DPH | ||||||||
| 82H: | DPL | ||||||||
| 81H: | SP | ||||||||
| 80H: | 87 | 86 | 85 | 84 | 83 | 82 | 81 | 80 | *PO |
Регистр
специальных функций (SFR)
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||||
| D0H: | C | AC | F0 | RS1 | RS0 | OV | - | P | PSW | ||
| RS1 | RS0 | БАНК | Адреса РПД | ||||||||
| 0 | 0 | 0 | 00H - 07H | ||||||||
| 0 | 1 | 1 | 08H – 0FH | ||||||||
| 1 | 0 | 2 | 10H – 17H | ||||||||
| 1 | 1 | 3 | 18H – 1FH | ||||||||
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||||
| 88H: | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 | TCON | ||
| ТАЙМЕР/СЧЕТЧИК 1 | ТАЙМЕР/СЧЕТЧИК 0 | ||||||||||
| 89H: | GATE1 | C/T1 | M1.1 | M1.0 | GATE0 | C/T0 | M0.1 | M0.0 | TMOD | ||
| M1 | M0 | РЕЖИМ | |||||||||
| 0 | 0 | 0 | |||||||||
| 0 | 1 | 1 | |||||||||
| 1 | 0 | 2 | |||||||||
| 1 | 1 | 3 | |||||||||
Назначение
бит регистров PSW, TCON, TMOD
1.2. Таблица
шестнадцатеричных кодов
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | ||
| 0 | NOP | AJMP 0XXH | LJMP
ad 16 |
RR
A |
INC
A |
INC
ad |
INC
@R0 |
INC
@R1 |
INC
R0 |
INC
R1 |
INC
R2 |
INC
R3 |
INC
R4 |
INC
R5 |
INC
R6 |
INC
R7 |
0 |
| 1 | JBC
bit, rel |
ACALL
0XXH |
LCALL
ad 16 |
RRC
A |
DEC
A |
DEC
ad |
DEC
@R0 |
DEC
@R1 |
DEC
R0 |
DEC
R1 |
DEC
R2 |
DEC
R3 |
DEC
R4 |
DEC
R5 |
DEC
R6 |
DEC
R7 |
1 |
| 2 | JB
bit, rel |
AJMP
1XXH |
RET | RL
A |
ADD
A, #d |
ADD
A, ad |
ADD
A, @R0 |
ADD
A, @R1 |
ADD
A, R0 |
ADD
A, R1 |
ADD
A, R2 |
ADD
A, R3 |
ADD
A, R4 |
ADD
A, R5 |
ADD
A, R6 |
ADD
A, R7 |
2 |
| 3 | JNB
bit, rel |
ACALL
1XXH |
RETI | RLC
A |
ADDC
A, #d |
ADDC
A, ad |
ADDC
A, @R0 |
ADDC
A, @R1 |
ADDC
A, R0 |
ADDC
A, R1 |
ADDC
A, R2 |
ADDC
A, R3 |
ADDC
A, R4 |
ADDC
A, R5 |
ADDC
A, R6 |
ADDC
A, R7 |
3 |
| 4 | JC
rel |
AJMP
2XXH |
ORL
ad, A |
ORL
ad, #d |
ORL
A, #d |
ORL
A, ad |
ORL
A, @R0 |
ORL
A, @R1 |
ORL
A, R0 |
ORL
A, R1 |
ORL
A, R2 |
ORL
A, R3 |
ORL
A, R4 |
ORL
A, R5 |
ORL
A, R6 |
ORL
A, R7 |
4 |
| 5 | JNC
bit, rel |
ACALL
2XXH |
ANL
ad, A |
ANL
ad, #d |
ANL
A, #d |
ANL
A, ad |
ANL
A, @R0 |
ANL
A, @R1 |
ANL
A, R0 |
ANL
A, R1 |
ANL
A, R2 |
ANL
A, R3 |
ANL
A, R4 |
ANL
A, R5 |
ANL
A, R6 |
ANL
A, R7 |
5 |
| 6 | JZ
rel |
AJMP
3XXH |
XRL
ad, A |
XRL
ad, #d |
XRL
A, #d |
XRL
A, ad |
XRL
A, @R0 |
XRL
A, @R1 |
XRL
A, R0 |
XRL
A, R1 |
XRL
A, R2 |
XRL
A, R3 |
XRL
A, R4 |
XRL
A, R5 |
XRL
A, R6 |
XRL
A, R7 |
6 |
| 7 | JNZ
rel |
ACALL
3XXH |
ORL
C, bit |
JMP
@A+DPTR |
MOV
A, #d |
MOV
ad, #d |
MOV
@R0, #d |
MOV
@R1, #d |
MOV
R0, #d |
MOV
R1, #d |
MOV
R2, #d |
MOV
R3, #d |
MOV
R4, #d |
MOV
R5, #d |
MOV
R6, #d |
MOV
R7, #d |
7 |
| 8 | SJMP
rel |
AJMP
4XXH |
ANL
C, bit |
MOVC
A, @A+PC |
DIV
AB |
MOV
add, ads |
MOV
ad, @R0 |
MOV
ad, @R1 |
MOV
ad, R0 |
MOV
ad, R1 |
MOV
ad, R2 |
MOV
ad, R3 |
MOV
ad, R4 |
MOV
ad, R5 |
MOV
ad, R6 |
MOV
ad, R7 |
8 |
| 9 | MOV
DPTR,#d16 |
ACALL
4XXH |
MOV
bit, C |
MOVC
A,@A+DPTR |
SUBB
A, #d |
SUBB
A, ad |
SUBB
A, @R0 |
SUBB
A, @R1 |
SUBB
A, R0 |
SUBB
A, R1 |
SUBB
A, R2 |
SUBB
A, R3 |
SUBB
A, R4 |
SUBB
A, R5 |
SUBB
A, R6 |
SUBB
A, R7 |
9 |
| A | ORL
C, /bit |
AJMP
5XXH |
MOV
C, bit |
INC
DPTR |
MUL
AB |
MOV
@R0, ad |
MOV
@R1, ad |
MOV
R0, ad |
MOV
R1, ad |
MOV
R2, ad |
MOV
R3, ad |
MOV
R4, ad |
MOV
R5, ad |
MOV
R6, ad |
MOV
R7, ad |
A | |
| B | ANL
C, /bit |
ACALL
5XXH |
CPL
bit |
CPL
C |
CJNE
A, #d, rel |
CJNE
A, ad, rel |
CJNE
@R0,#d,rel |
CJNE
@R1,#d,rel |
CJNE
R0, #d, rel |
CJNE
R1, #d, rel |
CJNE
R2, #d, rel |
CJNE
R3, #d, rel |
CJNE
R4, #d, rel |
CJNE
R5, #d, rel |
CJNE
R6, #d, rel |
CJNE
R7, #d, rel |
B |
| C | PUSH
ad |
AJMP
6XXH |
CLR
bit |
CLR
C |
SWAP
A |
XCH
A, ad |
XCH
A, @R0 |
XCH
A, @R1 |
XCH
A, R0 |
XCH
A, R1 |
XCH
A, R2 |
XCH
A, R3 |
XCH
A, R4 |
XCH
A, R5 |
XCH
A, R6 |
XCH
A, R7 |
C |
| D | POP
ad |
ACALL
6XXH |
SETB
bit |
SETB
C |
DA
A |
DJNZ
ad, rel |
XCHD
A, @R0 |
XCHD
A, @R1 |
DJNZ
R0, rel |
DJNZ
R1, rel |
DJNZ
R2, rel |
DJNZ
R3, rel |
DJNZ
R4, rel |
DJNZ
R5, rel |
DJNZ
R6, rel |
DJNZ
R7, rel |
D |
| E | MOVX
A,@DPTR |
AJMP
7XXH |
MOVX
A, @R0 |
MOVX
A, @R1 |
CLR
A |
MOV
A, ad |
MOV
A, @R0 |
MOV
A, @R1 |
MOV
A, R0 |
MOV
A, R1 |
MOV
A, R2 |
MOV
A, R3 |
MOV
A, R4 |
MOV
A, R5 |
MOV
A, R6 |
MOV
A, R7 |
E |
| F | MOVX
@DPTR,A |
ACALL
7XXH |
MOVX
@R0, A |
MOVX
@R1, A |
CPL
A |
MOV
ad, A |
MOV
@R0, A |
MOV
@R1, A |
MOV
R0, A |
MOV
R1, A |
MOV
R2, A |
MOV
R3, A |
MOV
R4, A |
MOV
R5, A |
MOV
R6, A |
MOV
R7, A |
F |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
| код
команды |
мнемоника | описание | МА* | байт | С | АС | OV |
| BE | CJNE R6, #d, rel | РА НА | 3 | – | – | – | |
| 12 | LCALL ad 16 | – | 3 | – | – | – | |
| B0 | ANL C, /bit | ПА | 2 | + | – | – | |
| 83 | MOVC A, @A+PC | КА РА | 1 | – | – | – | |
| 08 | INC R0 | РА | 1 | – | – | – | |
| 65 | XRL A, ad | ПА | 2 | – | – | – |
Мнемоники
команд
______________
* МА – метод
адресации (ПА – прямая
Программа,
иллюстрирующая действие
команд
LST:
1 $MOD845 ; директива набора команд для МК 8052
---- 2 CSEG ; сегмент кода
0000 3 ORG 0000H ; указываем, с какого участка кода
4
0000 7E10 5 INI: MOV R6, #10H
0002 7810 6 MOV R0, #10H
0004 7401 7 MOV A, #1H
8
0006 12000A 9 LCALL MAIN
0009 00 10 NOP
11
000A D3 12 MAIN: SETB C
000B B0D6 13 ANL C,/AC
14
000D 83 15 MOVC A, @A+PC
16
000E 752049 17 MOV 20H, #49H
0011 6520 18 XRL A, 20H
19
0013 0E 20 MM: INC R6
0014 BE15FC 21 CJNE R6, #15H, MM
0017 02001A 22 JMP NN
23
001A 08 24 NN: INC R0
001B B812FC 25 CJNE R0, #12H, NN
26
001E 22 27 RET
28 END
VERSION 1.2h ASSEMBLY COMPLETE,
0 ERRORS FOUND
AC . . . . . . . . . . . . . . . B ADDR 00D6H PREDEFINED
INI. . . . . . . . . . . . . . . C ADDR 0000H NOT USED
MAIN . . . . . . . . . . . . . . C ADDR 000AH
MM . . . . . . . . . . . . . . . C ADDR 0013H
NN . . . . . . . . . . . . . .
. C ADDR 001AH
HEX:
:
:
:00000001FF
Комментарии к коду:
Записываем в R6 и R0 числа 10H, в аккумулятор загружаем 1H
5 INI: MOV R6, #10H
6 MOV R0, #10H
7
MOV A, #1H
Вызываем подпрограмму MAIN по адресу 000AH
9
LCALL MAIN
Устанавливаем флаг переноса С в 1.
12 MAIN: SETB C
Если логическое отрицание бита флага полупереноса АС (/АС)равено 0, то происходит сброс флага переноса, в противном случае флаг переноса не изменяет своего текущего значения. Флаг полупереноса АС в значении 0, значит /АС=1. Флаг переноса С не изменяет текущего значения.
13
ANL C,/AC
Записываем в аккумулятор число, находящееся по адресу @(A+PC). При использовании программного счетчика, его содержимое перед суммированием увеличивается на 1.А=01Н, PC=0DH+01H => @(A+PC)=@0FH. В аккумулятор идет число 20.
15 MOVC A, @A+PC
Записываем число 49Н в РПД по адресу 20Н
17
MOV 20H, #49H
Командой XRL осуществляется инверсия тех битов аккумулятора, которые в маске (в РПД по адресу 20Н) заданы единицей.
18 XRL A, 20H
A=20H=01000002; маска=49Н=010010012
00100000 аккумулятор=20Н
01001001 маска=49Н
01101001 инверсия по
маске=69Н – идет в аккумулятор
Строки 20-22 – цикл. Команда INC R6 увеличивает регистр R6 на 1, команда CJNE сравнивает содержимое R6 и число 15Н и если они не равны, выполняет переход на ММ и цикл повторяется, пока R6 не станет равен 15Н. Тогда последует прыжок на метку NN.
20 MM: INC R6
21 CJNE R6, #15H, MM
22 JMP NN
Строки 24-25 – цикл аналогичный предыдущему, но для R0.
24 NN: INC R0
25
CJNE R0, #12H, NN
2.
Операции с кодами
A = 103, B = 77
2.1
Перевод чисел
| А=10310=011001112=67Н 103/27=103/128=0, остаток 103 103/26=103/64=1, остаток 39 39/25=39/32=1, остаток 7 7/24=7/16=0, остаток 7 7/23=7/8=0, остаток 7 7/22=7/4=1, остаток 3 3/21=3/2=1, остаток 1 1/20=1/1=1, остаток
0 103/16=6, остаток 7 |
В=7710=010011012=4DН 77/27=77/128=0, остаток 77 77/26=77/64=1, остаток 13 13/25=13/32=0, остаток 13 13/24=13/16=0, остаток 13 13/23=13/8=1, остаток 5 5/22=5/4=1, остаток 1 1/21=1/2=0, остаток 1 1/20=1/1=1, остаток
0 77/16=4, остаток 13 |
2.2
Сложение и вычитание
А и В
A + В: 0 1 1 0 0 1 1 1 6 7 1 0 3
0 1 0 0 1 1 0 1 4 D 7 7
1 0 1 1 0 1 0 0 B 4 1 8 0
A − В: 0 1 1 0 0 1 1 1 6 7 1 0 3
0 1 0 0 1 1 0 1 4 D 7 7
0 0 0 1 1 0 1 0 1 A 2 6
2.3
Числа А и В
представить в
прямом, дополнительном
и обратном кодах
В двоичной системе:
A > 0: 0 1 1 0 0 1 1 1 - прямой код
0 1 1 0 0 1 1 1 - обратный код
0 1 1 0 0 1 1 1 - дополнительный
код
B > 0: 0 1 0 0 1 1 0 1 - прямой код
0 1 0 0 1 1 0 1 - обратный код
0 1 0 0 1 1 0 1 - дополнительный
код
A < 0: 1 1 1 0 0 1 1 1 - прямой код
1 0 0 1 1 0 0 0 - обратный код
1 0 0 1 1 0 0 1 - дополнительный
код
B < 0: 1 1 0 0 1 1 0 1 - прямой код
1 0 1 1 0 0 1 0 - обратный код
1 0 1 1 0 0 1 1 - дополнительный код
В шестнадцатеричной системе:
A > 0: 6 7 - прямой код
6 7 - обратный код
6 7 - дополнительный
код
B > 0: 4 D - прямой код
4 D - обратный код
4 D - дополнительный
код
A < 0: 6 7 - прямой код
9 8 - обратный код
9 9 - дополнительный
код
B < 0: 4 D - прямой код
B 2 - обратный код
B 3 - дополнительный
код
2.4
Показать последовательность
выполнения действий
и объяснить полученные
результаты для
операции А+В в
дополнительных кодах
А > 0,
B > 0: Результат сложения получается больше
128 (180), следовательно, для выполнения операции
необходимо представить А и В как двухбайтные
числа. В этом случае бит знака станет
пятнадцатым.
Зн 14 13 12 11 10 09 08 | 07 06 05 04 03 02 01 00
0 0 0 0 0 0 0 0 | 0 1 1 0 0 1 1 1
0 0 0 0 0 0 0 0 | 0 1 0 0 1 1 0 1
0 0 0 0 0
0 0 0 | 1 0 1 1 0 1
0 0
101101002 = 18010
А > 0, B < 0: 0 1 1 0 0 1 1 1
1 0 1 1 0 0 1 1
0 0 0 1 1 0 1 0
000110102 = 2610
А < 0, B > 0: 1 0 0 1 1 0 0 1
0 1 0 0 1 1 0 1
1 1 1 0 0 1 1 0 - дополнительный
код отриц. числа
1 1 1 0 0 1 1 0
0 0 0 0 0 0 0 1
1 1 1 0 0 1 0 1 - обратный
код отриц. числа
1 0 0 1 1 0 1 0 - прямой
код отрицательного числа
100110102 = − 2610
А < 0, B < 0: Результат сложения получается больше 128 (180), следовательно, для выполнения операции необходимо представить А и В как двухбайтные числа. В этом случае бит знака станет пятнадцатым.
1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 1
1 1 1 1 1 1 1 1 1 0 1 1 0 0 1 1
1 1 1 1 1 1 1 1 0 1 0 0 1 1 0 0
- дополнительный код отриц. числа
1 1 1 1 1 1 1 1 0 1 0 0 1 1 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 0 1 0 0 1 0 1 1
- обратный код отриц. числа
1 0 0 0 0 0 0 0 1 0 1 1 0 1 0 0
- прямой код отрицательного числа
10000000 101101002 = − 18010
3.
Сложение шестибайтных
чисел без знака
| вариант | 5 байт | 4 байт | 3 байт | 2 байт | 1 байт | 0 байт |
| 18 | BE | 12 | B0 | 83 | 08 | 65 |
| 19 | BF | 80 | B2 | E2 | 0F | 64 |