⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gobd2.asm

📁 51程序,可以用于读取支持OBDii协议的汽车的读取故障码
💻 ASM
📖 第 1 页 / 共 3 页
字号:
                AJMP PWM_READEND        ;2
     PWM_READ09:MOV A,R0                ;1
                MOV R1,A                ;1
                INC R0                  ;1
                MOV R7,#0               ;1
                ;AJMP PWM_READS1        ;2
                ;
    PWM_READEND:MOV A,14H
                JZ PWM_READERR
                CLR C
                RET
    PWM_READERR:MOV 14H,#01H
                MOV 15H,#01H
                MOV 16H,#04H
                SETB C
                RET



;J1850-VPW===================================================================;
VPW_COM:        MOV DPTR,#OB_VPW_START
                LCALL TRANS_TOBUF
                LCALL VPW_SEND_READ
                JC VPW_COM_END
                ;
                MOV DPTR,#OB_VPW_NCODE
                LCALL TRANS_TOBUF
                lcall VPW_SEND_READ
                JC VPW_COM_END

     VPW_COM_02:MOV DPTR,#OB_VPW_RCODE
                LCALL TRANS_TOBUF
                LCALL VPW_SEND_READ
                JC VPW_COM_END01
                LCALL READ_CODE
                CLR C
                RET
  VPW_COM_END01:LCALL SET_OK
                CLR C
    VPW_COM_END:RET


VPW_CLRCODE:    MOV DPTR,#OB_VPW_CLRCODE
                LCALL TRANS_TOBUF
                LCALL VPW_SEND_READ
                RET

VPW1_COM:       MOV DPTR,#OB_VPW_START
                INC DPTR
                LCALL TRANS_TOBUF
                lcall VPW_SEND_READ
                JC VPW1_COM_END

                MOV DPTR,#OB_VPW_NCODE
                INC DPTR
                LCALL TRANS_TOBUF
                lcall VPW_SEND_READ
                JC VPW1_COM_END

    VPW1_COM_02:MOV DPTR,#OB_VPW_RCODE
                INC DPTR
                LCALL TRANS_TOBUF
                LCALL VPW_SEND_READ
                JC VPW1_COM_END01
                LCALL READ_CODE
                CLR C
                RET
 VPW1_COM_END01:LCALL SET_OK
                CLR C
   VPW1_COM_END:RET

VPW1_CLRCODE:    MOV DPTR,#OB_VPW_CLRCODE
                INC DPTR
                LCALL TRANS_TOBUF
                LCALL VPW_SEND_READ
                RET

