книги / Вычислительная техника и информационные технологии. Цифровые автоматы и микроконтролеры. Руководство к лабораторным работам в системе PROTEUS 7.2 SP6
.pdfSADEN0 |
EQU 0B9H |
SADEN1 |
EQU 0BAH |
SCON1EQU 0C0H
SBUF1 EQU 0C1H
ROMSIZE |
EQU 0C2H |
PMR |
EQU 0C4H |
STATUS |
EQU 0C5H |
TA |
EQU 0C7H |
T2CONEQU 0C8H |
|
T2MOD |
EQU 0C9H |
RCAP2L |
EQU 0CAH |
RCAP2H |
EQU 0CBH |
TL2 |
EQU 0CCH |
TH2 |
EQU 0CDH |
PSW |
EQU 0D0H |
WDCON |
EQU 0D8H |
ACC |
EQU 0E0H |
EIE |
EQU 0E8H |
B |
EQU 0F0H |
EIP |
EQU 0F8H |
;Директива BIT определяет новый символ для
;битовой области, равный данному выражению
;*** Bit equate table
IT0 |
BIT 88H |
IE0 |
BIT 89H |
IT1 |
BIT 8AH |
IE1 |
BIT 8BH |
TR0 |
BIT 8CH |
TF0 |
BIT 8DH |
TR1 |
BIT 8EH |
TF1 |
BIT 8FH |
P1_0 |
BIT 90H |
P1_1 |
BIT 91H |
111
P1_2 |
BIT 92H |
P1_3 |
BIT 93H |
P1_4 |
BIT 94H |
P1_5 |
BIT 95H |
P1_6 |
BIT 96H |
P1_7 |
BIT 97H |
RI |
BIT 98H |
TI |
BIT 99H |
RB8 |
BIT 9AH |
TB8 |
BIT 9BH |
REN |
BIT 9CH |
SM2 |
BIT 9DH |
SM1 |
BIT 9EH |
SM0 |
BIT 9FH |
EX0 |
BIT 0A8H |
ET0 |
BIT 0A9H |
EX1 |
BIT 0AAH |
ET1 |
BIT 0ABH |
ES |
BIT 0ACH |
ET2 |
BIT 0ADH |
ES1 |
BIT 0AEH |
EA |
BIT 0AFH |
P3_0 |
BIT 0B0H |
P3_1 |
BIT 0B1H |
P3_2 |
BIT 0B2H |
P3_3 |
BIT 0B3H |
P3_4 |
BIT 0B4H |
P3_5 |
BIT 0B5H |
P3_6 |
BIT 0B6H |
P3_7 |
BIT 0B7H |
PX0 |
BIT 0B8H |
PT0 |
BIT 0B9H |
PX1 |
BIT 0BAH |
112
PT1 |
BIT 0BBH |
PS |
BIT 0BCH |
PT2 |
BIT 0BDH |
PS1 |
BIT 0BEH |
RI_1 |
IT 0C0H |
TI_1 |
IT 0C1H |
RB8_1 |
IT 0C2H |
TB8_1 |
IT 0C3H |
REN_1 |
IT 0C4H |
SM2_1 |
IT 0C5H |
SM1_1 |
IT 0C6H |
SM0_1 |
IT 0C7H |
C_RL2 IT 0C8H |
|
C_T2 |
BIT 0C9H |
TR2 |
BIT 0CAH |
EXEN2BIT 0CBH |
TCLK BIT 0CCH
RCLK BIT 0CDH
EXF2 |
BIT 0CEH |
TF2 |
BIT 0CFH |
P |
BIT 0D0H |
FL |
BIT 0D1H |
OV |
BIT 0D2H |
RS0 |
BIT 0D3H |
RS1 |
BIT 0D4H |
F0 |
BIT 0D5H |
AC |
BIT 0D6H |
CY |
BIT 0D7H |
RWT |
BIT 0D8H |
EWT |
BIT 0D9H |
WTRF BIT 0DAH |
|
WDIF |
BIT 0DBH |
PFI |
BIT 0DCH |
EPFI |
BIT 0DDH |
|
113 |
POR |
BIT 0DEH |
SMOD_1 |
BIT 0DFH |
EX2 |
BIT 0E8H |
EX3 |
BIT 0E9H |
EX4 |
BIT 0EAH |
EX5 |
BIT 0EBH |
EWDI BIT 0ECH |
|
PX2 |
BIT 0F8H |
PX3 |
BIT 0F9H |
PX4 |
BIT 0FAH |
PX5 |
BIT 0FBH |
PWDI BIT 0FCH
;Далее могут следовать объявления символических
;имен пользователя.
DATA1 EQU 48
DATA2 EQU 120
;...
;Директива ORG n указывает компилятору, что следующую команду
;необходимо поместит по адресу n.
ORG 0
JMP BEGIN ; BEGIN – адресная константа (метка) ; местоположения следующей команды.
ORG 0003H
JMP ISR_ IT0 ; переход на подпрограмму обслуживания ; прерывания от внешнего прерывания.
...
ORG 100
BEGIN: MOV SP,#200 ; перемещение вершины стека в ячейку 200
; ...
114
MOV R0,#DATA1
MOV R1,#DATA2 MOV B,#20
CALL COPYB ; копируем 20 байт, начиная с адреса
DATA1,
;в область, начиная с ячейки DATA2.
;...
COPYB: MOV A,@R0 |
; эта подпрограмма копирует данные |
MOV @R1,A |
;изобласти,накоторуюуказываетR0, |
INC R0 |
; в область, на которую указываетR1, |
INC R1 |
; черезB в подпрограмму передается |
DJNZ B, COPYB ; количество копируемых байт
RET
;...
;директива DB (DW) выделяет память для одного или нескольких байт
;(слов) и помещает в них указанные значения
TXT: DB 0,1,2,3
...
ISR_ IT0: PUSH ACC
...
POP ACC
RETI
...
END |
; директива конца программы |
115
ПРИЛОЖЕНИЕ 3
Формат .HEX
Формат .HEX разработан фирмой Intel и отличается тем, что содержит числа в текстовом представлении – в шестнадцатеричной записи.
:10000000000102030405060708090A0B0C0D0E0F78
:10001000101112131415161700E5905403F9EB494B
:10002000F97A00900000E493F8E859F8E4A39368A3
:10003000A37004E4934AFAE4A393F870ECEA540C36
:10004000FB8AA080D4000000000000000000000037
:080050000000000000000000A8
:00000001FF
После двоеточия идет число байтов в строке 10 – кроме последней и предпоследней везде стоит число 10 (десятичное 16), т.е. в каждой строке будет ровно 16 информационных байтов.
Затем следуют два байта адреса памяти – куда писать (в первой строке 0000, во второй это будет 0010, т.е. предыдущий адрес плюс 16, и т.д.). Наконец, после адреса расположен еще один служебный байт, обозначающий тип данных, который в информационных строках равен 00 (а в последней – 02). Только после этого начинаются собственно байты данных.
Иногда встречается строка:
:02 0000 02 0000 FC
Это означает, что данные в ней представляют сегмент памяти, с которого должна начинаться запись (в данном случае 0000).
Заканчивается hex-файл всегда строкой 00000001FF – значение типа данных 01 означает конец записи, данных больше не ожидается.
116
Самым последним байтом в каждой строке идет контрольная сумма (иначе она называется LRC – Longitudinal Redundancy Check) для всех остальных байтов строки, включая служебные. Алгоритм вычисления LRC очень простой – нужно вычесть из числа 256 значения всех байтов строки (не обращая внимания на перенос) и взять «младший» байт результата. Соответственно, проверка целостности строки еще проще – нужно сложить значения всех байтов (включая контрольную сумму), и «младший» байт результата должен равняться нулю. Так, в первой строке число информационных байтов всего два, оба равны нулю, плюс (в начале) число информационных байтов, равное 2, плюс служебный байт типа данных, равный также 2, итого контрольная сумма всегда равна 256 – 2 – 0 – 0 = 252 = 0FC. В последней строке одни нули, кроме типа данных, равного 1, – соответственно, контрольная сумма равна 256 – 1 = 255 = 0FF. Проверим для предпоследней строки:
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
8 + 80 = 88.
Контрольная сумма 128 + 32 + 8 = 168.
88 + 168 = 256.
Контрольная сумма дополняет до 256. По модулю 256.
117
ПРИЛОЖЕНИЕ 4
Отладка программ
К сожалению, чаще всего с первого раза заданный алгоритм функционирования не выполняется. Это может быть следствием ошибок в написании программы или некорректного задания каких-либо данных.
Для поиска ошибок очень полезным бывает режим отладки, который удобней всего выполнять пошагово.
Для запуска режима отладки необходимо нажать на кнопку паузы на нижней панели задач и выбрать закладку «Отладка»
(рис. П4.1).
Рис. П4.1. Запуск в режиме отладки
Отметьте в меню пункт CPU Registers U1 (рис. П4.2). Появится окно регистров. Нажимая на кнопку «шаг» пле-
ера, производим отладку. Можно также вызвать окно регистров специальных функций (рис. П4.3) и внешнюю память (при ее наличии).
118
Рис. П4.2. Выбор режима отладки регистров
Рис. П4.3. Вызов окна регистров специальных функций
В результате появится окно, изображенное на рис. П4.4.
119
Рис. П4.4. Окно исходного кода
Далее необходимо переходить к непосредственному пошаговому выполнению. Назначение функциональных кнопок:
–Execute F12 – продолжить выполнение программы;
–Step Over F10 – шаг без входа в подпрограмму;
–Step Into F11 – шаг с входом в подпрограмму;
–Step Out Ctrl+F11 – исполнять код до возврата из подпрограммы. Фактически остановка происходит на следующей за RETURN командой. Использовать эту опцию можно, только находясь в подпрограмме.
–Step To Ctrl+F10 – исполнять, пока не будет достигнута
точка останова. Чтобы установить точку останова, необходимо нажать крайнюю правую пиктограмму, в верхней панели окна отладчика
Щелкнув правой кнопкой по окну отладчика, можно изменить его настройки. В появившемся меню есть такие опции:
–GOTO LINE – перейти на линию;
–GOTO ADDRESS – перейти на адрес;
–FIND – найти;
– TOGGLE (SET/CLEAR) BREAK POINT – устано-
вить/очистить точку установки;
–ENABLE ALL BREAK POINT – разрешить все точки остановки;
–DISABLE ALL BREAK POINT – запретить все точки (не
«удалить»);
120