📄 小车程序2.asm
字号:
ORG 0000H
AJMP MAIN
ORG 000BH ;T0的中断入口地址
AJMP STOP
ORG 001BH ;T1的中断入口地址
AJMP SERVE
ORG 0100H
MAIN: ;电机各端口关闭
CLR P2.4 ;进
CLR P2.5 ;退
CLR P2.6 ;左
CLR P2.7 ;右
MOV 40H,#00H ;1M 单元清0
MOV 41H,#00H ;0.1M 单元清0
MOV 42H,#00H ;0.01M 单元清0
;要先设定里程值,并能显示设定值,在开始按钮按下去后,里程值转换成记数初值,并开始计算里程
MOV R1,#42H ; 作显示用的指针
MOV R0,#42H ;R0指向42单元
SJMP LOOP1
LOOP0:
DEC R0
CJNE R0,#3FH,LOOP1 ;在40-42单元之间循环
MOV R0,#42H
LOOP1:
SETB P1.1
SETB P1.0
SETB P1.2
ACALL DIR ;调用显示子程序
SETB C
NOP
NOP
MOV C,P1.1 ;P1.1为选择键
JNC LOOP0 ;C=0转
MOV C,P1.2
JNC STA ;P1.2为启动开关
; P1.0为增加键
JB P1.0,LOOP1 ;P1.0无输入则等待,P1.0=1转
INC @R0
CJNE @R0,#0AH,LOOP1 ;在0-9之间循环
MOV @R0,#00H
SJMP LOOP1
STA: MOV A,40H ;计算里程需要的脉冲数
MOV B,#64H
MUL AB
MOV 50H,A
MOV 51H,B
MOV A,41H
MOV B,#0AH
MUL AB
MOV 52H,A
MOV 53H,B
CLR C
ADDC A,50H
MOV 50H,A
MOV A,53H
ADDC A,51H
MOV 51H,A
MOV A,42H
CLR C
ADDC A,50H
MOV 50H,A
MOV A,51H
ADDC A,#00H
MOV 51H,A ;把预定的总脉冲数存入50H,51H单元
CLR C
MOV A,#0FFH ;让记数器T0方式1记数,计算其初始值
SUBB A,50H
MOV 50H,A
MOV A,#0FFH
SUBB A,51H
MOV 51H,A
CLR C
MOV A,#01H ;减完加1
ADDC A,50H
MOV 50H,A
MOV A,51H
ADDC A,#00H
MOV 51H,A ;把用来输入记数器T0的里程初值放在50,51单元
MOV 30H,#00H ;1M 单元清0
MOV 31H,#00H ;0.1M 单元清0
MOV 32H,#00H ;0.01M 单元清0
MOV R1,#32H ; 作显示用的指针
MOV TMOD,#65H ;置T0方式1记数 ,T1方式2记数
MOV TH1, #0FFH ;赋记数初值1次 ,T1可自动复位
MOV TL1, #0FFH
MOV TH0,51H ;T0设初值
MOV TL0,50H
MOV IE, #8AH ;T0,T1开中断
MOV IP,#00000010H ;置T0为高优先级中断
SETB TR1 ;启动记数器
SETB TR0
SETB P2.4 ;启动电机
LL: SJMP LL ;等待中断 ,T0的中断优先级比T1高,如果预设里程到达,会先停止
SERVE: ACALL DIR ;调用显示子程序
PUSH PSW
PUSH ACC
INC 32H
MOV A,32H
CJNE A,#0AH,RETUNT ;未满0.1M返回
MOV 32H,#00H ;满0.1M时0.01M单元清0
INC 31H
MOV A,31H
CJNE A,#0AH,RETUNT ;未满1M返回
MOV 31H,#00H ;满1M时0.1M单元清
INC 30H
RETUNT: POP ACC
POP PSW
RETI ;中断返回
STOP: CLR P2.4 ;关闭电机
CLR IE ; 关闭所有中断,停车
CLR TR0
CLR TR1
SETB P2.5 ;反向驱动 ,增加制动效果
ACALL DIR ;调用显示子程序
ACALL DELAY ;调用延迟子程序
CLR P2.5
END
DELAY: CLR TF0
MOV TMOD,#01H ; T0方式1定时
MOV TH0, #3CH ;定时50MS
MOV TL0, #0B0H
MOV R7,#0AH ;延迟500MS
SETB TR0
NEXT: JNB TF0,NEXT
MOV TH0, #3CH ;定时50MS
MOV TL0, #0B0H
CLR TF0
DJNZ R7,NEXT
RETI
DIR: MOV A,R1 ;保存低位地址指针
MOV R3,A
MOV R2,#03H ;显示位数
MOV DPTR,#TAB ;置段首地址
LP: MOV A,@R1
MOVC A,@A+DPTR ;取响应字码段
MOV SBUF,A
JNB TI,$ ;等待串行传送结束
CLR TI
DEC R1
DJNZ R2,LP
MOV A,R3 ;还原低位指针
MOV R1,A
RETI
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;
;0 1 2 3 4 5 6 7 8 9
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -