;Преобразование 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
НАЗАД ДАЛЕЕ