0% found this document useful (0 votes)
31 views6 pages

M44drivecyclelog Rev1.asm

The document outlines assembly code for a microcontroller that manages various vehicle parameters and logging functionalities. It includes operations for incrementing a counter, handling flag bytes, initializing a serial port, and sending parameter values related to engine performance. The code also incorporates conditional checks for logging and adaptive value retrieval based on specific flags.

Uploaded by

a556913
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
31 views6 pages

M44drivecyclelog Rev1.asm

The document outlines assembly code for a microcontroller that manages various vehicle parameters and logging functionalities. It includes operations for incrementing a counter, handling flag bytes, initializing a serial port, and sending parameter values related to engine performance. The code also incorporates conditional checks for logging and adaptive value retrieval based on specific flags.

Uploaded by

a556913
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 6

; 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

; Get Flagbyte to B register


90 FD AE MOV DPTR, #0xFDAE ; Logging Flagbyte
E0 MOVX A, @DPTR ; Get byte to ACC
F5 F0 MOV B, A ; Move to B

; If B.3 is set, we wanted pre-start OBD-II before this drivecycle. Clear that out
here.
; We also assume no logging this drivecycle -- Stick with OBD-II diags for this
drivecycle.
; Handle this before we bail out if B.0 is not set -- This wouldn't run otherwise.
30 F3 0A JNB B.3 +10 ; Bit is not set, skip this
C2 F3 CLR B.3 ; Clear bit
C2 F0 CLR B.0 ; Ensure B.0 is clear, no logging,
will result in RET below on JB B.0 check
E5 F0 MOV A, B ; Flagbyte to A
90 FD AE MOV DPTR, #0xFDAE ; Logging Flagbyte Mem address
F0 MOVX @DPTR, A ; Update XRAM flagbyte

; If B.0 is unset, we don't want to log. Just bail.


20 F0 01 JB B.0 +1 ; In logging mode: jump over RET
22 RET

; If B.1, the log ack flag, is unset, set it here. This will cause the pre-start
listener to reset the flag byte before the next drivecycle.
20 F1 08 JB B.1 +8 ; Flag is already set, skip this
D2 F1 SETB B.1 ; Set the bit
E5 F0 MOV A, B ; Flagbyte to A
90 FD AE MOV DPTR, #0xFDAE ; Logging Flagbyte
F0 MOVX @DPTR, A ; Update XRAM flagbyte

; DIVISOR FOR 2
75 F0 02 MOV B, #2 ; 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 3.
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 5-CYCLE HEADER BYTES


74 5A MOV A, #0x5A
F5 99 MOV S0BUF, A ; Send 0x55, 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 0xAA, 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

; 0 N RPM
E5 3B MOV A, RAM_3B ; Get Parameter Value
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along

; 1 TL LOAD
E5 40 MOV A, RAM_40 ; Get Parameter Value
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along

; 2 Z_ZYL RAM_11 CURRENT CYLINDER


E5 11 MOV A, RAM_11 ; Get Parameter Value
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along

; 3 ZWOUT OUTPUT FIRING ANGLE


E5 54 MOV A, RAM_54 ; Get Parameter Value
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along

; 4 ZWBEG ZW AFTER CHANGE LIMITATION


E5 55 MOV A, RAM_55 ; Get Parameter Value
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along

; 5 ZWNEU ZW BEFORE CHANGE LIMITATION


E5 5A MOV A, RAM_5A ; Get Parameter Value
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along

; 6 DZW_KR KR-Ignition-Corr.Val (?)


E5 10 MOV A, RAM_10 ; Get Parameter Value
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along

; 7 FALLT ZWISCHENSPEICHER FALLTIEFE


78 9F MOV R0, #0x9F
E6 MOV A, @R0 ; Get Parameter Value
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along

; 8 XFALMIT SUMME DER ZW-SPAETVERSTELLUNGEN


90 FA 84 MOV DPTR, #0xFA84 ; Set DPTR to value
E0 MOV A, @DPTR ; Get value to A
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along

; Knock correction: Get non-adapted values if RAM_2D is not set, otherwise jump
down to getting the adaptive values
20 69 2A JB RAM_2D.1 +42 ; KRFLAG2.1 is set: adaptive values
are used. Skip over non-adaptives at FA30-34 and get the adapted values

;9 XFALT5 FA30
90 FA 30 MOV DPTR, #0xFA30 ; Set DPTR to value
E0 MOV A, @DPTR ; Get value to A
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along

; 10 XFALT3 FA31
90 FA 31 MOV DPTR, #0xFA31 ; Set DPTR to value
E0 MOV A, @DPTR ; Get value to A
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along

; 11 XFALT1 FA32
90 FA 32 MOV DPTR, #0xFA32 ; Set DPTR to value
E0 MOV A, @DPTR ; Get value to A
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along

; 12 XFALT2 FA33
90 FA 33 MOV DPTR, #0xFA33 ; Set DPTR to value
E0 MOV A, @DPTR ; Get value to A
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along

