; COUNTER 90 FF DA MOV DPTR, #0xFFDA ; use unused IAT raw value address for counter E0 MOVX A, @DPTR ; fetch counter FB MOV R3, A ; Counter value is now in R3 04 INC A ; Counter is incremented F0 MOVX @DPTR, A ; and moved back to memory holding location ; DIVISOR FOR 5 75 F0 05 MOV B, #5 ; Divisor for 5 cycles in B EB MOV A, R3 ; Counter value to ACC 84 DIV AB ; Remainder ends up in B C5 F0 XCH A,B ; ACC now has remainder so we can jump based on it in a single instruction 60 01 JZ +1 ; Skip over the return if we're on a multiple of 5. 22 RET ; INIT SERIAL PORT 75 AA FC MOV S0RELL, 0xFC 75 BA 03 MOV S0RELH, 0x3 ; S0REL = 0x3FC -- 125000 baud with SMOD set 75 98 40 MOV S0CON, #0x40 ; Set mode 1, 8bit UART, receive disable, clear RI/TI 43 87 80 ORL PCON, #0x80 ; set SMOD 43 D8 80 ORL ADCON0, #0x80 ; SEND START BYTES FOR 5-CYCLE VALUES 74 5A MOV A, #0x5A F5 99 MOV S0BUF, A ; Send 0x5A, start of sequence 30 99 FD JNB S0CON.1, $ ; Wait on S0CON.TI to be set: transmit has completed C2 99 CLR S0CON.1 ; Clear S0CON.TI 74 A5 MOV A, #0xA5 F5 99 MOV S0BUF, A ; Send 0xA5, start of sequence 30 99 FD JNB S0CON.1, $ ; Wait on S0CON.TI to be set: transmit has completed C2 99 CLR S0CON.1 ; Clear S0CON.TI ; SEND 5-CYCLE VALUES ; N RPM E5 3B MOV A, RAM_3B F5 99 MOV S0BUF, A 30 99 FD JNB S0CON.1, $ C2 99 CLR S0CON.1 ; ZWOUT OUTPUT FIRING ANGLE E5 54 MOV A, RAM_54 F5 99 MOV S0BUF, A 30 99 FD JNB S0CON.1, $ C2 99 CLR S0CON.1 ; DZW_KR KR-Ignition-Corr.Val (?) E5 10 MOV A, RAM_10 F5 99 MOV S0BUF, A 30 99 FD JNB S0CON.1, $ C2 99 CLR S0CON.1 ; DZWUEF DELTA IGNITION ANGLE OVER OUTPUT (?) E5 39 MOV A, RAM_39 F5 99 MOV S0BUF, A 30 99 FD JNB S0CON.1, $ C2 99 CLR S0CON.1 ; DZWDYV Ignition Angle Correction (?) 78 BA MOV R0, #0xBA 86 99 MOV S0BUF, @R0 30 99 FD JNB S0CON.1, $ C2 99 CLR S0CON.1 ; XDWKRS Safety Retardation (?) 90 FA 09 MOVX DPTR, #0xFA09 E0 MOV A, @DPTR F5 99 MOV S0BUF, A 30 99 FD JNB S0CON.1, $ C2 99 CLR S0CON.1 ; TL LOAD E5 40 MOV A, RAM_40 F5 99 MOV S0BUF, A 30 99 FD JNB S0CON.1, $ C2 99 CLR S0CON.1 ; TI INJECTION TIME HOB E5 6E MOV A, RAM_6E F5 99 MOV S0BUF, A 30 99 FD JNB S0CON.1, $ C2 99 CLR S0CON.1 ; TI_L INJECTION TIME LOB E5 6F MOV A, RAM_6F F5 99 MOV S0BUF, A 30 99 FD JNB S0CON.1, $ C2 99 CLR S0CON.1 ; VE_V EXTENSION OF THE INJECTION TIME (?) 78 73 MOV R0, #0x73 86 99 MOV S0BUF, @R0 30 99 FD JNB S0CON.1, $ C2 99 CLR S0CON.1 ; UHLM MAF VOLTAGE E5 4B MOV A, RAM_4B F5 99 MOV S0BUF, A 30 99 FD JNB S0CON.1, $ C2 99 CLR S0CON.1 ; Q16 AIR MASS FLOW 1.6KG/H 78 97 MOV R0, #0x97 86 99 MOV S0BUF, @R0 30 99 FD JNB S0CON.1, $ C2 99 CLR S0CON.1 ; XML_SCATT AIRFLOW IN 4KG/H 90 FB A8 MOV DPTR, #0xFBA8 E0 MOVX A, @DPTR F5 99 MOV S0BUF, A 30 99 FD JNB S0CON.1, $ C2 99 CLR S0CON.1 ; XWDK ABSOLUTE THROTTLE ANGLE 90 F9 22 MOV DPTR, #0xF922 E0 MOVX A, @DPTR F5 99 MOV S0BUF, A 30 99 FD JNB S0CON.1, $ C2 99 CLR S0CON.1 ; TRAILING BYTES FOR 5 CYCLE VALUES 74 A5 MOV A, #0xA5 F5 99 MOV S0BUF, A ; Send 0xA9, end of sequence 30 99 FD JNB S0CON.1, $ ; Wait on S0CON.TI to be set: transmit has completed C2 99 CLR S0CON.1 ; Clear S0CON.TI 74 5A MOV A, #0x5A F5 99 MOV S0BUF, A ; Send 0x54, end of sequence 30 99 FD JNB S0CON.1, $ ; Wait on S0CON.TI to be set: transmit has completed C2 99 CLR S0CON.1 ; Clear S0CON.TI 74 0D MOV A, #0xD F5 99 MOV S0BUF, A ; Send 0xD, end of sequence 30 99 FD JNB S0CON.1, $ ; Wait on S0CON.TI to be set: transmit has completed C2 99 CLR S0CON.1 ; Clear S0CON.TI ; DIVISOR FOR 90 75 F0 5A MOV B #0x5A ; Divisor for 90 cycles EB MOV A, R3 ; Fetch value of counter, still in R3 84 DIV AB ; Divide, remainder in B C5 F0 XCH A,B ; ACC now has remainder 60 01 JZ +1 ; Step over RET if remainder is zero 22 RET ; SEND START BYTES FOR 90-CYCLE VALUES 74 9A MOV A, #0x9A F5 99 MOV S0BUF, A ; Send 0x8A, start of sequence 30 99 FD JNB S0CON.1, $ ; Wait on S0CON.TI to be set: transmit has completed C2 99 CLR S0CON.1 ; Clear S0CON.TI 74 A9 MOV A, #0xA9 F5 99 MOV S0BUF, A ; Send 0xA8, start of sequence 30 99 FD JNB S0CON.1, $ ; Wait on S0CON.TI to be set: transmit has completed C2 99 CLR S0CON.1 ; Clear S0CON.TI ; OUTPUT 90-iteration values ; VMESS SPEED KM/H 78 B7 MOV R0, #0xB7 86 99 MOV S0BUF, @R0 30 99 FD JNB S0CON.1, $ C2 99 CLR S0CON.1 ; TMOT MOTOR TEMP DEG C E5 38 MOV A, RAM_38 F5 99 MOV S0BUF, A 30 99 FD JNB S0CON.1, $ C2 99 CLR S0CON.1 ; FZABG MISFIRE COUNTER 78 BF MOV R0, #0xBF 86 99 MOV S0BUF, @R0 30 99 FD JNB S0CON.1, $ C2 99 CLR S0CON.1 ; XTRA LONG TERM FUEL TRIM - IDLE 90 F8 04 MOV DPTR, #0xF804 E0 MOVX A, @DPTR F5 99 MOV S0BUF, A 30 99 FD JNB S0CON.1, $ C2 99 CLR S0CON.1 ; XFRA LONG TERM FUEL TRIM - PART LOAD 90 F8 00 MOV DPTR, #0xF800 E0 MOVX A, @DPTR F5 99 MOV S0BUF, A 30 99 FD JNB S0CON.1, $ C2 99 CLR S0CON.1 ; TRADTV SHORT TERM FUEL TRIM 78 65 MOV R0, #0x65 86 99 MOV S0BUF, @R0 30 99 FD JNB S0CON.1, $ C2 99 CLR S0CON.1 ; TRAILING BYTES FOR 88-CYCLE VALUES 74 A9 MOV A, #0xA9 F5 99 MOV S0BUF, A ; Send 0xA9, end of sequence 30 99 FD JNB S0CON.1, $ ; Wait on S0CON.TI to be set: transmit has completed C2 99 CLR S0CON.1 ; Clear S0CON.TI 74 9A MOV A, #0x9A F5 99 MOV S0BUF, A ; Send 0x54, end of sequence 30 99 FD JNB S0CON.1, $ ; Wait on S0CON.TI to be set: transmit has completed C2 99 CLR S0CON.1 ; Clear S0CON.TI 74 0D MOV A, #0xD F5 99 MOV S0BUF, A ; Send 0xD, end of sequence 30 99 FD JNB S0CON.1, $ ; Wait on S0CON.TI to be set: transmit has completed C2 99 CLR S0CON.1 ; Clear S0CON.TI 22 RET Bytes: 74 4F 12 29 AE 75 2E 00 90 C9 C9 E4 93 90 FF D9 F0 90 FF AA E5 2E F0 90 FF DA E0 FB 04 F0 75 F0 05 EB 84 C5 F0 60 01 22 75 AA FC 75 BA 03 75 98 40 43 87 80 43 D8 80 74 5A F5 99 30 99 FD C2 99 74 A5 F5 99 30 99 FD C2 99 E5 3B F5 99 30 99 FD C2 99 E5 54 F5 99 30 99 FD C2 99 E5 10 F5 99 30 99 FD C2 99 E5 39 F5 99 30 99 FD C2 99 78 BA 86 99 30 99 FD C2 99 90 FA 09 E0 F5 99 30 99 FD C2 99 E5 40 F5 99 30 99 FD C2 99 E5 6E F5 99 30 99 FD C2 99 E5 6F F5 99 30 99 FD C2 99 78 73 86 99 30 99 FD C2 99 E5 4B F5 99 30 99 FD C2 99 78 97 86 99 30 99 FD C2 99 90 FB A8 E0 F5 99 30 99 FD C2 99 90 F9 22 E0 F5 99 30 99 FD C2 99 74 A5 F5 99 30 99 FD C2 99 74 5A F5 99 30 99 FD C2 99 74 0D F5 99 30 99 FD C2 99 75 F0 5A EB 84 C5 F0 60 01 22 74 9A F5 99 30 99 FD C2 99 74 A9 F5 99 30 99 FD C2 99 78 B7 86 99 30 99 FD C2 99 E5 38 F5 99 30 99 FD C2 99 78 BF 86 99 30 99 FD C2 99 90 F8 04 E0 F5 99 30 99 FD C2 99 90 F8 00 E0 F5 99 30 99 FD C2 99 78 65 86 99 30 99 FD C2 99 74 A9 F5 99 30 99 FD C2 99 74 9A F5 99 30 99 FD C2 99 74 0D F5 99 30 99 FD C2 99 22 (includes minimum neccessary preceeding intake air temperature sensor diag bytes to avoid code and set replacement value)