Автор работы: k********@yandex.ru, 27 Ноября 2011 в 16:37, курсовая работа
Таймер в режиме 5 может использоваться для формирования одиночных аппаратно формируемых стробов. Запуск счетчика производится положительным фронтом сигнала GATE. Загрузка счетчика новым значением числа N в процессе счета не влияет на длительность текущего цикла но следующий цикл счета будет соответствовать новому значению N.
код
команды |
мнемоника | описание | МА* | байт | С | АС | 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 |
Информация о работе Программирование микроконтроллера МКС-51