Hi,
This compiles (to 122 words for a 16F628) but I've got no hardware to try it out, "should" work though ;-)
/Henrik.Code:Diag VAR BYTE[5] ' Array for complete message DTC_High VAR Byte ' Upper byte of message DTC_Low VAR Byte ' Lower byte of message i VAR BYTE ' General purpose 'Get the top two bits of the high byte and shift it down so 'it becomes 0-3. Then convert to the correct character. i = (DTC_High & %11000000) >> 6 ' Temp now 0-3 (borrow Diag[1] for this op) Lookup i, [32,19,18,37], Diag[0] ' Now extract the next four "digits" in the same way. Diag[1] = DTC_High & %00110000 ' Isolate bits 4,5 Diag[1] = Diag[1] >> 4 ' Shift down to bits 0,1 Diag[2] = DTC_High & %00001111 ' Isolate bits 0-3 Diag[3] = DTC_Low & %11110000 ' Isolate upper four bits Diag[3] = Diag[3] >> 4 ' Shift down Diag[4] = DTC_Low & %00001111 ' Isolate lower four bits ' Now, if Diag[0] is 32 we add 48 to it and it becomes 80 which ' is the ASCII code for "U". If Diag[1] is 2 we add 48 to that ' so it becomes 50 which is the ASCII code for "2" and so on. HSEROUT["Error code: "] For i = 0 to 4 HSEROUT[Diag[i] + 48] Next




Bookmarks