************************************
慢车控制子程序
************************************
STOPSLOW: CLR P1.6 ;关7.5V电源
CPL P3.6 ;反向驱动(刹车)
CPL P3.7 ;反向驱动
LCALL DS50MS ;刹车时间(可根据试车情况调整)
LCALL DS50MS ;
LCALL DS50MS ;
CPL P3.6 ;正向驱动
CPL P3.7 ;正向驱动
SETB P1.7 ;开4.3V电源
RET ;返回
;
;************************************
;* 快车控制子程序 *
;************************************
FAST: CLR P1.7 ; 关4.3V电源
SETB P1.6 ; 开7.5V电源
RET ;返回
************************************
停车控制程序
************************************
STOP: MOV 23H,#00H ;跑道计数单元清0
CPL P3.6 ;反向驱动(刹车)
CPL P3.7 ;反向驱动(刹车)
LCALL DS50MS ;刹车时间
LCALL DS50MS ;刹车时间(可调整)
SETB P1.0 ;关电机电源
SETB PT1 ;定时器T1为高优先级
LCALL DS10S ;停车10秒
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 ;返回
*********************************
计时清0程序
*********************************
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 ;中断返回
上一页 [1] [2] [3] [4] [5] [6] 下一页