自动往返小车电路图及汇编程序 第6页
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] [2] [3] [4] [5] [6] [7] [8] 下一页
自动往返小车电路图及汇编程序 第6页下载如图片无法显示或论文不完整,请联系qq752018766