CALL OUTPUT ; передача байта
INC R0
DJNZ R7, LOOP ; цикл передачи
RET
RS: ORG 0000H; ; основная программа
JMP VZVESTAR
ORG 0003H ; вектор прерывания по INT
CALL TRANSMIT
RET I
ORG 0050H
MOV SP, #70H ; опред. стек.
CLR P 1.0 ; вывод сигнала DTR
SETB EX0 ; разрешение прерывания по INT0
SETB EA ; общее разрешение прер.
CLR EX0 ; запретить прерывание по INT
DJNZ R2, M1
JMP M2
; Подпрограмма взвешивания
; выходные параметры по адресам внутренней памяти данных в данной программе
20H – младший байт первого датчика
21H – старший байт первого датчика
22H – младший байт второго датчика
23H – старший байт второго датчика
24H – младший байт третьего датчика
25H – старший байт третьего датчика
26H– младший байт четвертого датчика
27H– старший байт четвертого датчика
28H– младший байт пятого датчика
29Н– старший байт пятого датчика
VZVESH: CLR P1.0; включение SA1
CALL VVOD
SETB P1.4; включение SA2
CALL VVOD
MOV A, # 10H
MOV P1, A; включение SA3
CALL VVOD
RET
; Подпрограмма ввода данных
; входной параметр
R0 – адрес младшего байта результата работы подпрограммы
VVOD: SETB P1.0
NOP
NOP
CLR P1.1; запуск АЦП
M1: IN A, P1
RRC
JNC M1
SETB P1.1; подключение регистра ввода мл. б. из АЦП
MOVX A, @R1
MOV @R0, A
INC R0
MOV A, # 10H
MOV P1, A; подключение регистра ввода ст. б. из АЦП
MOVX A, @R1
MOV @R0, A
INC R0
CLR P1.0
RET
; Подпрограмма суммирования трех двухбайтных чисел расположенных в памяти подряд
; входные параметры
R0 – адрес младшего байта первого числа
R1 – адрес старшего байта первого числа
; выходные параметры
R0 – адрес младшего байта
R1 – адрес старшего байта
SUM: MOV A, @R0
INC R0
INC R0
ADD A, @R0
MOV @R0, A
MOV A, @R1
INC R1
INC R1
ADDC A, @R1
MOV @R1, A
MOV A, @R0
INC R0
INC R0
ADD A, @R0
MOV @R0, A
MOV A, @R1
INC R1
INC R1
ADDC A, @R1
MOV @R1, A
RET
; Подпрограмма деления двухбайтного числа на однобайтное
; входные параметры
R0 – адрес младшего байта первого числа
R1 – адрес старшего байта первого числа
R5 – делитель в дополнительном коде
; выходные параметры
R2– младший байт
R3 – старший байт
DIV: MOV R4, # 02H
MOV R3, # 00H
MOV R2, # 00H
M2: MOV A, @R0
ADD A, R5
MOV @R0, A
JNC M1
MOV A, R2
ADD A, # 01H
MOV R2, A
JNC M2
INC R3
JMP M2
M1: MOV A, @R1
ADD A, # FFH
MOV @R1, A
JNZ M2
MOV A, R4
ADD A, # FFH
MOV R4, A
JZ M3
INC @R1
JMP M2
M3: RET
; Подпрограмма умножения двухбайтного числа на 100
; входные параметры
R2– младший байт
R3 – старший байт
; выходные параметры
R0 – младший байт
R1 – средний байт
R5 – старший байт
YM100: MOV A, R2
MOV R0, A
MOV A, R3
MOV R1, A
MOV R4, # 64H; счетчик циклов
CYCLE: MOV A, R0
ADD A, R2
MOV R0, A
MOV A, R1
ADDC A, R3
MOV R1, A
MOV A, R5
ADDC A, # 00H
MOV R5, A
DJNZ R4, CYCLE
RET
; Подпрограмма деления трехбайтного числа на 273
; входные параметры
R0 – младший байт
R1 – средний байт
R5 – старший байт
; выходные параметры
R2– младший байт
R3 – старший байт
DIV2: MOV R2, # 00H
MOV R3, # 00H
MOV R6, # 02H
M3: MOV A, R2
ADD A, # 01H
MOV R2, A
JNC M1
INC R3
M1: MOV A, R0
ADD A, # 0EFH
MOV R0, A
MOV A, R1
ADDC A, # FEH
MOV R1, A
JC M2
MOV A, R5
ADD A, # FFH
MOV R5, A
JZ M3
JMP M4
M3: INC R5
MOV A, R6
ADD A, # FFH
MOV R6, A
JNZ M4
MOV A, R2
ADD A, # FFH
MOV R2, A
JC M2
DEC R3
M2: RET
; Подпрограмма вычисления двоично-десятичного кода
; входные параметры
R0 – адрес младшего байта
R1 – адрес старшего байта
; выходные параметры
R6– тысячи и сотни
R7 – десятки и единицы
BCD: MOV R5, # (NOT(10)+1); делитель
CALL DIV
MOV A, @R0
ADD A, # 0AH; восстановление остатка
MOV R7, A; единицы
MOV A, R2
MOV @R0, A; младший байт
MOV A, R3
MOV @R1, A; старший байт
CALL DIV
MOV A, @R0
ADD A, # 0AH; восстановление остатка
SWAP A
ORL A, R7; десятки и единицы
MOV A, R2
MOV @R0, A
MOV A, R3
MOV @R1, A
CALL DIV
MOV A, @R0
ADD A, # 0AH; восстановление остатка
MOV R6, A; сотни
MOV A, R2
MOV @R0, A
MOV A, R3
MOV @R1, A
CALL DIV
MOV A, @R0
ADD A, # 0AH; восстановление остатка
SWAP A
ORL A, R6; тысячи и сотни
RET
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.