Основная программа организующая работу микроконтроллера. Подпрограмма обслуживания прерывания от таймера, страница 2

Подпрограмма, выполняющая преобразование двухбайтного двоичного числа в эквивалентное пятиразрядное десятичное число. Подпрограмма взята из книги «Программы для микропроцессоров» А.Л. Гуртовцев, С.В. Гудыменко и переведена на ассемблер  МК51.

Входные параметры: регистры R0,R1.  

Выходные параметры: регистры R4,R5.

Используются: регистры R0, R1, R2, R3 ,R4 ,R5.

HEXBCD:

CLR A;

MOV R4,A;

MOV R5,A;

MOV R3,R1;

MOV R2,R0;

MOV R1,16h; счетчик циклов.;

CYCL: MOV R4,A  сдвиг двоичного числа влево;

RLC A;

MOV R4,A;

MOV A,R5;

RLC A;

MOV R5,A;

MOV A,R4;двоично-десятичное удвоение суммы с учетом переноса.

ADDC A,R4;

DA A;

MOV R4,A;

MOV A,R5;

ADDC A,R5;

DA A;

MOV R5,A;

MOV A,R0;

ADDC A,R0;

DA A;

MOV R0,A;

DJNZ R1,CYCL;проверка конца цикла

MOV A,R0;

RET.

Подпрограмма, выполняющая кодирование двухбайтного десятичного числа в код для отображения на ЖК-дисплее.

 Входные параметры: регистры R4,R5.  

Выходные параметры: ячейки резидентной памяти данных 30h,31h,32h.

Используются: регистры R0, R4 ,R5.

PERECOD:

MOV R0,30h; загрузка адреса числа сотен

MOV A,R5;

ANL A,0Fh; перекодировка числа сотен

ORL A,30h;

MOV @R0,A;

MOV A,R4;

SWAP A;

ANL A,0F; перекодировка числа десятков

ORL A,30h;

INC R0;

MOV @R0,A;

MOV A,R4;

ANL A,0F; перекодировка числа единиц.

ORL A,30h;

INC R0;

MOV @R0,A;

RET;

Подпрограмма, выполняющая  отображение на ЖК-дисплее показаний первого канала.

 Входные параметры: регистры ячейки внешней памяти данных 04h,05h, коды надписи выводимой на дисплей («Разность давлений »)в ячейках ВПК 801h-812h.

Выходные параметры: показания на ЖК-дисплее.

Используются: регистры R0, R1,R2,R4 ,R5,R6,R7.

OUTPUT1:

SETB P1.3           ;подключение внешней памяти данных

CLR P1.4             ;

MOVX A,#04h    ;загрузка последнего измерения первого канала

MOVX R0,@A   ;разность давлений

INC A                   ;

MOVX R1@,A    ;

ACALL HEXBCD;перекодировка

ACALL PERECODE;

SETB P1.4           ;подключение PIO

CLR P1.3             ;

MOV R6,#O6h    ;режим инструкции

MOV A,#80h       ;

MOV R0,#02h     ;адрес стартового знакоместа

ORL A,R0;

MOV R7,A          ;

ACALL WRT      ;

ACALL BUSY    ;

MOV R6,#07       ;режим «Данные»

MOV DPTR,#0801h;загрузка начального адреса надписи

MOV R2,#11;установка счетчика байт

LBL1: MOV A,@DPTR;запись

MOV R7,A          ;очередного кода символа

ACALL WRT      ;в ОЗУ дисплея.

INC DPTR           ;

DJNZ R2,LBL1   ;конец массива

MOV R2,#03h     ;установка счетчика байт

MOV R0,#30h     ;загрузка начального адреса значения разности давления

MOV A,@R0       ;

MOV R7,A          ;

ACALL WRT      ;

INC R0                 ;

DJNZ R2,LBL2   ;конец цикла?

SETB P1.3           ;отключить PIO

RET                      ;

Подпрограмма, выполняющая  отображение на ЖК-дисплее показаний второго канала.

 Входные параметры: регистры ячейки внешней памяти данных 06h,07h, коды надписи выводимой на дисплей («Давление в магистрали :»)в ячейках ВПК 81D-838h.

Выходные параметры: показания на ЖК-дисплее.

Используются: регистры R0, R1,R2,R4 ,R5,R6,R7.

OUTPUT2:

SETB P1.3           ;подключение внешней памяти данных

CLR P1.4             ;

MOVX A,#06h    ;загрузка последнего измерения первого канала

MOVX R0,@A    ;

INC A                   ;

MOVX R1,A        ;

ACALL HEXBCD;перекодировка

ACALL PERECODE;

SETB P1.4           ;подключение PIO

CLR P1.3             ;

MOV R6,#O6h    ;режим инструкции

MOV A,#80h       ;

MOV R0,#02h     ;адрес стартового знакоместа

ORL A,R0;

MOV R7,A          ;

ACALL WRT      ;

ACALL BUSY    ;

MOV R6,#07       ;режим «Данные»

MOV DPTR,#081Dh;загрузка начального адреса надписи

MOV R2,#1B;установка счетчика байт

LBL1: MOV A,@DPTR;запись

MOV R7,A          ;очередного кода символа

ACALL WRT      ;в ОЗУ дисплея.

INC DPTR           ;