把下面这段汇编语言转换为c语言,大神求帮忙

2019-07-18 09:43发布

l 主程序定时器脉冲的输出程序                  ORG    0000H        AJMP   MAINORG    0013HAJMP   INT1ORG    100H          MAIN:   MOV    TMOD,#11H    ;设置T0,T1为定时方式1                  MOV    TL0,#1AH        ;置计数初值                  MOV    TH0,#FCH                                     MOV    TL1,#1AH                  MOV    TH1,#FCH                                  MOV    IE , #8EH    ;设置中断允许                  MOV    IP , #0AH           ;设置中断优先级                  SETB   TR0          ;启动中断                  SETB   TR1          LOOP:   JB     TF0,LOOP1   ;中断查询                  JB     TF1,LOOP2                  AJMP   LOOP            LOOP1: MOV    TL0,#1AH    ;重新置计数初值                  MOV    TH0,#FCH                          CLR    TF0                  CPL    P1.0                   ;取反输出                  AJMP   LOOP          LOOP2: MOV    TL1,#1AH                  MOV    TH1,#FCH        CLR    TF1                  CPL    P1.2                          AJMP   LOOP
l 中断服务程序          INT1:  MOV    R1,#00H                  MOV    R2,#04H          TEST:   MOV    A,  P2                  JNB    P3.3,TEST     ;检测是否有中断                  SETB   EX1            ;开外部中断             CH:   DJNZ   R2,MWC        ;检查清扫状况                  CLR    TF0                  CLR    TF1MWC:   INC    R1                     JB     P2.3,LP1      ;是否悬空                  JNB    P2.2,TEST     ;是否碰撞                  MOV    A,R1                  JNB    D0H,OS         ;判断碰撞类型,偶数转                  JB     P2.1,LP3           LP2:  MOV    A,R2                  JNB    D0H,OS1        ACALL  HH           OS1:   ACALL  Zzw            ;左转弯90度                  ACALL  Zxqx           ;直线前进20cm                  ACALL  Zzw            ;左转弯90度                  AJMP   TEST
           LP3:   DEC    R2                  MOV    A,R2                  JNB    D0H,CH         ;连续两次转弯不可行,转                  ACALL  YDHZW                           AJMP   TEST            OS:   JB     P2.0,LP4           LP5:  MOV    A,R2                  JNB    D0H,OS2       ACALL  HH           OS2:  ACALL  Yzw            ;右转弯90度                  ACALL  Zxqx           ;直线前进20cm                  ACALL  Yzw            ;右转弯90度                  AJMP   TEST           LP4:   DEC    R2                  MOV    A,R2                  JNB    D0H,CH         ;连续两次转弯不可行,转                  ACALL  YDHZW                           AJMP   TEST            HH:   INC     R1  RET
l 服务子程序:Zzw:   MOV    R0,#20H        ;正转控制字首址                   MOV    R3,#7846       ;转90度的脉冲数                  ACALL  YLKZ                  MOV    R0,#27H        ;反转控制字首址                   MOV    R3,#7846       ;转90度的脉冲数                  ACALL  ZLKZ                  RET          Zxqx:   MOV    R0,#20H        ;正转控制字首址                   MOV    R3,#7500      ;前进20cm的脉冲数                  ACALL  YLKZ                  ACALL  ZLKZ                  RET           Yzw:   MOV    R0,#20H        ;正转控制字首址                   MOV    R3,#7846       ;转90度的脉冲数                  ACALL  ZLKZ                  MOV    R0,#27H        ;反转控制字首址                   MOV    R3,#7846       ;转90度的脉冲数                  ACALL  YLKZ                  RET         YDHZW:   MOV    R0,#20H        ;正转控制字首址                   MOV    R3,#15692      ;转90度的脉冲数                  ACALL  YLKZ                  MOV    R0,#27H        ;反转控制字首址                   MOV    R3,#15692      ;转90度的脉冲数                  RET


l 右轮控制程序:           YLKZ:  PUSH     A             ;保护现场 MOV      A,@R0   MOV      P1.1,A       ;输出控制脉冲 ACALL    DLY           ;调用延时程序 INC      R0            ;控制字存储地址增1 MOV      A,#00H ORL      A,@R0        ;是结束标志转移      JZ       TPL LOOP1: DJNZ     R3,LOOP      ;步数不为0,转移 POP      A RET TPL: MOV      A,R0         ;恢复控制字首址 SUBB     A,#06H MOV      R0,A AJMP     LOOP1 DLY: MOV      R4,#M        ;通过改变M,M1的值调整转速DLY1:MOV      A,#M1 LOOP2: DEC      A JNZ      LOOP2DJNZ    R4,DLY1 RET
l 左轮控制程序:           ZLKZ:  PUSH     A             ;保护现场 MOV      A,@R0   MOV      P1.3,A       ;输出控制脉冲 ACALL    DLY           ;调用延时程序 INC      R0            ;控制字存储地址增1 MOV      A,#00H ORL      A,@R0        ;是结束标志转移      JZ       TPL LOOP1: DJNZ     R3,LOOP      ;步数不为0,转移 POP      A RET TPL: MOV      A,R0         ;恢复控制字首址 SUBB     A,#06H MOV      R0,A AJMP     LOOP1 DLY: MOV      R4,#M        ;通过改变M,M1的值调整转速DLY1:MOV      A,#M1 LOOP2: DEC      A JNZ      LOOP2DJNZ    R4,DLY1 RET
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。