Я много работаю в KEIL для 51 Пишу на ассемблере, но он понимает и С синтаксис.
Надеюсь директива "pre" сработает
#define SERIALDEBUG - для включения/отключения вывода сообщений
для вывода строк использую такой макрос
; Макрос для вывода отладочных строк через COM
DBGPrint macro Mess
local st, j
#ifdef SERIALDEBUG
push acc
push DPH
push DPL
mov DPTR, #ST
call NextChar
jmp j
st:
db Mess, 0x0D ; признак конца строки
j:
call SendByte
pop DPL
pop DPH
pop acc
#endif
endm
Для вывода байта с коментарием
;---------------------------------
; Макрос для вывода отладочных строк через COM без перевода строки
DBGPrintWithOutCR macro Mess2
local St, j, NextCharWithOutCR
#ifdef SERIALDEBUG
push acc
push DPH
push DPL
mov DPTR, #St
clr a
movc a, @a + DPTR
NextCharWithOutCR:
call SendByte
inc DPTR
clr a
movc a, @a + DPTR
cjne A, #'$', NextCharWithOutCR
jmp j
St:
db Mess2, '$'
j:
pop DPL
pop DPH
pop acc
#endif
endm
;---------------------------------
DBGCommentWithByte macro ST, Byte
#ifdef SERIALDEBUG
push ACC
DBGPrintWithOutCR St ; в начале выведем комментарий
mov a,byte
call SendByteAsHex;
mov a, #0x0D
call SendByte
pop ACC
#endif
endm
;---------------------------------
Ну а байт просто
mov a,byte
call SendByteAsHex;