VPW_SEND_READ:  MOV R2,#10
                ;
                ;
                ;send part------------------------------
                ;
   VPW_SEND_STA:MOV 14H,#0
                MOV R1,#15H
                MOV R7,#0
     VPW_SENDS0:MOV R4,#30
     VPW_SENDS1:JB VPW_IN,VPW_SENDS0    ;18
                JB VPW_IN,VPW_SENDS0    ;
                JB VPW_IN,VPW_SENDS0    ;
                JB VPW_IN,VPW_SENDS0    ;
                JB VPW_IN,VPW_SENDS0    ;
                JB VPW_IN,VPW_SENDS0    ;
                JB VPW_IN,VPW_SENDS0    ;
                JB VPW_IN,VPW_SENDS0    ;
                JB VPW_IN,VPW_SENDS0    ;
                DJNZ R4,VPW_SENDS1      ;2
                ;
                MOV P1,#VPW_HI          ;2
                MOV R4,#195             ;391-HI(200)
                DJNZ R4,$               ;
                NOP                     ;1
                MOV R0,#09H             ;1
                MOV R7,08H              ;2
     VPW_SEND00:MOV A,@R0               ;1
                INC R0                  ;1
                MOV R6,#4               ;1
     VPW_SEND01:MOV P1,#VPW_LO          ;2
                MOV R4,#4               ;9
                DJNZ R4,$               ;
                RLC A                   ;1
                JNC VPW_SEND02          ;2
                MOV R4,#31              ;125
      VPW_SEND1:JB VPW_IN,VPW_SENDS0    ;
                DJNZ R4,VPW_SEND1       ;
     VPW_SEND02:MOV R4,#28              ;113
      VPW_SEND2:JB VPW_IN,VPW_SENDS0    ;
                DJNZ R4,VPW_SEND2       ;
                MOV P1,#VPW_HI          ;2
                RLC A                   ;1
                JC VPW_SEND03           ;2
                MOV R4,#64              ;129
                DJNZ R4,$               ;
     VPW_SEND03:MOV R4,#60              ;121
                DJNZ R4,$               ;
                DJNZ R6,VPW_SEND01      ;2
                DJNZ R7,VPW_SEND00      ;2
                MOV P1,#VPW_LO          ;3
                MOV R4,#200             ;401
                DJNZ R4,$               ;
                ;
                ;
                ;read part------------------------------
                ;
     VPW_READM2:MOV R0,#16H             ;1
                MOV R3,#10              ;1
     VPW_READS0:CLR TR0                 ;1
                CLR TF0                 ;1
                MOV TH0,#TH_30MS        ;2
                MOV TL0,#TL_30MS        ;2
                SETB TR0                ;1
     VPW_READS1:JB TF0,VPW_READS2       ;2
                MOV R4,#17              ;1
      VPW_READ1:JNB VPW_IN,VPW_READS1   ;18
                JNB VPW_IN,VPW_READS1   ;
                JNB VPW_IN,VPW_READS1   ;
                JNB VPW_IN,VPW_READS1   ;
                JNB VPW_IN,VPW_READS1   ;
                JNB VPW_IN,VPW_READS1   ;
                JNB VPW_IN,VPW_READS1   ;
                JNB VPW_IN,VPW_READS1   ;
                JNB VPW_IN,VPW_READS1   ;
                DJNZ R4,VPW_READ1       ;2
                AJMP VPW_READ00         ;2
     VPW_READS2:DJNZ R3,VPW_READS0      ;2
                AJMP VPW_READEND        ;2
     VPW_READ00:JB VPW_IN,$             ;2
                ;
                MOV R6,#4               ;1
     VPW_READA1:CLR C                   ;1
                MOV R4,#48              ;1
     VPW_READA2:JB VPW_IN,VPW_READA3    ;2
                DJNZ R4,VPW_READA2      ;2
                SETB C                  ;1
                JNB VPW_IN,$            ;2
     VPW_READA3:RLC A                   ;1
                SETB C                  ;1
                MOV R4,#48              ;1
     VPW_READA4:JNB VPW_IN,VPW_READA5   ;2
                DJNZ R4,VPW_READA4      ;2
                CLR C                   ;1
                JB VPW_IN,$             ;2
     VPW_READA5:RLC A                   ;1
                DJNZ R6,VPW_READA1      ;2
                CJNE A,#48H,VPW_REREAD  ;2
                MOV @R0,A               ;1
                INC R0                  ;1
                INC R7                  ;1
                MOV R6,#4               ;1
     VPW_READB1:CLR C                   ;1
                MOV R4,#48              ;1
     VPW_READB2:JB VPW_IN,VPW_READB3    ;2
                DJNZ R4,VPW_READB2      ;2
                SETB C                  ;1
                JNB VPW_IN,$            ;2
     VPW_READB3:RLC A                   ;1
                SETB C                  ;1
                MOV R4,#48              ;1
     VPW_READB4:JNB VPW_IN,VPW_READB5   ;2
                DJNZ R4,VPW_READB4      ;2
                CLR C                   ;1
                JB VPW_IN,$             ;2
     VPW_READB5:RLC A                   ;1
                DJNZ R6,VPW_READB1      ;2
                CJNE A,#6BH,VPW_REREAD  ;2
                MOV @R0,A               ;1
                INC R0                  ;1
                INC R7                  ;1
                ;
     VPW_READC0:MOV R6,#4               ;1
     VPW_READC1:CLR C                   ;1
                MOV R4,#48              ;1
     VPW_READC2:JB VPW_IN,VPW_READC4    ;2
                DJNZ R4,VPW_READC2      ;2
                SETB C                  ;1
                MOV R4,#100             ;1
     VPW_READC3:JB VPW_IN,VPW_READC4    ;2
                DJNZ R4,VPW_READC3      ;2
                AJMP VPW_READNXT        ;2
     VPW_READC4:RLC A                   ;1
                SETB C                  ;1
                MOV R4,#48              ;1
     VPW_READC5:JNB VPW_IN,VPW_READC6   ;2
                DJNZ R4,VPW_READC5      ;2
                CLR C                   ;1
                JB VPW_IN,$             ;2
     VPW_READC6:RLC A                   ;1
                DJNZ R6,VPW_READC1      ;2
                MOV @R0,A               ;1
                INC R0                  ;1
                INC R7                  ;1
                AJMP VPW_READC0         ;2
                ;
     VPW_REREAD:MOV A,14H
                JZ VPW_READR1
                AJMP VPW_READEND
     VPW_READR1:DEC R2
                MOV A,R2
                JZ VPW_READEND
                AJMP VPW_SEND_STA
                ;
    VPW_READNXT:INC 14H
                MOV A,R7
                MOV @R1,A
                MOV A,14H
                CJNE A,#8,VPW_READNX
                AJMP VPW_READEND
     VPW_READNX:MOV A,R0
                MOV R1,A
                INC R0
                MOV R7,#0
                AJMP VPW_READS1
                ;
    VPW_READEND:MOV A,14H
                JZ VPW_READERR
                CLR C
                RET
    VPW_READERR:MOV 14H,#01H
                MOV 15H,#01H
                MOV 16H,#07H
                SETB C
                RET


