📄 三功能合一.asm
字号:
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP INT0
ORG 000BH
AJMP TIM0
ORG 0013H
AJMP INT1
ORG 0023H
AJMP TIM1
MAIN: MOV SP,#60H ;设置堆栈初值
MOV P2,#00H
SETB P2.7 ;关锋鸣器
MOV 53H,#20
MOV 30H,#0 ;数码管设置初值
MOV 31H,#0
MOV 32H,#0
MOV 33H,#0
MOV 34H,#00H ;数码管位选通码
MOV 35H,#10H
MOV 36H,#20H
MOV 37H,#30H
MOV 38H,#40H ;数码管位选通码
MOV 39H,#50H
MOV 3AH,#60H
MOV 3BH,#70H
MOV 3CH,#0 ;数码管设置初值
MOV 3DH,#0
MOV 3EH,#0
MOV 3FH,#0
SETB P3.2
SETB P3.3
MOV TMOD,#12H ;设定定时器工作模式
MOV TH1,#0F8H ;定时1装2ms初值
MOV TL1,#30H
MOV 50H,#250 ;50H,51H软件定时1s初值
MOV 51H,#2
MOV 52H,#2 ;62H软件定时2ms初值
MOV 53H,#20
SETB ET1 ;开定时1
SETB TR1
SETB p2.5 ;按键接口
SETB p2.6
SETB P3.1
CLR 00H
CLR 01H
CLR 02H
CLR 03H
CLR 04H
CLR 06H
CLR 12H
DENGDAI: ACALL DISP1
ACALL DISP2
ACALL DISP3
ACALL DISP4
JNB P3.1,KEY1 ;键盘扫描
JNB P2.5,KEY2
JNB P2.6,KEY3
AJMP DENGDAI
KEY1: ACALL DISP1
ACALL DISP2
ACALL DISP3
ACALL DISP4
JNB P3.1,KEY1
LJMP BINZHANG
KEY2: ACALL DISP1
ACALL DISP2
ACALL DISP3
ACALL DISP4
JNB P2.5,KEY2
LJMP HEIDAI
KEY3: ACALL DISP1
ACALL DISP2
ACALL DISP3
ACALL DISP4
JNB P2.6,KEY3
LJMP XUNGUANG
;~~~~~~~~~~~~~~~~~~~~~~~各功能子程序~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;###########################################################
;~~~~~~~~~~~~~~~~~~~~~~~避障子程序~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BINZHANG: MOV P3,#0FFH
MOV TH0,#0F3H ;定时0装12uS初值
MOV TL0,#0F3H
SETB EX0
CLR IT0
SETB ET0 ;开定时0
SETB TR0
SETB EA
MOV P1,#17H ;启动小车
AA: ACALL DISP1
ACALL DISP2
ACALL DISP3
ACALL DISP4
ACALL FRJC ;调用霍尔传感子程序
JMP AA
;~~~~~~~~~~定时0中断服务~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TIM0: CPL P1.6
RETUR: RETI
;^^^^^^^^^^^^^^^^^^^^^外部中断0服务子程序^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
INT0: CLR EA
;;MOV P1,#6BH ;反转
SETB 03H ;设03H为反转标志位
MOV 5AH,#200 ;倒车延时寄存器6BH*40MS
MOV 5BH,#200 ;转弯延时寄存器6CH*40MS
RETER: SETB EA
RETI
;****************************************************************
;~~~~~~~~~~~外部中断1服务~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
INT1: CLR EA
NOP
NOP
JNB P2.1,HDZ ;扫描左黑带信号
JNB P2.2,HDY ;扫描右黑带信号
AJMP INT1EXIT
HDZ: SETB 01H ;左黑带检测
CLR P1.0
MOV 59H,#12 ;转弯延时寄存器
AJMP INT1EXIT
HDY: SETB 02H ;右黑带检测
CLR P1.1
MOV 58H,#12 ;转弯延时寄存器
AJMP INT1EXIT
INT1EXIT: SETB EA
REDEXQ: RETI
;###########################################################################
;~~~~~~~~~~~~~~~~~~~~~~~寻黑带程序~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
HEIDAI: SETB EX1
;CLR IT1
SETB IT1
SETB EA
MOV P1,#17H
BB: ACALL DISP1
ACALL DISP2
ACALL DISP3
ACALL DISP4
ACALL FRJC ;调用霍尔传感子程序
JMP BB
;**************************************************************************
;~~~~~~~~~~~~~~~~~~~~~~~寻光程序~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
XUNGUANG: SETB 00H
SETB EA
MOV P1,#17H
CC: ACALL SIMPLE ;ADC电压采样
ACALL BIJAO ;ADC采样电压比较
ACALL PANDUAN ;寻光行驶方向判断
ACALL FRJC ;调用霍尔传感子程序
ACALL DISP1
ACALL DISP2
ACALL DISP3
ACALL DISP4
AJMP CC
;~~~~~~~~~~~~~~~~~~~~显示子程序~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;显示8位数码管分4组显示
DISP1: MOV 5EH,#2 ;1显示1、2位
MOV R0,#30H
MOV R1,#34H
DIS1: MOV A,@R0
ADD A,@R1
MOV P0,A
ACALL DELAY
INC R0
INC R1
DJNZ 5EH,DIS1
RET
DISP2: MOV 5EH,#2 ;2显示3、4位
MOV R0,#32H
MOV R1,#36H
DIS2: MOV A,@R0
ADD A,@R1
MOV P0,A
ACALL DELAY
INC R0
INC R1
DJNZ 5EH,DIS2
RET
DISP3: MOV 5EH,#2 ;3显示5、6位
MOV R0,#38H
MOV R1,#3CH
DIS3: MOV A,@R0
ADD A,@R1
MOV P0,A
ACALL DELAY
INC R0
INC R1
DJNZ 5EH,DIS3
CHU3: RET
DISP4: MOV 5EH,#2 ;4显示7、8位
MOV R0,#3AH
MOV R1,#3EH
DIS4: MOV A,@R0
ADD A,@R1
MOV P0,A
ACALL DELAY
INC R0
INC R1
DJNZ 5EH,DIS4
CHU4: RET
;~~~~~~~~~~~~~~~~~~~~显示延时子程序~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DELAY: MOV R5,#11
KK1: MOV R6,#5
DJNZ R6,$
DJNZ R5,KK1
RET
;$$$$$$$$$$$$$$$$$ 霍尔元件计路程子程序 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
FRJC: JNB 06H,FRCHD
JNB P2.4,FRCHD
INC 33H
MOV A,33H
CJNE A,#10,FRRR
MOV 33H,#0
INC 32H
MOV A,32H
CJNE A,#10,FRRR
MOV 32H,#0
INC 31H
MOV A,31H
CJNE A,#10,FRRR
MOV 31H,#0
INC 30H
MOV A,30H
CJNE A,#10,FRRR
MOV 30H,#0
FRRR: CLR 06H
FRCHD: RET
;***********定时器1之,1秒计时,250Hz红外线波,倒车延时,车转弯子程序****************
;*******************250Hz红外线波产生***********************************
TIM1: PUSH ACC
PUSH PSW
MOV TH1,#0F8H
MOV TL1,#40H
JB 00H,FR
DJNZ 52H,HING
CLR P1.6
CLR ET0
MOV 52H,#2
AJMP FR
HING: SETB P1.6
SETB ET0
;$$$$$$$$$$$$$$$$$ 霍尔元件计路程标志位 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
FR: JB P2.4,ZD
SETB 06H
;~~~~~~~~~~~~~~~~~~~~~~ 40MS延时 ~~~~~~~~~~~~~~~~~~~~~~~~
ZD: DJNZ 53H,HDYC ;40MS定时是否到
MOV 53H,#20 ;40MS再送初值
;******************** 黑带转弯延时 ****************************
JNB 01H,HDZC ;左黑带
DJNZ 59H,ALLEX
SETB P1.0
CLR 01H
AJMP ALLEX
HDZC: JNB 02H,HDYC ;右黑带
DJNZ 58H,ALLEX
SETB P1.1
CLR 02H
AJMP ALLEX
;############### 倒车延时 ########################################
HDYC: JB 00H,ALLEX
JNB 03H,REDEX
MOV P1,#6BH
CLR P2.7
DJNZ 5AH,ALLEX ;红外线倒车延时是否到
CLR P1.1 ;倒车时转弯
CLR 03H
SETB P2.7
SETB 04H
NOP
NOP
REDEX: JNB 04H,ALLEX ;车转弯延时标志位
DJNZ 5BH,ALLEX ;车转弯延时是否到
MOV P1,#17H ;车转弯后直行
CLR 04H
ALLEX: DJNZ 50H,PP1
DJNZ 51H,PP12 ;1秒到否??
;#############################1秒计时########################
INC 3FH
MOV A,3FH
CJNE A,#10,PP
MOV 3FH,#0
INC 3EH
MOV A,3EH
CJNE A,#6,PP
MOV 3EH,#0
INC 3DH
MOV A,3DH
CJNE A,#10,PP
MOV 3DH,#0
INC 3CH
MOV A,3CH
CJNE A,#6,PP
MOV 3CH,#0
PP: MOV 51H,#2
PP12: MOV 50H,#250
PP1: POP PSW
POP ACC
RETI
;**************************************************************************
;~~~~~~~~~~~~~~~~~~~采样电压子程序~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SIMPLE: MOV 40H,#0
MOV 41H,#0
MOV 42H,#0
MOV A,#00H
;MOV DPTR,#0000H ;选IN0通道
CLR P2.0
MOV DPH,P2
MOV DPL,#00H
MOVX @DPTR,A ;启动ADC0809
JNB P1.7,$ ;判断ADC是否转换完毕
;MOV DPTR,#0000H
MOVX A,@DPTR
MOV 40H,A ;转换结果暂存40H单元
ACALL DELAY ;考虑ADC转换速度
MOV A,#00H
;MOV DPTR,#0001H ;选IN1通道
CLR P2.0
MOV DPH,P2
MOV DPL,#02H
MOVX @DPTR,A ;启动ADC0809
JNB P1.7,$ ;判断ADC是否转换完毕
;MOV DPTR,#0001H
MOVX A,@DPTR
MOV 41H,A ;转换结果暂存41H单元
ACALL DELAY ;考虑ADC转换速度
MOV A,#00H
;MOV DPTR,#0002H ;选IN2通道
CLR P2.0
MOV DPH,P2
MOV DPL,#01H
MOVX @DPTR,A ;启动ADC0809
JNB P1.7,$ ;判断ADC是否转换完毕
;MOV DPTR,#0002H
MOVX A,@DPTR
MOV 42H,A ;转换结果暂存42H单元
ACALL DELAY ;考虑ADC转换速度
ACALL DISP1 ;调用显示子程序
ACALL DISP2
ACALL DISP3
ACALL DISP4
RET
;~~~~~~~~~~~~~~~~~~~~~电压比较子程序~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BIJAO: CLR 20H ;标志位清零
CLR 21H
CLR 22H
MOV A,40H
CJNE A,41H,BJ
BJ: JNB CY,IN0 ;比较IN0通道大或IN1通道大
MOV A,41H
CJNE A,42H,BJ5
BJ5: JNB CY,IN1 ;比较IN1通道大或IN2通道大
SETB 22H
AJMP EXIT
IN1: SETB 21H
AJMP EXIT
IN0: CJNE A,42H,BJ3
BJ3: JNB CY,BJ4 ;比较IN0通道大或IN2通道大
SETB 22H
AJMP EXIT
BJ4: SETB 20H
EXIT: RET
;********************************************************************************
PANDUAN: JB 20H,ZUO
JB 21H,PEXIT ;前进
JB 22H,YOU
ZUO: CLR P1.0
MOV R3,#100 ;转弯时间
ZZ: ACALL DISP1 ;调用显示子程序
ACALL DISP2
ACALL DISP3
ACALL DISP4
DJNZ R3,ZZ
SETB P1.0
AJMP PEXIT
YOU: CLR P1.1
MOV R3,#100 ;转弯时间
YY: ACALL DISP1 ;调用显示子程序
ACALL DISP2
ACALL DISP3
ACALL DISP4
DJNZ R3,YY
SETB P1.1
PEXIT: RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -