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

📄 cartest.asm

📁 实现电机前进,后退
💻 ASM
📖 第 1 页 / 共 2 页
字号:
            MOV     A,60H
            CJNE    A,#00H,NEXT
            SETB    JPBZ
NEXT:       JNB     TCBZ,NEX
            setb    ZENG
            SETB    FAN                                ;停车
            CLR     ZUO                                ;转向复位
            SETB    YOU
            CLR     TR0
NEX:        AJMP    YJ1
;******************电机转动1**********************************************
;QIDONG1:    MOV     TIME3,#20                         ; 启动正转子程序
;ZZHUAN101:  SETB    FAN                                ; 正转50ms=10*5ms
            ;CLR     ZENG                               ;低脉冲启动正转
            ;MOV      A,#200
            ;MOV     TIME2,A                             ; 低脉冲控制
            ;ACALL   D50us
            ;SETB    ZENG                                ;高脉冲停止
            ;SETB    FAN
            ;MOV     A,#10
            ;MOV     TIME2,A
            ;ACALL   D50us
            ;DJNZ    TIME3, ZZHUAN101
            ;RET
;******************电机转动**********************************************
QIDONG:     JBC     BAOZI,LLLA
            MOV     TIME3,#20                         ; 启动正转子程序
ZZHUAN10:   SETB    FAN                                ; 正转50ms=10*5ms
            CLR     ZENG                               ;低脉冲启动正转
            MOV     DPTR,#TAB3
            MOV     A,60H
            MOVC    A,@A+DPTR
            MOV     TIME2,A                             ; 低脉冲控制
            ACALL   D50us                               ;4500us
            SETB    ZENG                                ;高脉冲停止
            SETB    FAN
            MOV     A,#100
            MOV     TIME2,A                            ;500us
            ACALL   D50us
            DJNZ    TIME3, ZZHUAN10
            RET
TAB3:       DB   96H,8CH,82H,78H                      ;十个速度挡
            DB   6EH,64H,5AH,50H
            DB   46H,3CH
LLLA:       ACALL    CHULI                             ;转处理接受数据程序
            AJMP     QIDONG
CHULI:      MOV      A,5BH
            MOV      B,#2
            MUL      AB                                 ;A*2
            MOV      DPTR,#TAB4
            JMP      @A+DPTR                            ;跳转到“转移表”
TAB4:       AJMP     GN1                                ;功能0
            AJMP     GN2
            AJMP     GN3
            AJMP     GN4
            AJMP     GN5
GN1:        ACALL    ZUOZUAN                            ;调用左转程序
            AJMP     GNEND
GN2:        ACALL    YOUZUAN                            ; 调用右转程序
            AJMP     GNEND
GN3:        SETB     ZUO                                ;转向复位
            SETB     YOU
            AJMP     GNEND
GN4:        SETB     FAN                                ;停车
            SETB     ZENG
            AJMP     GNEND
GN5:        ACALL     FZHUAN
            ACALL     FZHUAN
            ACALL     FZHUAN
            ACALL     FZHUAN
            ACALL     FZHUAN
            ACALL     FZHUAN
            ACALL     FZHUAN
            ACALL     FZHUAN
            SETB      ZENG
            SETB      FAN
YS:         MOV       YANSHI,#200
            ACALL     D100MS
            DJNZ      YANSHI,YS
GNEND:      RET
FZHUAN:     MOV      TIME3,#50                          ; 正转子程序
ZZHUAN0A:   SETB     ZENG                               ; 正转250ms
            CLR      FAN                                 ;低脉冲启动正转
            MOV      TIME2,#30                          ; 低脉冲控制  bsl*50us
            ACALL    D50us
            SETB     ZENG                               ;高脉冲停止
            SETB     FAN
            MOV      TIME2,#10                          ; bsh*50us
            ACALL    D50us
            DJNZ     TIME3, ZZHUAN0A
            RET
ZUOZUAN:    SETB    YOU
            CLR     ZUO                                ;低脉冲启动左转
            RET
YOUZUAN:    SETB     ZUO
            CLR      YOU                                ;  低脉冲启动 右转
            RET
;*************************读24C08子程序*******************************************
ST:           CLR     SCL                             ;c08起始
              SETB    SDA
              SETB    SCL
              CLR     SDA
              RET
