************ ОПРЕДЕЛЕНИЕ КОНСТАНТ ************
Time0L: EQU 70h ;Младший байт числа -400 в ДК
Time0H: EQU FEh ;Старший байт числа -400 в ДК
Order: EQU 07h ;Число циклов суммирования (общее число слагаемых)
MODE1: EQU 01h ;установка TC0 в режим 1, таймер, НЕ разрешено внешн. упр
Datab1: EQU 06h ;значение коэффициента b1
Datab2: EQU 03h ;значение коэффициента b2
Datab3: EQU 91h ;значение коэффициента b3
Datab4: EQU 0Eh ;значение коэффициента b3
Datab5: EQU 16h ;значение коэффициента b3
Datab6: EQU CBh ;значение коэффициента b3
Datab7: EQU E5h ;значение коэффициента b3
MRBank: EQU 01h ;регистровый банк основной прграммы
RRBank: EQU 18h ;регистровый банк прграммы вычисления отсчёта
Maska1: EQU 7Fh ;маска для получения беззнаковых чисел
Maska2: EQU 00h ;маска для очистки двухбайтового сумматора
Maska3: EQU 00h ;маска для очистки ячеек хранения отсчёта
Shift: EQU 01h ;количество разрядов на которое необходимо сдвинуть результат вычисления
************ ОПРЕДЕЛЕНИЕ НЕПЕРЕМЕЩАЕМЫХ РЕГИСТРОВ ************
IE: REG A8h ;Присвоить имя IE регистру разрешения прерываний (ячейка A8h)
TCON: REG 88h ;Присвоить имя TCON регистру управления таймерами/счетчиками
TMOD: REG 89h ;Присвоить имя TMOD регистру режима таймеров/счетчиков
InPort: REG P0 ;Присвоить имя InPort порту P0
OutPort: REG P1 ;Присвоить имя OutPort порту P1
SP: REG 81h ;Присвоить имя SP указателю стека (ячейка 81h)
PSW: REG D0h ;Присвить имя PSW регистру слова состояния МК
************ ОПРЕДЕЛЕНИЕ НЕПЕРЕМЕЩАЕМЫХ БИТ ************
ET0: REG IE.1 ;Присвоить имя ET0 биту 1 регистра IE
EA: REG IE.7 ;Присвоить имя EA биту 7 регистра IE
ITO: REG TCON.0 ;Присвоить имя IT0 биту 0 регистра TCON
IEO: REG TCON.1 ;Присвоить имя IE0 биту 1 регистра TCON
TR0: REG TCON.4 ;Присвоить имя TR0 биту 4 регистра TCON
RD: REG P3.1 ;Присвоить имя RD биту 0 порта P3
B0: REG P3.0 ;Присвоить имя B0 биту 1 порта P3
CheckBit: REG P3.2 ;Присвоить имя CheckBit биту 2 порта P3
WR: REG P1.0 ;Присвоить имя WR биту 0 порта Р1
SignA: REG E0h.7 ;Присвоить имя SignA (знак регистра А) старшему биту аккумулятора
SignB: REG F0h.7 ;Присвоить имя SignB (знак регистра B) старшему биту регистра В
************ ОПРЕДЕЛЕНИЕ ПЕРЕМЕЩАЕМЫХ РЕГИСТРОВ ************
RSECT ;Секция байт, располагается в DSEG
b1: DS 1 ;Коэффициенты числителя
b2: DS 1 ;
b3: DS 1 ;
b4: DS 1 ;
b5: DS 1 ;
b6: DS 1 ;
b7: DS 1 ;
DS 09h ;
Xn1: DS 1 ;Текущиеотсчеты
Xn2: DS 1 ;
Xn3: DS 1 ;
Xn4: DS 1 ;
Xn5: DS 1 ;
Xn6: DS 1 ;
Xn7: DS 1 ;
Xn8: DS 1 ;
Xn9: DS 1 ;
Xn10: DS 1 ;
Xn11: DS 1 ;
Xn12: DS 1 ;
Xn13: DS 1 ;
ds 01h ;
X1: DS 1 ;Отсчеты соответствующие упрощенному уравнению
X2: DS 1 ;
X3: DS 1 ;
X4: DS 1 ;
X5: DS 1 ;
X6: DS 1 ;
X7: DS 1 ;
DS 09h ;
Yn1 DS 1 ;Выходной отсчет
MainPSW: DS 1 ; Регистр для записи PSW основной программы
RunPSW: DS 1 ; Регистр для записи PSW программы вычисления отчёта
VarA: DS 1 ;Байт для промежуточного хранения аккумулятора
SumH: DS 1 ;Старший байт суммы
SumL: DS 1 ;Младший байт суммы
AddrSP: DS 1 ;Начало стека
************ ОПРЕДЕЛЕНИЕ ПЕРЕМЕЩАЕМЫХ БИТ ************
SignM: DS 1 ;Регистр для хранения знака произведения
************************* МАКРОСЫ *************************
;---------------------------------------------------------------------------------------------------------------;Определение знака произведения
;Определяет знак произведения двух множителей, представленных в прямом
;коде и расположенных в регистрах А и В. SignM = SignA XOR SignB
;Автор: библиотека
;---------------------------------------------------------------------------------------------------------------SignMUL: MACRO
MOV C, SignA
ANL C, /SignB
MOV SignM, C
MOV C, SignB
ANL C, /SignA
ORL C, SignM
MOV SignM, C
ENDM
;---------------------------------------------------------------------------------------------------------------;Преобразование произведения в дополнительный код
;[B,A](БезЗн)=>
;Автор: библиотека
;---------------------------------------------------------------------------------------------------------------PK_DK_MUL: MACRO
JNB SignM, M1#
CPL A
ADD A, #01h
MOV VarA, A
MOV A, B
CPL A
ADDC A, #00h
MOV B, A
MOV A, VarA
M1#: ENDM
;---------------------------------------------------------------------------------------------------------------;Накапливающийсумматордвухбайтовыхчисел [B,A]+[SumH,SumL]=>[SumH,SumL]
;Автор: библиотека
;---------------------------------------------------------------------------------------------------------------Sum2Byte: MACRO
ADD A, SumL
MOV SumL, A
MOV A, B
ADDC A, SumH
MOV SumH, A
ENDM
;---------------------------------------------------------------------------------------------------------------;Умножение C накоплением двух чивел, адреса которых находятся в регистрах R0 и R1
;текущего регистрового банка
;Автор:библиотека
;---------------------------------------------------------------------------------------------------------------MAC: MACRO
MOV A, @R0
MOV B, @R1
SignMUL
ANL A,#Maska1
ANL B,#Maska1
MUL AB
PK_DK_MUL
Sum2Byte
ENDM
;---------------------------------------------------------------------------------------------------------------;Очистка 2-байтового накопительного сумматора
;Автор: библиотека
;---------------------------------------------------------------------------------------------------------------ClearSum2Byte: MACRO
MOV SumH, #Maska2
MOV SumL, #Maska2
ENDM
;---------------------------------------------------------------------------------------------------------------;Вычисление отсчетов упрощенного уравнения
;Автор: Косс А.В.
;---------------------------------------------------------------------------------------------------------------PrepareData: MACRO
MOv A, Xn1
ADD A, Xn13
MOV X1, A
MOv A, Xn2
ADD A, Xn12
MOV X2, A
MOv A, Xn3
ADD A, Xn11
MOV X3, A
MOv A, Xn4
ADD A, Xn10
MOV X4, A
MOv A, Xn5
ADD A, Xn9
MOV X5, A
MOv A, Xn6
ADD A, Xn8
MOV X6, A
MOV X7, Xn7
ENDM
;---------------------------------------------------------------------------------------------------------------;Вычисление отсчета
;Автор: библиотека
;---------------------------------------------------------------------------------------------------------------ComputeSample: MACRO
ClearSum2Byte
MOV R0, #b1
MOV R1, #X1
MOV R4, #Order
M2# MAC
INC R0
INC R1
DJNZ R4, M2#
ENDM
;---------------------------------------------------------------------------------------------------------------;Подготовка цикла
;Автор: библиотека
;---------------------------------------------------------------------------------------------------------------PrepareCycl: MACRO
MOV Yn1, SumH
MOV Xn13, Xn12
MOV Xn12, Xn11
MOV Xn11, Xn10
MOV Xn10, Xn9
MOV Xn9, Xn8
MOV Xn8, Xn7
MOV Xn7, Xn6
MOV Xn6, Xn5
MOV Xn5, Xn4
MOV Xn4, Xn3
MOV Xn3, Xn2
MOV Xn2, Xn1
MOV Xn1, InPort
ENDM
;---------------------------------------------------------------------------------------------------------------;Инициализация прерываний
;EA=1 - разрешить все прерывания
;ET0=1 - разрешить прерываний TC0
;Автор: КоссА.В.
;---------------------------------------------------------------------------------------------------------------InitInt: MACRO
SETB EA
SETB ET0
ENDM
;---------------------------------------------------------------------------------------------------------------;Перезагрузкатаймера
;Автор: КоссА.В.
;---------------------------------------------------------------------------------------------------------------ReloadTimer: MACRO
CLR TR0
MOV TL0, #Time0L
MOV TH0, #Time0H
SETBTR0
ENDM
;---------------------------------------------------------------------------------------------------------------;Инициализация таймера
;Автор: Косс А.В.
;---------------------------------------------------------------------------------------------------------------InitTimer: MACRO
ANL TMOD,#F0h
ORL TMOD,#MODE1
ENDM
;---------------------------------------------------------------------------------------------------------------;Инициализация стека ;установка вершины стека
;Автор: библиотека
;---------------------------------------------------------------------------------------------------------------
InitSteck: MACRO
MOV SP, #AddrSP
DEC SP
ENDM
;---------------------------------------------------------------------------------------------------------------;Инициализация PSW
;Автор: Косс А.В.
;---------------------------------------------------------------------------------------------------------------InitPSW: MACRO
MOV MainPSW,#MRBank
MOV RunPSW,#RRBank
ENDM
;---------------------------------------------------------------------------------------------------------------;Инициализация коэффициентов
;Автор: Косс А.В.
;---------------------------------------------------------------------------------------------------------------InitCoeff: MACRO
MOV b1, #Datab1
MOV b2, #Datab2
MOV b3, #Datab3
MOV b4, #Datab4
MOV b5, #Datab5
MOV b6, #Datab6
MOV b7, #Datab7
ENDM
;---------------------------------------------------------------------------------------------------------------;Инициализация отсчётов
;Автор: библиотека
;---------------------------------------------------------------------------------------------------------------ClearXn: MACRO
MOV Xn1, #Maska3
MOV Xn2, #Maska3
MOV Xn3, #Maska3
MOV Xn4, #Maska3
MOV Xn5, #Maska3
MOV Xn6, #Maska3
MOV Xn7, #Maska3
MOV Xn8, #Maska3
MOV Xn9, #Maska3
MOV Xn10, #Maska3
MOV Xn11, #Maska3
MOV Xn12, #Maska3
MOV Xn13, #Maska3
ENDM
;---------------------------------------------------------------------------------------------------------------;Основная программа
;Автор: библиотека
;---------------------------------------------------------------------------------------------------------------MainProgramm: MACRO
M3#: SJMP M3#
ENDM
;---------------------------------------------------------------------------------------------------------------;Преобразование данных из дополнительного в прямой код
; InByte(ДК)=> OutByte(ПК)
;Автор: библиотека
;---------------------------------------------------------------------------------------------------------------DK_PK: MACRO InByte, OutByte
MOV A, InByte
JNB SignA, M4#
XRL A, #7Fh
INC A
M4#: MOV OutByte, A
ENDM
;---------------------------------------------------------------------------------------------------------------;Сохранение PSW основной программы и загрузка PSW программы вычисления отчета
;Автор: Косс А.В.
;---------------------------------------------------------------------------------------------------------------SavePSW: MACRO
MOV MainPSW,PSW
MOV PSW,RunPSW
ENDM
;---------------------------------------------------------------------------------------------------------------;Восстановление PSW основной программы
;Автор: Косс А.В.
;---------------------------------------------------------------------------------------------------------------ReloadPSW: MACRO
MOV RunPSW,PSW
MOV PSW,MainPSW
ENDM
;---------------------------------------------------------------------------------------------------------------;Запуск входного внешнего устройства
;Автор: Косс А.В.
;---------------------------------------------------------------------------------------------------------------
RunACP: MACRO
CLR B0
SETB B0
ENDM
;---------------------------------------------------------------------------------------------------------------;Проверка готовности данных входного внешнего устройства
;Автор: Косс А.В.
;---------------------------------------------------------------------------------------------------------------CheckACP: MACRO
M6#: JBCheckBit,M6#
ENDM
;---------------------------------------------------------------------------------------------------------------;Сдвиг результата вычисления на 1 разряд в лево
;Автор: Косс А.В.
;---------------------------------------------------------------------------------------------------------------
ShiftL: MACRO
MOV R7, #Shift
M1#: CLR C
MOV A, SumL
RLC A
MOV SumL, A
MOV A, SumH
RLC A
MOV SumH, A
DJNZ R7, M1#
ENDM
;---------------------------------------------------------------------------------------------------------------;Ввод данных из P0 в Xn1
;Автор: Косс А.В.
;---------------------------------------------------------------------------------------------------------------InputData: MACRO
SETB RD
DK_PK InPort, Xn1
CLR RD
ENDM
;---------------------------------------------------------------------------------------------------------------;Перевод двухбайтового числа (результат вычисления отсчёта) из дополнительного в прямой код
;Автор: Косс А.В.
;---------------------------------------------------------------------------------------------------------------
DK_PK_Rez: MACRO
MOV A,SumH
JNB SignA,M1#
MOV A,SumL
CLR C
SUBB A,#01h
CPL A
MOV SumL,A
MOV A,SumH
SUBB A,#00h
XRL A,#7fh
M1#: MOV SumH,A
ENDM
;---------------------------------------------------------------------------------------------------------------
;Вывод данных
;Автор: Косс А.В.