4. АЛГОРИТМЫ РАБОТЫ И ТЕКСТЫ ПРОГРАММ.
Основная программа.
|
|
Рис.4.1. Блок-схема основной программы.
Подпрограммы.
Рис.4.2. Блок-схема процедуры опроса датчиков.
Рис.4.3. Блок-схема процедуры обслуживания прерываний от т/с1.
Рис.4.4. Блок-схема процедуры перевода из двоичной системы в двоично-десятичную
Рис.4.5. Блок-схема п/п организации временных интервалов по 50 mс.
; основная программа
STACTOP : EQU 60H ;адрес вершины стека
IND(1¸7) : EQU 50H¸56H ; ячейки ПД хранящие информацию
; выводимую на индикаторы HG(1¸7)
TC1: EQU 45H ; ячейка хранения младшего байта
; среднего значения оборотов
; в промежуточных вычислениях
TC2: EQU 46H ; ячейка хранения ст.б. среднего значения
; оборотов в промежуточных вычислениях
PROM: EQU 42H ; ячейка хранения
; промежуточных вычислений
nTAB_COD: EQU 50H ; адрес начала таблицы перекодировки
; в семисегментный код
COUNT: EQU 41H ; счетчик 50 милисекундных циклов
MOV SP,#STACKTOP ;указатель стека
SETB EA ;снятие блокировки прерываний
SETB ET0 ;разрешение прерываний от т/с 0
CALL INIT ;п/п инициализация дисплея
MOV R1,#00H ;
MOV R2,#00H ;
MOV COUNT,#00H ;счетчик 50 ms циклов
MOV PROM,#00H ;
CALL TAIM ;п/п опроса датчиков каждые 20 сек
WAIT: JNB R2.1,WAIT ;ожидание цикла опроса датчиков
MOV IND1,#39H ;код буквы “с”
MOV R4,#01H ;номер первого датчика
MOV A,R1 ;
SUBB A,#11H ;(A)ßA-16 , где 16-кол-во датчиков
MOV R0,A ;начальный адрес записи последнего
;пакета данных
MOV R5,R0 ;
MET: MOV DPTR,nTAB_COD ;адрес начала таблицы перекодировки
;в сс-код
MOV A,R4 ;(A)ßномер датчика
CALL BIN_BCD ;
MOV A,R7 ;(A)ß десятки
MOVC A,@A+DPTR ;
MOV IND2,A ;
MOV A,B ;(В)ß единицы
MOVC A,@A+DPTR ;
MOV IND3,A ;
MOV IND4,#00H ; сс-код гашения IND4
MOV A,@R0 ;
CALL BIN_BCD ;
CALL OBMEN ;п/п заполнения ячеек IND5,6,7
CALL DISPL ;п/п вывода на дисплей
CALL DEL3 ;п/п задержки на 3 сек
INC R4 ;номер следующего датчика
INC R0 ;адрес хранения данных этого датчика
CJNE R4,#11H,ME ;переход если датчик не последний
MOV R4,#11 ;R4ß кол-во датчиков
MOV TC1,#00H ;обнуление ячеек хранения
MOV TC2,#00H ;суммарного расхода
MOV R0,R5 ;
MOV DPTR,nTAB_COD ;
MET2: MOV A,@R0 ;
ADD A,TC1 ;
MOV TC1,A ;
CLR A ;
ADDC A,TC2 ;
INR R0 ;
DJNZ R4,MET2 ;
MOV R4,#04H ;
MOV IND1,#39H ;код “с”
MOV IND2,#73H ;код “р”
MOV IND3,#00H ;код гашения
MOV IND4,#3FH ;код нуля
MET3: CLR C ;определение
ADD A,TC2 ;общего
RRC A ;расхода
MOV TC2,A ;т.е.
MOV A,TC1 ;деление
RRC A ;содержимого
MOV TC1,A ;ячеек ТС1,ТС2
DJNZ R4,MET3 ;на 16
MOV A,ТС1 ;(А)ß результат деления
CALL BIN_BCD ;вывод
CALL OBMEN ;общего расхода
CALL DISPL ;на дисплей
CALL DEL3 ;
CLR R2.1 ;запрет индикации до оканчания
;опроса текущего цикла
JMP WAIT ;переход для индикации последних
;данных от датчиков
;п/п задержки на 20ms
ORG 0180H
DEL20: MOV R1,#2A ;
LOOP2: MOV R2,#EC ;
LOOP1: DJNZ R2,LOOP1 ;
DJNZ R1,LOOP2 ;
NOP ;
NOP ;
RET ;
;п/п отсчета временных промежутков по 50ms
;входные параметры:COUNT - счетчик 50 милисекундных циклов
ORG 0190H
TAIM : MOV TMOD,#20H ;выбор т/с 0 на режим 2
MOV TH0,#3CH ;загрузка
MOV TL0,#AFH ;таймера
SETB TR0 ;запуск т/с 0
RET ;
;п/п обслуживания прерывания от т/с 1
ORG 001BH
T1_PR: INC COUNT ;счетчик времени
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.