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

📄 小车程序2.asm

📁 8051程序 要先设定里程值
💻 ASM
字号:
ORG   0000H
AJMP   MAIN
ORG   000BH  ;T0的中断入口地址
AJMP  STOP
ORG   001BH   ;T1的中断入口地址
AJMP  SERVE
ORG   0100H
MAIN: ;电机各端口关闭
      CLR    P2.4       ;进
      CLR    P2.5       ;退
      CLR    P2.6       ;左
      CLR    P2.7       ;右
      MOV    40H,#00H    ;1M 单元清0
      MOV    41H,#00H    ;0.1M 单元清0
      MOV    42H,#00H    ;0.01M  单元清0
 ;要先设定里程值,并能显示设定值,在开始按钮按下去后,里程值转换成记数初值,并开始计算里程
            MOV    R1,#42H      ; 作显示用的指针
            MOV    R0,#42H      ;R0指向42单元

            SJMP   LOOP1
LOOP0:
            DEC    R0
            CJNE   R0,#3FH,LOOP1  ;在40-42单元之间循环
            MOV    R0,#42H
LOOP1:
            SETB   P1.1
            SETB   P1.0
            SETB   P1.2
            ACALL  DIR         ;调用显示子程序
            SETB   C
            NOP
            NOP
            MOV   C,P1.1                     ;P1.1为选择键
            JNC   LOOP0                     ;C=0转
            MOV   C,P1.2
            JNC   STA                      ;P1.2为启动开关
                                     ; P1.0为增加键
            JB    P1.0,LOOP1   ;P1.0无输入则等待,P1.0=1转

            INC   @R0
            CJNE  @R0,#0AH,LOOP1   ;在0-9之间循环
            MOV   @R0,#00H
            SJMP  LOOP1

STA:  MOV    A,40H          ;计算里程需要的脉冲数
      MOV    B,#64H
      MUL    AB
      MOV    50H,A
      MOV    51H,B
      MOV    A,41H
      MOV    B,#0AH
      MUL    AB
      MOV    52H,A
      MOV    53H,B
      CLR    C
      ADDC   A,50H
      MOV    50H,A
      MOV    A,53H
      ADDC   A,51H
      MOV    51H,A
      MOV    A,42H
      CLR    C
      ADDC   A,50H
      MOV    50H,A
      MOV    A,51H
      ADDC   A,#00H
      MOV    51H,A          ;把预定的总脉冲数存入50H,51H单元
      CLR    C
      MOV    A,#0FFH        ;让记数器T0方式1记数,计算其初始值
      SUBB   A,50H
      MOV    50H,A
      MOV    A,#0FFH
      SUBB   A,51H
      MOV    51H,A
      CLR    C
      MOV    A,#01H       ;减完加1
      ADDC   A,50H
      MOV    50H,A
      MOV    A,51H
      ADDC   A,#00H
      MOV    51H,A       ;把用来输入记数器T0的里程初值放在50,51单元

      MOV    30H,#00H      ;1M 单元清0
      MOV    31H,#00H      ;0.1M 单元清0
      MOV    32H,#00H      ;0.01M  单元清0
      MOV    R1,#32H      ; 作显示用的指针

      MOV    TMOD,#65H  ;置T0方式1记数 ,T1方式2记数
      MOV    TH1, #0FFH  ;赋记数初值1次 ,T1可自动复位
      MOV    TL1, #0FFH
      MOV    TH0,51H    ;T0设初值
      MOV    TL0,50H

      MOV    IE, #8AH    ;T0,T1开中断
      MOV    IP,#00000010H   ;置T0为高优先级中断
      SETB   TR1          ;启动记数器
      SETB   TR0
      SETB   P2.4          ;启动电机
LL:   SJMP   LL           ;等待中断 ,T0的中断优先级比T1高,如果预设里程到达,会先停止
SERVE:  ACALL  DIR       ;调用显示子程序
        PUSH  PSW
        PUSH  ACC
        INC  32H
        MOV  A,32H
        CJNE A,#0AH,RETUNT    ;未满0.1M返回
        MOV  32H,#00H      ;满0.1M时0.01M单元清0
        INC  31H
        MOV  A,31H
        CJNE A,#0AH,RETUNT    ;未满1M返回
        MOV  31H,#00H      ;满1M时0.1M单元清
        INC  30H
RETUNT: POP  ACC
        POP  PSW
        RETI                   ;中断返回
STOP:   CLR    P2.4            ;关闭电机
        CLR    IE              ; 关闭所有中断,停车
        CLR    TR0
        CLR    TR1
        SETB   P2.5            ;反向驱动 ,增加制动效果
        ACALL  DIR     ;调用显示子程序
        ACALL  DELAY           ;调用延迟子程序
        CLR    P2.5
        END

DELAY:  CLR    TF0
        MOV    TMOD,#01H  ; T0方式1定时
        MOV    TH0, #3CH  ;定时50MS
        MOV    TL0, #0B0H
        MOV    R7,#0AH     ;延迟500MS
        SETB   TR0
NEXT:   JNB    TF0,NEXT
        MOV    TH0, #3CH  ;定时50MS
        MOV    TL0, #0B0H
        CLR    TF0
        DJNZ   R7,NEXT
        RETI
DIR:     MOV   A,R1    ;保存低位地址指针
         MOV   R3,A
         MOV   R2,#03H ;显示位数
         MOV   DPTR,#TAB  ;置段首地址
LP:      MOV   A,@R1
         MOVC  A,@A+DPTR    ;取响应字码段
         MOV   SBUF,A
         JNB   TI,$         ;等待串行传送结束
         CLR   TI
         DEC   R1
         DJNZ  R2,LP
         MOV   A,R3        ;还原低位指针
         MOV   R1,A
         RETI
TAB:   DB    0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H    ;
              ;0      1   2    3    4   5   6   7    8   9












































































































































⌨️ 快捷键说明

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