ACK:          CLR     SCL                             ;c08应答
              SETB    SDA
              SETB    SCL
              RET
ACKR:         CLR     SCL                             ;连续读时的应答
              CLR     SDA
              SETB    SCL
              CLR     SCL
              SETB    SDA
              RET
STOP:         CLR     SCL                              ;c08停止
              CLR     SDA
              SETB    SCL
              SETB    SDA
              RET
;向24C08中传输8位数据
Tc08:         MOV     B,A
TC08A:        MOV     BIT_COUNT,#8                     ;每字节由8位组成
Tc081:        CLR     SCL
              RLC     A
              MOV     SDA,C
              SETB    SCL
              CLR     SCL
              DJNZ    BIT_COUNT,Tc081
              ACALL   ACK
              JB      SDA,TC082                         ;有应答(SDA=0)返回、无应答重发1遍
              RET
TC082:        MOV     A,B
              AJMP    TC08A
;从24C08中读8位数据
Rc08:         MOV     BIT_COUNT,#8
Rc081:        CLR     SCL
              SETB    SCL
              MOV     C,SDA
              CLR     SCL
              RLC     A
              DJNZ    BIT_COUNT,Rc081
              RET
;从24C08中C08QS开始连续读C08WS字节数据
R24C0800:     ACALL   ST                                ;产生起始条件
              MOV     A,#0A0H                           ;写控制字节(24c08的高位地址也由此决定)
              ACALL   Tc08
              MOV     A,C08QS                           ;读c08中XXH开始连续字节内容(低位地址)
              ACALL   Tc08
              ACALL   ST
              MOV     A,#0A1H                           ;读控制字节(24c08的高位地址也由此决定)
              ACALL   Tc08
              ACALL   Rc08
              Acall   STOP
              MOV     @R0,A
              DJNZ    C08WS,R24C0800A
              RET
R24C0800A:    INC     R0
              INC     C08QS
              AJMP    R24C0800
;***************写24C08子程序*****************************************************
WS08:       MOV       A,45H
            MOV       61H,A
            MOV       A,46H
            MOV       62H,A
            MOV       A,47H
            MOV       63H,A
            MOV       C08QS,#00H                        ;注入参数:从01H开始注入到07H开始的7位
            INC       C08QS
            MOV       C08WS,#04H                        ;读(写)的24C08的位数
            MOV       R0,#60H
            ACALL     W24C0800A
            RET
;向24C08中C08QS开始连续写C08WS字节数据
W24C0800A:   LCALL    ST                                ;保存当前数据到24c08
             MOV      A,#0A0H
             LCALL    TC08
             MOV      A,C08QS                           ;写c08要保存的地址
             LCALL    Tc08
             MOV      A,@R0
             LCALL    TC08
             LCALL    STOP
             DJNZ     C08WS,W24C0800B
             LCALL    D10MS
             RET
W24C0800B:   INC      R0
             INC      C08QS
             LCALL    D10MS
             LJMP     W24C0800A

;******************串口发程序*************************
TANSFER:      CLR      ES                               ;串口发送程序
TANSFER2:     MOV      SBUF,A
              JNB      TI,$
              CLR      TI
              SETB     ES
              RET
;*****************串口收中断程序**********************
CANKOU:       PUSH    ACC
              PUSH    PSW
              JNB      RI,CKEND                         ;判断是否由接收引起的中断
              MOV      A,SBUF
              MOV      5BH,A
              SETB      BAOZI
CKEND:        CLR       RI
              POP       PSW
              POP       ACC
              RETI
;******************时钟中断程序***********************
TINTRUP:        PUSH    ACC
                PUSH    PSW
                MOV     TH0,#3CH
                MOV     TL0,#0B0H
                INC     26H
                MOV     A,26H
                CJNE    A,#20,LOOP
                ;MOV     A,QS
                ;MOV     27H,A
                ACALL   SD
                MOV     26H,#0
                INC     25H
                MOV     A,25H
                CJNE    A,#10,LOOP
                MOV     25H,#0
                INC     24H
                MOV     A,24H
                CJNE    A,#9,LOOP
                SETB    TCBZ
                SETB    SJT
LOOP:           POP     PSW
                POP     ACC
                RETI
;******************圈数中断程序********************************
ts:             INC     R4
                INC     R2
                ACALL   LC
                RETI
