;******************************************************************** ; Get two characters from serial port and form a hex byte. Also add ; byte to checksum in r1. ;******************************************************************** gethex: lcall inchar ; get first character lcall atoh ; convert to hex swap a ; put in upper nibble mov r0,a ; save it lcall inchar ; get second character lcall atoh ; convert to hex orl a,r0 ; or with first nibble mov r2,a ; save byte add a,r1 ; add byte to checksum mov r1,a ; restore checkum in r1 mov a,r2 ; retrieve byte ret ;******************************************************************** ; Wait until a char is received from the serial port, and return ; that char in the accumulator. ;******************************************************************** inchar: jnb ri,inchar ; wait until ri is set clr ri ; clear interrupt mov a,sbuf ; get character ret ;******************************************************************** ; ASCII to hex - enter with ascii code in acc. (assume hex char 0-F) ; exit with hex nibble in A.0-A.3 ;******************************************************************** atoh: clr acc.7 ; ensure parity bit is off cjne a,#3ah,next ; ?? this just sets carry bit ?? next: jc atoh2 add a,#9 ; no, adjust for range A-F atoh2: anl a,#0fh ; yes, convert directly ret