Программирование микроконтроллера МКС-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. Таблица  шестнадцатеричных кодов команд  МКС-51.

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:

:100000007E107810740112000A00D3B0D6837520D8

:0F0010004965200EBE15FC02001A08B812FC222A

: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
Программирование микроконтроллера МКС-51