Укрупненная структурная схема алгоритма
Рис. 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 |