;ISO-9141-2==================================================================;
ISO_COM:        LCALL ISO_COM_STAR
                JC ISO_COM_END
                ;
                MOV DPTR,#OB_ISO_NCODE
                LCALL TRANS_TOBUF
                LCALL ISO_SEND_READ
                JC ISO_COM_END
                ;
     ISO_COM_02:MOV DPTR,#OB_ISO_RCODE
                LCALL TRANS_TOBUF
                LCALL ISO_SEND_READ
                JC ISO_COM_END01
                LCALL READ_CODE
                CLR C
                RET
  ISO_COM_END01:LCALL SET_OK
                CLR C
    ISO_COM_END:RET



ISO_CLRCODE:    MOV DPTR,#OB_ISO_CLRCODE
                LCALL TRANS_TOBUF
                LCALL ISO_SEND_READ
                RET


ISO_COM_STAR:   MOV R4,#50
                LCALL DELAY_10MS
                ;
                MOV A,#33H
                LCALL SENDDATA_5BPS
                NOP
                NOP
                LCALL SET_BAUD_10400
                MOV R3,#250
                LCALL READDAT_WAIT
                JC ISO_COMERR
                CJNE A,#55H,ISO_COMERR
                MOV R3,#20
                LCALL READDAT_WAIT		;receive KW1
                JC ISO_COMERR
                MOV R3,#20
                LCALL READDAT_WAIT		;receive KW2
                JC ISO_COMERR
                MOV R4,#30
                LCALL DELAY_1MS
                CPL A
                LCALL SEND_ACC
                MOV R3,#250
                LCALL READDAT_WAIT
                CJNE A,#0CCH,ISO_COMERR
                CLR C
                RET
     ISO_COMERR:SETB C
                RET


SENDDATA_5BPS:  SETB K_SWITCH
                SETB L_SWITCH
                MOV R4,#200             ;200ms低电平
                CLR TXD
                LCALL DELAY_1MS
                MOV R0,#8
   SEND_5BPS_00:RRC A                   ;1
                MOV TXD,C               ;1
                MOV R4,#200             ;1
                LCALL DELAY_1MS         ;2
                DJNZ R0,SEND_5BPS_00    ;2
                SETB TXD                ;200ms高电平
                MOV R4,#200
                LCALL DELAY_1MS
                CLR L_SWITCH
                RET


SEND_ACC:       CLR REN
                CLR TI
                MOV SBUF,A
                JNB TI,$
                CLR TI
                RET


READDAT_WAIT:   SETB REN
                CLR RI
                CLR TR0
                CLR TF0
                MOV TH0,#TH_1MS
                MOV TL0,#TL_1MS
                SETB TR0
        RDWAIT0:JB RI,RDWAIT1
                JNB TF0,RDWAIT0
                DJNZ R3,READDAT_WAIT
                CLR TR0
                CLR TF0
                SETB C
                RET
        RDWAIT1:CLR RI
                CLR TR0
                CLR TF0
                MOV A,SBUF
                CLR C
                RET


ISO_READDATA:   MOV R0,#READ_BUF+2
                MOV R7,#0              ;C=1,失败 ;C=0,成功
                MOV R3,#250
                lcall READDAT_WAIT
                JNC ISO_RD0A_1
                MOV R3,#250
                lcall READDAT_WAIT
                JC ISO_RD01_1
     ISO_RD0A_1:MOV @R0,A
                INC R0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -