展开全部
你的问题问得太粗了,没一点实际设计目的,只有拿我做的实例给你参考了。下面程序是我完成07年电子设计竞赛中小车走跷跷板平衡问题的实例,正是用的水银开关解决倾角判断测量问题,其中包含有一段水银开关测倾角的子程序(标有注释自己读吧),供你参考。
因为程序涉及我的版权,只好删掉一些无关紧要的地方,所以不能让你编译成功,仅供你阅读,请谅解!
更多电子问题请关注我!zhidao_ceo竭诚为您解答!
NOWSTEP EQU 28H
BEGINSPEED EQU 29H
DFSPD EQU 2AH
NOWANGLE EQU 2BH
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INTR_0
ORG 0013H
LJMP INTR_1
ORG 。。。。。
MAIN: DJNZ R0,$
MOV SP,#70H
MOV P1,#0FFH
MOV P3,#0FFH
MOV BEGINSPEED,#80D ;起始速度
STEP_TABLE:MOV 20H,#11111011B ;1
MOV 21H,#11111001B ; 2
MOV 22H,#11111101B ; 3
MOV 23H,#11110101B ; 4
MOV 24H,#11110111B ; 5
MOV 25H,#11110110B ; 6
MOV 26H,#。。。。。。 ; 7
MOV 27H,#11111010B ; 8
MOV R0,#20H
MOV NOWSTEP,R0
;yyf07year
NOP
SPEED_UP1:
;步数=256*(B-1)+A
MOV A,#70D
SPU1: MOV B,#32D
SPU2: LCALL RUNZ
LCALL DELAY_UP
DJNZ B,SPU2
DJNZ ACC,SPU1
NEAR_CENTRE:
MOV A,#70
NR1: MOV B,#12
NR2: MOV DFSPD,#7
LCALL RUNZ
LCALL DELAY_DF
DJNZ B,NR2
DJNZ ACC,NR1
MOV A,#40
NR3: MOV B,#6
NR4: MOV DFSPD,#20
LCALL RUNZ
LCALL DELAY_DF
;yyf07year
DJNZ B,NR4
DJNZ ACC,NR3
MOV A,#30
NR5: MOV B,#3
NR6: MOV DFSPD,#50
LCALL RUNZ
LCALL DELAY_DF
DJNZ B,NR6
DJNZ ACC,NR5
CHECK_BALANCE: ;水银开关检测角度
MOV P1,#0FFH
MOV A,P1
JNB ACC.0,FAST_BACK ;倾斜角度1
JNB ACC.1,FAST_BACK ;倾斜角度2
JB ACC.2,FAST_BACK ;倾斜角度3
JB ACC.3,FAST_BACK ;倾斜角度4
MOV DFSPD,#165
LCALL RUNZ
LCALL DELAY_DF
JMP CHECK_BALANCE
FAST_BACK:
MOV DFSPD,#80
MOV A,#6
FB1:LCALL RUNF
LCALL DELAY_DF
DJNZ ACC,FB1
MOV DFSPD,#18
MOV A,#12
FB2:LCALL RUNF
LCALL DELAY_DF
DJNZ ACC,FB2
MOV DFSPD,#7
MOV A,#75
FB3:LCALL RUNF
LCALL DELAY_DF
DJNZ ACC,FB3
MOV DFSPD,#90
;yyf07year
MOV A,#13
FB4:LCALL RUNF
LCALL DELAY_DF
DJNZ ACC,FB4
;..............
JMP KEEP_BALANCE
KEEP_BALANCE:
LCALL DELAY_SEC
LCALL DELAY_SEC
MOV A,P1
JB ACC.0,CHECK_BALANCE
JB ACC.3,GOBACK
JMP ALARM
MOV DFSPD,#160
LCALL DELAY_DF
GOBACK:MOV A,#255
MOV DFSPD,#20
LCALL RUNF
DJNZ ACC,GOBACK
JMP CHECK_BALANCE
ALARM: CLR P3.0
CLR P3.7
CLR P3.1
NOP
。。。。。
NOP
NOP
SETB P3.1
SETB P3.7
DELAY_10SEC:
MOV R0,#100
DLS51: MOV R1,#200
DLS52: MOV R2,#250
DJNZ R2,$
DJNZ R1,DLS52
DJNZ R0,DLS51
SETB P3.0
CLR P3.1
NOP
SETB P3.1
TOPOINTB: MOV A,#70
TB1: MOV B,。。。。。。。。
TB2: MOV DFSPD,。。。
LCALL RUNZ
LCALL DELAY_DF
DJNZ B,TB2
DJNZ ACC,TB1
LCALL DELAY_SEC
LCALL DELAY_SEC
LCALL DELAY_SEC
LCALL DELAY_SEC
LCALL DELAY_SEC
TOPOINTA: MOV A,#70
TA1: MOV B,。。。。。。。。。
TA2: MOV DFSPD,#8
LCALL RUNF
LCALL DELAY_DF
DJNZ B,TA2
DJNZ ACC,TA1
CLR P3.1
NOP
SETB P3.1
KSTAY: NOP
JMP KSTAY
TOCHECK_BALANCE:
LJMP CHECK_BALANCE
RUNZ: PUSH 00H
MOV R0,NOWSTEP ;正向转动;NOWSTEP为上次步进后,当前步位
INC R0
CJNE R0,#28H,RTOZ
MOV R0,。。。。
RTOZ: MOV P2,@R0
MOV NOWSTEP,R0
POP 00H
RET
RUNF: PUSH 00H
MOV R0,NOWSTEP ;反向转动;NOWSTEP为上次步进后,当前步位
DEC R0
CJNE R0,#1FH,RTOF
MOV R0,#27H
RTOF: MOV P2,@R0
MOV NOWSTEP,R0
POP 00H
RET
;yyf07year
DELAY_UP: PUSH ACC
PUSH B
PUSH 00H ;BEGINSPPED为起始速率寄存器
PUSH 01H
PUSH 02H
MOV R0,BEGINSPEED
CJNE R0,#3,TOU1
JMP TOU2
TOU1: DEC R0
MOV BEGINSPEED,R0
TOU2: MOV R1,BEGINSPEED
DLU2: MOV R2,#100
DLU3: DJNZ R2,DLU3
DJNZ R1,DLU2
POP 02H
POP 01H
POP 00H
POP B
POP ACC
RET
DELAY_DF: ;自定义速度
PUSH 00H ;DFSPD为自定义速率寄存器
PUSH 01H
PUSH 02H
MOV R1,DFSPD
DLD2: MOV R2,#100D
DLD3: DJNZ R2,DLD3
DJNZ R1,DLD2
POP 02H
POP 01H
。。。。
RET
DELAY_SEC: PUSH 00H
PUSH 01H
PUSH 02H
MOV R0,#250
DLS1: MOV R1,#200
DLS2: MOV R2,#10
DJNZ R2,$
DJNZ R1,DLS2
DJNZ R0,DLS1
POP 02H
POP 01H
POP 00H
RET
INTR_0: NOP
;yyf07year
INTR_1: NOP
toend: nop
END
更多电子问题请关注我!zhidao_ceo竭诚为您解答!
因为程序涉及我的版权,只好删掉一些无关紧要的地方,所以不能让你编译成功,仅供你阅读,请谅解!
更多电子问题请关注我!zhidao_ceo竭诚为您解答!
NOWSTEP EQU 28H
BEGINSPEED EQU 29H
DFSPD EQU 2AH
NOWANGLE EQU 2BH
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INTR_0
ORG 0013H
LJMP INTR_1
ORG 。。。。。
MAIN: DJNZ R0,$
MOV SP,#70H
MOV P1,#0FFH
MOV P3,#0FFH
MOV BEGINSPEED,#80D ;起始速度
STEP_TABLE:MOV 20H,#11111011B ;1
MOV 21H,#11111001B ; 2
MOV 22H,#11111101B ; 3
MOV 23H,#11110101B ; 4
MOV 24H,#11110111B ; 5
MOV 25H,#11110110B ; 6
MOV 26H,#。。。。。。 ; 7
MOV 27H,#11111010B ; 8
MOV R0,#20H
MOV NOWSTEP,R0
;yyf07year
NOP
SPEED_UP1:
;步数=256*(B-1)+A
MOV A,#70D
SPU1: MOV B,#32D
SPU2: LCALL RUNZ
LCALL DELAY_UP
DJNZ B,SPU2
DJNZ ACC,SPU1
NEAR_CENTRE:
MOV A,#70
NR1: MOV B,#12
NR2: MOV DFSPD,#7
LCALL RUNZ
LCALL DELAY_DF
DJNZ B,NR2
DJNZ ACC,NR1
MOV A,#40
NR3: MOV B,#6
NR4: MOV DFSPD,#20
LCALL RUNZ
LCALL DELAY_DF
;yyf07year
DJNZ B,NR4
DJNZ ACC,NR3
MOV A,#30
NR5: MOV B,#3
NR6: MOV DFSPD,#50
LCALL RUNZ
LCALL DELAY_DF
DJNZ B,NR6
DJNZ ACC,NR5
CHECK_BALANCE: ;水银开关检测角度
MOV P1,#0FFH
MOV A,P1
JNB ACC.0,FAST_BACK ;倾斜角度1
JNB ACC.1,FAST_BACK ;倾斜角度2
JB ACC.2,FAST_BACK ;倾斜角度3
JB ACC.3,FAST_BACK ;倾斜角度4
MOV DFSPD,#165
LCALL RUNZ
LCALL DELAY_DF
JMP CHECK_BALANCE
FAST_BACK:
MOV DFSPD,#80
MOV A,#6
FB1:LCALL RUNF
LCALL DELAY_DF
DJNZ ACC,FB1
MOV DFSPD,#18
MOV A,#12
FB2:LCALL RUNF
LCALL DELAY_DF
DJNZ ACC,FB2
MOV DFSPD,#7
MOV A,#75
FB3:LCALL RUNF
LCALL DELAY_DF
DJNZ ACC,FB3
MOV DFSPD,#90
;yyf07year
MOV A,#13
FB4:LCALL RUNF
LCALL DELAY_DF
DJNZ ACC,FB4
;..............
JMP KEEP_BALANCE
KEEP_BALANCE:
LCALL DELAY_SEC
LCALL DELAY_SEC
MOV A,P1
JB ACC.0,CHECK_BALANCE
JB ACC.3,GOBACK
JMP ALARM
MOV DFSPD,#160
LCALL DELAY_DF
GOBACK:MOV A,#255
MOV DFSPD,#20
LCALL RUNF
DJNZ ACC,GOBACK
JMP CHECK_BALANCE
ALARM: CLR P3.0
CLR P3.7
CLR P3.1
NOP
。。。。。
NOP
NOP
SETB P3.1
SETB P3.7
DELAY_10SEC:
MOV R0,#100
DLS51: MOV R1,#200
DLS52: MOV R2,#250
DJNZ R2,$
DJNZ R1,DLS52
DJNZ R0,DLS51
SETB P3.0
CLR P3.1
NOP
SETB P3.1
TOPOINTB: MOV A,#70
TB1: MOV B,。。。。。。。。
TB2: MOV DFSPD,。。。
LCALL RUNZ
LCALL DELAY_DF
DJNZ B,TB2
DJNZ ACC,TB1
LCALL DELAY_SEC
LCALL DELAY_SEC
LCALL DELAY_SEC
LCALL DELAY_SEC
LCALL DELAY_SEC
TOPOINTA: MOV A,#70
TA1: MOV B,。。。。。。。。。
TA2: MOV DFSPD,#8
LCALL RUNF
LCALL DELAY_DF
DJNZ B,TA2
DJNZ ACC,TA1
CLR P3.1
NOP
SETB P3.1
KSTAY: NOP
JMP KSTAY
TOCHECK_BALANCE:
LJMP CHECK_BALANCE
RUNZ: PUSH 00H
MOV R0,NOWSTEP ;正向转动;NOWSTEP为上次步进后,当前步位
INC R0
CJNE R0,#28H,RTOZ
MOV R0,。。。。
RTOZ: MOV P2,@R0
MOV NOWSTEP,R0
POP 00H
RET
RUNF: PUSH 00H
MOV R0,NOWSTEP ;反向转动;NOWSTEP为上次步进后,当前步位
DEC R0
CJNE R0,#1FH,RTOF
MOV R0,#27H
RTOF: MOV P2,@R0
MOV NOWSTEP,R0
POP 00H
RET
;yyf07year
DELAY_UP: PUSH ACC
PUSH B
PUSH 00H ;BEGINSPPED为起始速率寄存器
PUSH 01H
PUSH 02H
MOV R0,BEGINSPEED
CJNE R0,#3,TOU1
JMP TOU2
TOU1: DEC R0
MOV BEGINSPEED,R0
TOU2: MOV R1,BEGINSPEED
DLU2: MOV R2,#100
DLU3: DJNZ R2,DLU3
DJNZ R1,DLU2
POP 02H
POP 01H
POP 00H
POP B
POP ACC
RET
DELAY_DF: ;自定义速度
PUSH 00H ;DFSPD为自定义速率寄存器
PUSH 01H
PUSH 02H
MOV R1,DFSPD
DLD2: MOV R2,#100D
DLD3: DJNZ R2,DLD3
DJNZ R1,DLD2
POP 02H
POP 01H
。。。。
RET
DELAY_SEC: PUSH 00H
PUSH 01H
PUSH 02H
MOV R0,#250
DLS1: MOV R1,#200
DLS2: MOV R2,#10
DJNZ R2,$
DJNZ R1,DLS2
DJNZ R0,DLS1
POP 02H
POP 01H
POP 00H
RET
INTR_0: NOP
;yyf07year
INTR_1: NOP
toend: nop
END
更多电子问题请关注我!zhidao_ceo竭诚为您解答!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询