自动往返行驶小汽车的设计 第5页
停车控制程序
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 ;中断返回
时间计时器程序(T1定时中断服务程序)
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 ;中断返回
加1操作程序
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 ;返回
清0程序
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 ;指向下显示数地址
MOV A,R5 ;扫描字入A
JNB ACC.6,ENDOUT ;ACC.6=0转ENDOUT结束
RL A ;循环左移
MOV R5,A ;放回A
AJMP PLAY ;转PLAY再显示
ENDOUT: MOV P2,#0FFH ;显示结束处理。P2口置1
RET ;子程序结束;
;LED共阴段码表(0-9)
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;
1毫秒延时程序
DL1MS: MOV R6,#14H
DL1: MOV R7,#19H
DL2: DJNZ R7,DL2
DJNZ R6,DL1
RET
延时程序,用调用显示程序实现,可使LED显示稳定
DS50MS:LCALL DISP ;(7毫秒)
LCALL DISP
LCALL DISP
DS20MS:LCALL DISP
LCALL DISP
LCALL DISP
RET
10秒延时程序,用调用显示程序实现,可使LED显示不熄灭
DS10S: MOV R2,#08H ;(8*11*16*7=9956毫秒)
TI0: MOV R0,#0B0H
TI1: LCALL DISP
DJNZ R0,TI1
DJNZ R2,TI0
RET
7毫秒延时程序,跑道计数器抗干扰用
DL7MS: SETB PX1 ;外中断1置高优先级
MOV R2,#0EH ;赋定时值
DL11: LCALL DISP ;调用显示程序
DJNZ R2,DL11 ;循环
CLR PX1 ;外中断1恢复低优先级
RET ;返回
END ;程序结束
上一页 [1] [2] [3] [4] [5] [6] 下一页
自动往返行驶小汽车的设计 第5页下载如图片无法显示或论文不完整,请联系qq752018766