Программирование микроконтроллера МКС-51

Автор работы: k********@yandex.ru, 27 Ноября 2011 в 16:37, курсовая работа

Краткое описание

Таймер в режиме 5 может использоваться для формирования одиночных аппаратно формируемых стробов. Запуск счетчика производится положительным фронтом сигнала GATE. Загрузка счетчика новым значением числа N в процессе счета не влияет на длительность текущего цикла но следующий цикл счета будет соответствовать новому значению N.

Содержимое работы - 1 файл

Курсач.doc

— 598.50 Кб (Скачать файл)
 
код

команды

мнемоника описание МА* байт С АС 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