; 13 XFALT4 FA34
90 FA 34 MOV DPTR, #0xFA34 ; Set DPTR to value
E0 MOV A, @DPTR ; Get value to A
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along
; end of non-adaptive values
; now jump over the adaptive stuff
80 25 SJMP +37 ; Jump over adaptive stuff

; Get address in case depth map


90 FA 07 MOV DPTR, #0xFA07 ; XFALARO,{Address in case depth map}
E0 MOV A, @DPTR ; Get value to A
24 35 ADD A, #0x35 ; FA35 = map base
F5 82 MOV DPL, A ; Set DPL to start of 5 cyl adapted
values

; Spit out values in case depth map, INC'ing DPTR each time
E0 MOV A, @DPTR ; Get value to A
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along
A3 INC DPTR

E0 MOV A, @DPTR ; Get value to A


FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along
A3 INC DPTR

E0 MOV A, @DPTR ; Get value to A


FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along
A3 INC DPTR
E0 MOV A, @DPTR ; Get value to A
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along
A3 INC DPTR

E0 MOV A, @DPTR ; Get value to A


FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along
; Done with adaptive values

; 14 Z_ZYL RAM_11 CURRENT CYLINDER


E5 11 MOV A, RAM_11 ; Get Parameter Value
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along

; 15 ZWGETR ADDITIONAL INGITION CORRECTION FOR GEAR ENGAGEMENT


E5 66 MOV A, RAM_66 ; Get Parameter Value
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along

; 16 XFK_ANR ENRICHMENT FACTOR IN KNOCKING


90 FA 85 MOV DPTR, #0xFA85 ; Set DPTR to value
E0 MOV A, @DPTR ; Get value to A
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along

; 17 Bitwise values
E4 CLR A
A2 02 MOV C, RAM_20.2 ; status klopfen_ja / no 1: = a
knock
92 E0 MOV A.0, C
A2 69 MOV C, RAM_2D.1 ; KRFLG2.1 KR-adaptation engaged
92 E1 MOV A.1, C
A2 6A MOV C, RAM_2D.2 ; KRFLG2.2 knock control engaged
92 E2 MOV A.2, C
A2 6E MOV C, RAM_2D.6 ; KRFLG2.2 reduced width (?)
92 E3 MOV A.3, C
A2 38 MOV C, RAM_27.0 ; Fuel Cutoff Active
92 E4 MOV A.4, C
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along

; 18 AIR MASS HOB


78 A5 MOV R0, #0xA5
E6 MOV A, @R0 ; Get Parameter Value
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along

; 19 AIR MASS LOB


78 A6 MOV R0, #0xA6
E6 MOV A, @R0 ; Get Parameter Value
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along

; 20 TI INJECTION TIME HOB


E5 6E MOV A, RAM_6E ; Get Parameter Value
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along
; 21 TI_L INJECTION TIME LOB
E5 6F MOV A, RAM_6F ; Get Parameter Value
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along

; 22 UHLM MAF VOLTAGE


E5 4B MOV A, RAM_4B ; Get Parameter Value
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along

; 23 XTRA LONG TERM FUEL TRIM - IDLE


90 F8 04 MOV DPTR, #0xF804 ; Set DPTR to value
E0 MOV A, @DPTR ; Get value to A
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along

; 24 XFRA LONG TERM FUEL TRIM - PART LOAD


90 F8 00 MOV DPTR, #0xF800 ; Set DPTR to value
E0 MOV A, @DPTR ; Get value to A
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along

; 25 XFR SHORT TERM FUEL TRIM


90 F8 12 MOV DPTR, #0xF812 ; Set DPTR to value
E0 MOV A, @DPTR ; Get value to A
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along

; 26 XUSVK LAMBDA PROBE VOLTAGE BEFORE CAT


90 F9 50 MOV DPTR, #0xF950 ; Set DPTR to value
E0 MOV A, @DPTR ; Get value to A
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along

; 27 XWDKBL THROTTLE ANGLE RELATIVE TO LL


90 F9 23 MOV DPTR, #0xF923 ; Set DPTR to value
E0 MOV A, @DPTR ; Get value to A
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along

; 28-29 LFKORR/HFKORR
78 5B MOV R0, #0x5B
E6 MOV A, @R0 ; Get Parameter Value
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along
78 5C MOV R0, #0x5C
E6 MOV A, @R0 ; Get Parameter Value
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along

; 30 VMESS SPEED KM/H


78 B7 MOV R0, #0xB7
E6 MOV A, @R0 ; Get Parameter Value
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along

; 31 TMOT MOTOR TEMP DEG C


E5 38 MOV A, RAM_38 ; Get Parameter Value
FD MOV R5, A ; Set Parameter Value
12 86 0D LCALL CODE-860D ; Send it along

; SEND FOOTER BYTES


74 AA MOV A, #0xAA
F5 99 MOV S0BUF, A ; Send 0x55, 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 55 MOV A, #0x55
F5 99 MOV S0BUF, A ; Send 0xAA, 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

22 RET

You might also like