4. Программное обеспечение микроконтроллера.
4.1. Основная программа.
При запуске основной программы происходит инициализация портов:
- INPORT – счетчик числа импульсов;
- OUTPORT1 – первый индикатор;
- OUTPORT2 – второй индикатор;
- OUTPORT3 – третий индикатор;
- OUTPORT4 – четвертый индикатор;
После этого программа производит обнуление порта INPORT и переходит к подпрограмме RASCH - расчета частоты импульсов поступивших на вход микроконтроллера. После выхода из подпрограммы результаты вычислений сохраняются в ячейках памяти: 3000Н – целая часть числа, 3002Н – дробная часть числа. Затем программа переходит к преобразованию результатов вычислений в 2-10 код, а после этого в ВСD – код. ВСD – код храниться в ячейках памяти: 3020Н – 1 разряд целого числа, 3021Н – 2 разряд целого числа, 3022Н – 3 разряд целого числа, 3023Н – 4 разряд целого числа, 3024Н – 1 разряд дробной части числа, 3025Н – 2 разряд дробной части числа и 3026Н – 3 разряд дробной части числа. После преобразования в ВСD – код программа переходит в подпрограмму INDIK, которая производит индикацию измеренной частоты. Затем программа зацикливается и снова производит чтение из порта INPORT.
MVI A,10H |
Инициализация портов |
|
OUT INPORT |
||
M1: |
IN INPORT1 |
Считывание числа импульсов из порта INPORT и сохранение в R(C) |
MVI C,A |
||
LDA 00H |
Обнуление порта INPORT |
|
OUT INPORT |
||
CALL RASCH |
||
SHLD 0230H |
Сохранение результатов вычислений: 3000Н – целая часть числа 3002Н – дробная часть числа |
|
XCHG |
||
SHLD 0030H |
||
LXI B,0030H |
Преобразование целой части числа в 2-10 код |
|
CALL PREOBR |
||
STA 0430H |
||
SHLD 0530H |
||
LXI B,0230H |
Преобразование дробной части числа в 2-10 код |
|
CALL PREOBR |
||
STA 0830H |
||
SHLD 0930H |
||
LDA A,0530H |
Преобразование целой части числа в BCD-код |
|
CALL TRANSCODE2 |
||
STA 2030H |
1 разряд целого числа |
|
LDA A,0530H |
||
CALL TRANSCODE1 |
||
LXI A,2130H |
2 разряд целого числа |
|
LDA A,0630H |
||
CALL TRANSCODE2 |
||
STA 2230H |
3 разряд целого числа |
|
LDA A,0630H |
||
CALL TRANSCODE1 |
||
STA 2330H |
4 разряд целого числа |
|
LDA A,0830H |
Преобразование дробной части числа в BCD-код |
|
CALL TRANSCODE2 |
||
STA 2430H |
2 разряд дробной части числа |
|
LDA A,0830H |
||
CALL TRANSCODE1 |
||
LXI A,2530H |
3 разряд дробной части числа |
|
LDA A,0930H |
||
CALL TRANSCODE2 |
||
LXI A,2630H |
4 разряд дробной части числа |
|
CALL INDIK |
||
JMP M1 |
||
END. |
4.2 Подпрограмма RACH.
Подпрограмма RACH предназначена для вычисления частоты измеряемого сигнала. Расчет производиться по формуле , где fтакт – тактовая частота микропроцессора – F4240H, а Nимп – число импульсов пришедших на счетчик за определенный период времени. Входными параметрами для данной программы являются регистры H,L,D,E – делимое, B,С – делитель, а выходными D,E – частное, H,L – остаток.
RASCH: |
LXI D, 4240H |
Вводим делимое F4240 |
LXI H, 000FH |
||
MOV A,L |
||
SUB C |
||
MOV A,H |
||
SBB B |
||
RNC |
Если переполнение, CY=0 |
|
MVI A,16 |
Счетчик циклов |
|
M: |
DAD H |
Сдвиг влево остатка и частного в H,L,D,E |
PUSH PSW |
Сохранение счетчика переноса |
|
XCHG |
||
DAD H |
||
XCHG |
||
JNC M1 |
||
INX H |
Учет переноса |
|
M1: |
MOV A,L |
Вычитание делителя из остатка |
SUB C |
||
MOV L,A |
||
MOV A,H |
SBB B |
||
MOV H,A |
||
JC M2 |
Проверка знака разности, если разность <0 |
|
POP PSW |
Восстановление счетчика |
|
M3: |
INX D |
Разряд частного =1 |
JMP M4 |
||
M2: |
POP PSW |
Проверка переноса от сдвига остатка, восстановление переноса |
JC M3 |
Если был перенос |
|
DAD B |
Восстановление остатка |
|
M4: |
DCR A |
Проверка конца цикла |
JNZ M |
Зацикливание |
|
STC |
CY=1 |
|
RET |
||
END |
4.3 Подпрограмма TRANSCODE1.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.