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

📄 12.asm

📁 汽车速度测试器,以1米的间隔放置光感应器,含3个按键,RESET START/STOP/ 三位数码显示
💻 ASM
📖 第 1 页 / 共 2 页
字号:
      MOV     A,R3
      ANL     A,#0F0H
      ACALL   RRA
      MOV     @R1,A
      INC     R1
      MOV     A,R3
      ANL     A,#0FH
      MOV     @R1,A
      INC     R1
      MOV     A,R4
      ANL     A,#0F0H
      ACALL   RRA
      MOV     @R1,A
      INC     R1
      MOV     A,R4
      ANL     A,#0FH
      MOV     @R1,A
      INC     R1
      MOV     A,R5
      ANL     A,#0F0H
      ACALL   RRA
      MOV     @R1,A
      INC     R1
      MOV     A,R5
      ANL     A,#0FH
      MOV     @R1,A

      ;*************

      DEC     R3
      CJNE    R3,#255,POINT0    ;根据6位bcd数的结果,可以求出小数点的位置,
      MOV     A,R4              ;如果r3的值大于0,则结果没有小数点.(01****)
      ANL     A,#11110000B      ;如果第三位的值大于0,则有一位小数.
      SUBB    A,#00010000B      ;除此之外有二位小数.
      JNC      POINT1
      MOV     DOT,#2
      RET
      POINT1:  MOV  DOT,#1
      RET
      POINT0: MOV   DOT,#0
      RET

      RRA: RR   A
           RR   A
           RR   A
           RR   A
           RET
      ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 CG_BCD:  NOP
      ;功能:双字节十六进制整数转换成双字节BCD码整数
      ; 入口条件:待转换的双字节十六进制整数在R6、R7中。
      ;出口信息:转换后的三字节BCD码整数在R3、R4、R5中。
      ;影响资源:PSW、A、R2~R7 堆栈需求: 2字节


      HB2: CLR A ;BCD码初始化
      MOV R3,A
      MOV R4,A
      MOV R5,A
      MOV R2,#10H ;转换双字节十六进制整数
      HB3: MOV A,R7 ;从高端移出待转换数的一位到CY中
      RLC A
      MOV R7,A
      MOV A,R6
      RLC A
      MOV R6,A
      MOV A,R5 ;BCD码带进位自身相加,相当于乘2
      ADDC A,R5
      DA A ;十进制调整
      MOV R5,A
      MOV A,R4
      ADDC A,R4
      DA A
      MOV R4,A
      MOV A,R3
      ADDC A,R3
      MOV R3,A ;双字节十六进制数的万位数不超过6,不用调整
      DJNZ R2,HB3 ;处理完16bit
      RET
      ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
M_KM: NOP
      MOV       R1,#JE_GO
      MOV       A,@R1
      MOV       R2,A
      INC       R1
      MOV       A,@R1
      MOV       R3,A
      MOV       R6,#0H
      MOV       R7,#36
      ;(5) 标号: MULD 功能:双字节二进制无符号数乘法
      ;入口条件:被乘数在R2、R3中,乘数在R6、R7中。
      ;出口信息:乘积在R2、R3、R4、R5中。
      ;影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节
      MULD: MOV A,R3 ;计算R3乘R7
      MOV B,R7
      MUL AB
      MOV R4,B ;暂存部分积
      MOV R5,A
      MOV A,R3 ;计算R3乘R6
      MOV B,R6
      MUL AB
      ADD A,R4 ;累加部分积
      MOV R4,A
      CLR A
      ADDC A,B
      MOV R3,A
      MOV A,R2 ;计算R2乘R7
      MOV B,R7
      MUL AB
      ADD A,R4 ;累加部分积
      MOV R4,A
      MOV A,R3
      ADDC A,B
      MOV R3,A
      CLR A
      RLC A
      XCH A,R2 ;计算R2乘R6
      MOV B,R6
      MUL AB
      ADD A,R3 ;累加部分积
      MOV R3,A
      MOV A,R2
      ADDC A,B
      MOV R2,A
      ;*#############向右移动一位后送入je_go中。

      MOV R6,#0H
      MOV R7,#0AH
      ACALL      DIVD
      MOV        R1,#JE_GO
      INC        R1
      INC        R1
      MOV        A,R2
      MOV        @R1,A
      INC        R1
      MOV        A,R3
      MOV        @R1,A
      RET
EROO: MOV       R1,#BUFFER
      MOV       @R1,#0EH
      INC       R1
      MOV       @R1,#16
      INC       R1
      MOV       @R1,#16
      RET
      ;********************************************
INSTALL:    SETB      P3.1                          ;安装程序,当int0端有底电平时,led亮.
            JNB       P3.1,INST_LP1
            RET
  INST_LP1: ACALL    DELAY1
            JNB       P3.1,INST_LP3
            RET
  INST_LP3: MOV      R1,#5
  INST_LP4: CPL      P3.7
            ACALL    DELAY2
            DJNZ     R1,INST_LP4
   INST_LP2:SETB     P3.7
            SETB     P3.2
            JB       P3.2,INST_LP2
            MOV      R7,#020H
  INST_LP5: MOV      R6,#0FFH
  INST_LP6: JB       P3.2,INST_LP2
            DJNZ     R6,INST_LP6
            DJNZ     R7,INST_LP5
  INST_LP0: CLR      P3.7
            JNB      P3.2,INST_LP0
            AJMP     INST_LP2
            RET
      ;********************************************
      ;********************************************
      TEST_N:
              MOV    A,N
              INC    A
              JNZ     TESTN_LP1
              MOV     DOT,#0
              MOV     R1,#BUFFER
              MOV     @R1,#0EH
              INC     R1
              MOV     @R1,#17
              INC     R1
              MOV     @R1,#17
              CLR     TR0

              RET


    TESTN_LP1:INC    A
              JZ     TESTN_LP0
              RET
    TESTN_LP0:   MOV    R1,#BUFFER
                 MOV    @R1,#0
                 INC    R1
                 MOV    @R1,#0
                 INC    R1
                 MOV    @R1,#0
                 MOV    DOT,#2
                 RET
      ;********************************************
    DELAY1:      MOV    R7,#1H
    DELAY1_LP1:  MOV    R6,#0FFH
    DELAY1_LP0:  DJNZ   R6,DELAY1_LP0
                 DJNZ   R7,DELAY1_LP1
                 RET
     DELAY2:     MOV    R7,#0FFH
    DELAY2_LP1:  MOV    R6,#0FFH
    DELAY2_LP0:  DJNZ   R6,DELAY2_LP0
                 DJNZ   R7,DELAY2_LP1
                 RET


      E_INT0:                 CLR  EA
                              PUSH ACC            ;外部中断,第一次触发时(stop=1)启动计数,第二次触发时(stop=0)停止记数。
                              MOV  A,R1
                              PUSH ACC
                              MOV   A,STOP
                              DEC   A
                              JZ   INT0_NT0
                              MOV   STOP,#1
                              MOV   R1,#N
                              MOV   @R1,#0
                              INC   R1
                              MOV   @R1,#5
                              SETB  EA
                              SETB  ET0
                              SETB  TR0
                              POP   ACC
                              MOV   R1,A
                              POP   ACC
                              RETI
                              INT0_NT0:
                              CLR   TR0
                              CLR   TF0
                              CLR     ET0
                              MOV   STOP,#0
                              ACALL   SHOW_N  ;用100000去除以'N',将结果放到 je_go 单元中。
                              ACALL   M_KM    ;将结果*3.6后保存到je_go1中去.
                              ACALL   TEST    ;将结果bcd转换后送入bcd缓冲区,再取三位有效数送显存。
                              SETB    EA
                              POP   ACC
                              MOV   R1,A
                              POP   ACC
                              RETI

              INT_T0: PUSH  ACC            ;定时中断,每1ms(1000us)中断一次,N=N++.
                      MOV   A,R1
                      PUSH  ACC
                  CLR   TR0
                  MOV   TH0,#0FEH           ;TH0=#0FEH,TL0=#0C6H,定时为1ms.
                  MOV   TL0,#0C6H
                  MOV   R1,#N
                  INC   R1
                  MOV   A,@R1
                  INC   A
                  JZ    INT_LP0
                  MOV   @R1,A
                  SETB  TR0
                  POP    ACC
                  MOV    R1,A
                  POP    ACC
                  RETI
         INT_LP0: MOV  @R1,A
                  DEC  R1
                  INC  @R1
                  SETB   TR0
                  POP    ACC
                  MOV    R1,A
                  POP    ACC
                  RETI




                ;******************************************************************
    TAB:   DB  05H,0DDH,083H,091H,59H,031H,021H,09DH,001H,011H,009H,61H,027H,0C1H,023H,02BH,0FFH,0E1H


                END

⌨️ 快捷键说明

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