自动往返电动小汽车系统设计 第5页

自动往返电动小汽车系统设计 第5页
  CLR   PT1     ;恢复T1为低优先级
       SETB  P1.6     ;开7.5V电源(高速)
       CLR   P1.7     ;关4.3V
       CLR   P1.0     ;电机电源开
       CPL   30H     ;停车点位置判断标志取反
       JB   30H,STREN    ;为1(中途停车)转STREN
       LCALL  CLR00     ;是终点,调复0程序
 STREN:    RET      ;返回
CLR00:      MOV  70H,#00H     ;计时单元清0
         MOV  71H,#00H     ;计时单元清0
         MOV  72H,#00H     ;计时单元清0
         MOV  73H,#00H     ;计时单元清0
         RET        ;返回
;*  外中断1程序,里程计数用    *
;*  20H、21H、22H、24H作计数器   *
INTEX1:     PUSH  ACC       ;堆栈保护
         PUSH  PSW       ;
         CLR  EX1       ;关外中断1
         INC  20H       ;圈加1
 LLLL:     MOV  A,20H     ;判断是否满6圈
         CJNE  A,#06H,LLL    ;不满6圈转LLL退出
         MOV  20H,#00H     ;满6圈清0进位(6圈为1米)
         INC  21H       ;上位加1
         MOV  A,21H     ;判断是否满10
         CJNE  A,#0AH,LLL    ;不满10转LLL
         MOV  21H,#00H     ; 满10清0进1位
         INC  22H       ; 高位加1
         MOV  A,22H     ; 判断是否满10
         CJNE  A,#0AH,LLL    ; 不满10转LLL
         MOV  22H,#00H     ; 满10清0进1位
         INC  24H      ; 高位加1
         MOV  A,24H     ; 判断是否满10
         CJNE  A,#0AH,LLL    ; 不满10转LLL
         MOV  24H,#00H     ; 满10清0
LLL:       MOV  74H,21H     ; 将里程数移入显示单元(个位)
         MOV  75H,22H     ; 将里程数移入显示单元(十位)
         MOV  76H,24H     ; 将里程数移入显示单元(百位)
IN1RET:     POP  PSW      ;恢复堆栈
         POP  ACC     ;
         SETB  EX1      ;开外中断1
         RETI      ;中断返回
INTT1:       PUSH  ACC     ;堆栈保护
          PUSH  PSW     ;
          MOV TL1,#0B0H   ;赋50毫秒定时初值
          MOV TH1,#3CH    ;
          DEC R4     ;减1
          MOV A,R4     ;
          JNZ RETT0    ;不为0转RETT0
          MOV R4,#14H    ;为0(1秒到)重赋初值
          MOV R0,#71H    ;地址指向71H
          ACALL ADD1     ;加1秒操作
          MOV A,R3     ;
          CLR C     ;
          CJNE A,#60H,CC   ;是否为60秒?
CC:   JC RETT0    ;小于60转RETT0
          ACALL CLR0    ;大于或等于60清0
          MOV R0,#73H    ;指向分计时地址单元
          ACALL ADD1     ;分加1
          MOV A,R3     ;
          CLR C     ;
          CJNE A,#60H,CCC   ;是否为60分?
CCC:   JC   RETT0     ;小于60转RETT0
          ACALL CLR0     ;大于或等于60分计时单元清0
 RETT0:   POP  PSW     ;恢复堆栈
          POP  ACC     ;
          RETI      ;中断返回
 ADD1:   MOV A,@R0     ;取计数值
          DEC R0      ;指向低一个地址
          SWAP A      ;计数值高低四位交换
          ORL  A,@R0     ;相或组合成一个数据
          ADD  A,#01H     ;加1
          DA  A      ;十进制调整
          MOV  R3,A     ;暂存R3内
          ANL  A,#0FH     ;高四位变0
          MOV @R0,A     ;放回低地址
          MOV A,R3     ;取回R3内数据
          INC R0      ;地址加1
          SWAP A      ;高低四位交换
          ANL  A,#0FH     ;高四位为0
          MOV @R0,A     ;放回原地址
          RET       ;返回
CLR0:   CLR A      ;清A
          MOV  @R0,A     ;对应地址单元清0
          DEC R0      ;指向低一地址
          MOV @R0,A     ;清0
          RET       ;返回
DISP:   MOV R1,#70H     ;显示数据首址
          MOV R5,#0FEH     ;扫描字
PLAY:   MOV A,R5      ;扫描字入A
          MOV P2,A      ;从P2口输出
          MOV A,@R1     ;取显示数据
          MOV DPTR,#TAB     ;取段码表首址
          MOVC A,@A+DPTR     ; 查数据对应段码
          MOV P0,A      ;段码从P0口输出
          LCALL DL1MS    ;点亮1毫秒
          INC R1      ;指向下显示数地址

上一页  [1] [2] [3] [4] [5] [6] 下一页

Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有