;;******************计算路程****************************
LC:             MOV     A,R4                             ;半圈数
                MOV     B,#12                            ;半圈长度
                MUL     AB
                MOV     NR4,B
                MOV     NR5,A
                MOV     5CH,NR4
                MOV     5DH,NR5                           ;暂存
                MOV     NR2,#0
                MOV     NR3,#0
                MOV     NR6,#03H
                MOV     NR7,#0E8H                         ;除1000
                ACALL   DIVD                              ;调用除法 双字节商在NR2、NR3中
                MOV     39H,NR3

                MOV     NR6,#03H                          ;NR3*1000
                MOV     NR7,#0E8H
                ACALL   MULD                              ;调用乘法 乘积在NR2、NR3、NR4、NR5中

                MOV     NR2,5CH                           ;5CH,5DH-NR4,NR5
                MOV     NR3,5DH
                MOV     NR6,NR4
                MOV     NR7,NR5
                ACALL   SUB                               ;结果在NR4、NR5中
                MOV     40H,NR4                           ;被除数高位
                MOV     41H,NR5                           ;被除数低位
                CLR     C                                 ;除以100,商存放在42H(米个位)
                MOV     R7,#100
                MOV     A,40H
                SUBB    A,R7
                JC      DV50
                SETB    OV
DV50:           MOV     R6,#8
DV51:           MOV     A,41H
                RLC     A
                MOV     41H,A
                MOV     A,40H
                RLC     A
                MOV     40H,A
                MOV     F0,C
                CLR     C
                SUBB    A,R7
                CPL     F0
                ANL     C,F0
                JC      DV52
                MOV     40H,A
DV52:           CPL     C
                MOV     A,R3
                RLC     A
                MOV     R3,A
                DJNZ    R6,DV51
                MOV     A,40H
                ADD     A,40H
                SUBB    A,R7
                JC      DV54
DV54:           CLR     OV
                MOV     42H,R3                                  ;存放商,米的个位
                MOV     A,40H
                MOV     43H,A                                   ;存放余数
                MOV     A,43H                                   ;分米存43H,厘米44H
                MOV     B,#10
                DIV     AB
                MOV     43H,A
                MOV     44H,B
                MOV     41H,39H                                 ;米的十位
                RET
;***************************************************
;入口条件:被除数在R2、R3、R4、R5中,除数在R6、R7中。
 ;出口信息:OV=0 时,双字节商在R2、R3中,OV=1 时溢出。
 ; 影响资源:PSW、A、B、R1~R7 堆栈需求: 2字节
DIVD:           CLR     C                                       ;比较被除数和除数
                MOV     A,NR3
                SUBB    A,NR7
                MOV     A,NR2
                SUBB    A,NR6
                JC      DVD1
                SETB    OV                                      ;溢出
                RET
DVD1:           MOV     B,#10H                                  ;计算双字节商
DVD2:           CLR     C                                       ;部分商和余数同时左移一位
                MOV     A,NR5
                RLC     A
                MOV     NR5,A
                MOV     A,NR4
                RLC     A
                MOV     NR4,A
                MOV     A,NR3
                RLC     A
                MOV     NR3,A
                XCH     A,NR2
                RLC     A
                XCH     A,NR2
                MOV     F0,C                                    ;保存溢出位
                CLR     C
                SUBB    A,NR7                                   ;计算(R2R3-R6R7)
                MOV     R1,A
                MOV     A,NR2
                SUBB    A,NR6
                ANL     C,/F0                                   ;结果判断
                JC      DVD3
                MOV     NR2,A                                   ;够减,存放新的余数
                MOV     A,R1
                MOV     NR3,A
                INC     NR5                                     ;商的低位置一
DVD3:           DJNZ    B,DVD2                                  ;计算完十六位商(R4R5)
                MOV     A,NR4                                   ;将商移到R2R3中
                MOV     NR2,A
                MOV     A,NR5
                MOV     NR3,A
                CLR     OV                                      ;设立成功标志
                RET

;入口条件:被乘数在R2、R3中,乘数在R6、R7中。
;    出口信息:乘积在R2、R3、R4、R5中。
;    影响资源:PSW、A、B、R2~R7 堆栈需求: 2

⌨️ 快捷键说明

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