Вторник, Май 26, 2020

Преобразование HEX в ASCII PIC18

;Преобразование HEX в ASCII код из таблицы приведённой ниже.               
               LIST           P=18F1320, F=INHX32
               #INCLUDE       <P18F1320.INC>
               CONFIG         OSC = INTIO2,FSCM = OFF,PWRT = ON,WDT = OFF

               UDATA_ACS
TEMP1          RES            1
TEMP2          RES            1
ASCII_L        RES            1
ASCII_H        RES            1
     
RESET_VECTOR   CODE           0x0000
               GOTO           MAIN
               
MAIN:          MOVLW          0x0F                   ;Функция HEX2ASCII_1 принемает аргумент в WREG=0x0F
               CALL           HEX2ASCII_1            ;На выходе в WREG - 0х46=F-ASCII таблицы
               NOP
               
               MOVLW          0x5C                   ;Загрузка тестовых данных
               MOVWF          ASCII_H
               CALL           HEX2ASCII              ;Преобразование младшего полубайта
               MOVWF          ASCII_L                ;Сохранение его
               MOVFF          ASCII_H,WREG
               SWAPF          WREG                   ;Переворачиваем полубайты
               CALL           HEX2ASCII              ;Преобразование старшего полубайта
               MOVWF          ASCII_H                ;Сохранение его.Теперь в ASCII_H=0x35->5 ASCII_L=0x43->C
               NOP
               
               MOVLW          0xD2
               CALL           HEX2ASC
               NOP

STOP:          BRA            STOP

HEX2ASCII_1:   ADDLW          0x30                   ;Добовляем 0х30
               MOVWF          TEMP1
               MOVLW          0x3A
               MOVWF          TEMP2
               MOVFF          TEMP1,WREG
               CPFSGT         TEMP2                  ;Пропуск для: от 0 до 9
               ADDLW          0x07                   ;Только для 0х3А либо больше
               RETURN
               
HEX2ASCII:     ANDLW          0x0F                   ;Очистка старшего полубайта
               ADDLW          0x30                   ;Преобразование в ASCII код
               DAW
               BTFSC          WREG,6                 ;В WREG 0х40?
               INCF           WREG                   ;Добавим единицу
               RETURN
HEX2ASC:       MOVWF          ASCII_H
               CALL           HEX2ASCII
               MOVWF          ASCII_L
               MOVFF          ASCII_H,WREG
               SWAPF          WREG
               CALL           HEX2ASCII
               MOVWF          ASCII_H
               RETURN
               END

 


 

НАЗАД                                                                                                                                         ДАЛЕЕ


Back to Top