Укрупненная структурная схема алгоритма

Рис. 2. Общий алгоритм работы МПС

Распределение ресурсов МПС

Таблица 2

Порт Внешнее устройство
P0 Шина данных АЦП
P1.2 – P1.6 Питание индикаторов
P2 Выводы индикаторов
P3.5 Бит готовности АЦП
P3.6 Запуск АЦП
P3.0–P3.4 Логические уровни понижения коэффициента деления
RST Кнопка сброса RESET

Подробная структурная схема алгоритма работы системы

На основе укрупнённой структурной схемы алгоритма и распределения ресурсов создадим подробную структурную схему алгоритма. Подробная структурная схема алгоритма представлена на рисунках 3, 4, 5.

Рис.3. Подробная структурная схема алгоритма

 

Рис.4. Подробная структурная схема алгоритма

Рис.5. Подробная структурная схема алгоритма

Алгоритм формирования числа для индикатора

Рис. 5. Подробная структурная схема алгоритма

Программа работы МПС

Метка Мнемоника и операнды Кол-во тактов Комментарии
  NAME Voltmeter V 1.0    
  CSEG AT 0000H   Задание сегмента памяти программ
  ORG 0000H   Задание адреса начала программы
M4: MOV 20H,#64H Сохранения коэффициента деления делителя = 100
M3: MOV A,20H Передача коэффициента деления на делитель
  MOV P3,A
  SETB P3.6 Формирование на входе Start импульса запуска
  CLR P3.6
M1: MOV C,P3.5 Непрерывное опрашивание выхода готовности
  JNC M1
  MOV A,P0 Считывание данных с АЦП в МП
  MOV R0,A
  MOV A,P1
  MOV R1,A
  CJNE R0,#0AH,M2 Сравнение кода АЦП с 10
M6: CJNE R1,#3H,M5 Проверка на переполнение
  CJNE R0,#0E9H,M5
M2: JC M6 Переход на метку при с = 1
  MOV A,20H Уменьшение коэффициента деления делителя в 2 раза
  RR A
  MOV 20H,A
  LJMP M3 Переход на метку М3
M5: JC M6 Переход на метку при с = 1
  MOV B,20H Умножение входного напряжения на коэффициент деления и сохранение в регистрах R6 и R7
  MOV A,R0
  MUL AB
  MOV R5,B
  MOV B,20H
  MOV R7,A
  MOV B,#100 Выделение первой десятичной цифры напряжения и сохранение ее в регистре R2
  MOV A,R6
  DIV AB
  MOV R2,A
  MOV A,B
  ADD A,R7
  MOV B,#10 Выделение второй и третьей десятичной цифр и сохранение их в регистрах R3 и R4
  DIV AB
  MOV R3,A
  MOV R4,B
  MOV P2,R2 Перенос цифры из R2 в порт P2
  SETB P1.2 Установка бита в 1
    Метка     Мнемоника и операнды     Кол-во тактов     Комментарии
  CLR P1.3 Установка бита в 0
  CLR P1.4 Установка бита в 0
  CLR P1.5 Установка бита в 0
  CLR P1.6 Установка бита в 0
Ssi Cjne R2,#00h,a Проверка считанного числа на 0 и формирование управляющего числа для ИНДИКАТОРА
  Mov A,#3Fh  
  Ljmp ind_end Переход на метку ind_end
A Cjne R2,#01h,b Проверка считанного числа на 1 и формирование управляющего числа для ИНДИКАТОРА
  Mov A,#06h  
  Ljmp ind_end Переход на метку ind_end
B Cjne R2,#02h,c Проверка считанного числа на 2 и формирование управляющего числа для ИНДИКАТОРА
  Mov A,#5Ch  
  Ljmp ind_end Переход на метку ind_end
C Cjne R2,#03h,d Проверка считанного числа на 3 и формирование управляющего числа для ИНДИКАТОРА
  Mov A,#4Fh  
  Ljmp ind_end Переход на метку ind_end
D Cjne R2,#04h,e Проверка считанного числа на 4 и формирование управляющего числа для ИНДИКАТОРА
  Mov A,#66h  
  Ljmp ind_end Переход на метку ind_end
E Cjne R2,#05h,f Проверка считанного числа на 5 и формирование управляющего числа для ИНДИКАТОРА
  Mov A,#6Dh  
  Ljmp ind_end Переход на метку ind_end
F Cjne R2,#06h,g Проверка считанного числа на 6 и формирование управляющего числа для ИНДИКАТОРА
  Mov A,#7Dh  
  Ljmp ind_end Переход на метку ind_end
G Cjne R2,#07h,h Проверка считанного числа на 7 и формирование управляющего числа для ИНДИКАТОРА
  Mov A,#07h  
  Ljmp ind_end Переход на метку ind_end
H Cjne R2,#08h,i Проверка считанного числа на 8 и формирование управляющего числа для ИНДИКАТОРА
  Mov A,#7Fh  
  Ljmp ind_end Переход на метку ind_end
I Cjne R2,#09h,i Проверка считанного числа на 9 и формирование управляющего числа для ИНДИКАТОРА
  Mov A,#6Fh  
ind_end      
  MOV P2,R3 Перенос цифры из R3 в порт P2
  CLR P1.2 Установка бита в 0
  SETB P1.3 Установка бита в 1
  CLR P1.4 Установка бита в 0
  CLR P1.5 Установка бита в 0
  CLR P1.6 Установка бита в 0
Ssi Cjne R2,#00h,a Проверка считанного числа на 0 и формирование управляющего числа для ИНДИКАТОРА
  Mov A,#3Fh  
  Ljmp ind_end Переход на метку ind_end
A Cjne R3,#01h,b Проверка считанного числа на 1 и формирование управляющего числа для ИНДИКАТОРА
  Mov A,#06h  
  Ljmp ind_end Переход на метку ind_end
B Cjne R3,#02h,c Проверка считанного числа на 2 и формирование управляющего числа для ИНДИКАТОРА
  Mov A,#5Ch  
  Ljmp ind_end Переход на метку ind_end
C Cjne R3,#03h,d Проверка считанного числа на 3 и формирование управляющего числа для ИНДИКАТОРА
  Mov A,#4Fh  
  Ljmp ind_end Переход на метку ind_end
D Cjne R3,#04h,e Проверка считанного числа на 4 и формирование управляющего числа для ИНДИКАТОРА
  Mov A,#66h  
  Ljmp ind_end Переход на метку ind_end
E Cjne R3,#05h,f Проверка считанного числа на 5 и формирование управляющего числа для ИНДИКАТОРА
  Mov A,#6Dh  
  Ljmp ind_end Переход на метку ind_end
F Cjne R3,#06h,g Проверка считанного числа на 6 и формирование управляющего числа для ИНДИКАТОРА
  Mov A,#7Dh  
  Ljmp ind_end Переход на метку ind_end
G Cjne R3,#07h,h Проверка считанного числа на 7 и формирование управляющего числа для ИНДИКАТОРА
  Mov A,#07h  
  Ljmp ind_end Переход на метку ind_end
H Cjne R3,#08h,i Проверка считанного числа на 8 и формирование управляющего числа для ИНДИКАТОРА
  Mov A,#7Fh  
  Ljmp ind_end Переход на метку ind_end
I Cjne R3,#09h,i Проверка считанного числа на 9 и формирование управляющего числа для ИНДИКАТОРА
  Mov A,#6Fh  
ind_end      
  MOV P2,R4 Перенос цифры из R4 в порт P2
  CLR P1.2 Установка бита в 0
  CLR P1.3 Установка бита в 0
  SETB P1.4 Установка бита в 1
  CLR P1.5 Установка бита в 0
  CLR P1.6 Установка бита в 0
Ssi Cjne R4,#00h,a Проверка считанного числа на 0 и формирование управляющего числа для ИНДИКАТОРА
  Mov A,#3Fh  
  Ljmp ind_end Переход на метку ind_end
A Cjne R4,#01h,b Проверка считанного числа на 1 и формирование управляющего числа для ИНДИКАТОРА
  Mov A,#06h  
  Ljmp ind_end Переход на метку ind_end
B Cjne R4,#02h,c Проверка считанного числа на 2 и формирование управляющего числа для ИНДИКАТОРА
  Mov A,#5Ch  
  Ljmp ind_end Переход на метку ind_end
C Cjne R4,#03h,d Проверка считанного числа на 3 и формирование управляющего числа для ИНДИКАТОРА
  Mov A,#4Fh  
  Ljmp ind_end Переход на метку ind_end
D Cjne R4,#04h,e Проверка считанного числа на 4 и формирование управляющего числа для ИНДИКАТОРА
  Mov A,#66h  
  Ljmp ind_end Переход на метку ind_end
E Cjne R4,#05h,f Проверка считанного числа на 5 и формирование управляющего числа для ИНДИКАТОРА
  Mov A,#6Dh  
  Ljmp ind_end Переход на метку ind_end
F Cjne R4,#06h,g Проверка считанного числа на 6 и формирование управляющего числа для ИНДИКАТОРА
  Mov A,#7Dh  
  Ljmp ind_end Переход на метку ind_end
G Cjne R4,#07h,h Проверка считанного числа на 7 и формирование управляющего числа для ИНДИКАТОРА
  Mov A,#07h  
  Ljmp ind_end Переход на метку ind_end
H Cjne R4,#08h,i Проверка считанного числа на 8 и формирование управляющего числа для ИНДИКАТОРА
  Mov A,#7Fh  
  Ljmp ind_end Переход на метку ind_end
I Cjne R4,#09h,i Проверка считанного числа на 9 и формирование управляющего числа для ИНДИКАТОРА
  Mov A,#6Fh  
ind_end      
    Переход на метку М3
M7: LJMP M4 Возврат из подпрограммы
  END    

Наши рекомендации