📄 solar.a51
字号:
INCLUDE REG_51.PDF
RB0 EQU 000H ; Select Register Bank 0
RB1 EQU 008H ; Select Register Bank 1 ...poke to PSW to use
LDR1 EQU P3.0
LDR2 EQU P3.5
EMERGENCY EQU P3.7 ;WHITE, +12V VIOLET, GND GREY
LIM1 EQU P1.2
LIM2 EQU P1.3
SW1 EQU P1.0 ;START Switch
SW2 EQU P1.1 ;STOP Switch
COIL1 EQU P1.4
COIL2 EQU P1.5
COIL3 EQU P1.6
COIL4 EQU P1.7
DSEG ; This is internal data memory
ORG 20H ; Bit adressable memory
MOTT: DS 1
STACK DATA 3FH
CSEG AT 0 ; RESET VECTOR
;---------==========----------==========---------=========---------
; PROCESSOR INTERRUPT AND RESET VECTORS
;---------==========----------==========---------=========---------
ORG 00H ; Reset
JMP MAIN
;---------==========----------==========---------=========---------
; Main routine. Program execution starts here.
;---------==========----------==========---------=========---------
MAIN:
MOV PSW,#RB0 ; Select register bank 0
MOV P1,#0FH
MOV MOTT,#01H
CLR EMERGENCY
MMINS:
CALL MOTORR
JB LIM2,MMINS
CLR P1.4
CLR P1.5
CLR P1.6
CLR P1.7
SETB SW1 ;Wait for start button pressed LIGHT=0 dark=1
JB SW1,$
NOP
JNB SW1,$
CLR P3.1
MMAIN:SETB LDR1
SETB LDR2
SETB LIM1
SETB LIM2
JB LDR1,SD1
JB LDR2,SD2
JNB LIM1,MMAINS
JNB SW2,STOP
JB LIM2,MMAIN
CLR P1.4
CLR P1.5
CLR P1.6
CLR P1.7
AJMP START_TRACKING
STOP:
SETB P3.1
MMIS:
CALL MOTORR
JB LIM2,MMIS
JNB SW2,$
AJMP MAIN
SD1: JB LDR2,SD3 ;
SD4: ;CALL MOTORL ;LD2 IS BRIGHT
JB LDR1,SD4 ;Rotate till ldr1 get ligh
JB LDR2,SD2
AJMP START_TRACKING
SD2: CALL MOTORL ;ROTATE TILL LDR2 GET LIGHT
JNB LIM1,MMAINS
JB LDR2,SD2
JB LDR1,SD1
AJMP START_TRACKING
SD3: SETB LIM1 ;both LDR in dark
SETB LIM2
SETB EMERGENCY
JNB LIM1,MMAINS
; CALL MOTORL
JNB LDR1,MMAIN
JNB LDR2,MMAIN
AJMP SD3
MMAINS:
CALL MOTORR
JB LIM2,MMAINS
SNM: SETB EMERGENCY
CALL DELAY
JNB LDR1,SNM
CALL DELAY
JB LDR2,SNM
CLR EMERGENCY
AJMP MMAIN
MOTORL:
MOV A,MOTT
CJNE A,#01H,XC1
MOV MOTT,#04H
CALL MOTOR_ROTATE
CALL DELAY
RET
XC1: DEC MOTT
CALL MOTOR_ROTATE
CALL DELAY
RET
MOTORR:
MOV A,MOTT
CJNE A,#04H,XC2
MOV MOTT,#01H
CALL MOTOR_ROTATE
CALL DELAY
RET
XC2: INC MOTT
CALL MOTOR_ROTATE
CALL DELAY
RET
START_TRACKING:
AJMP MMAIN
MOTOR_ROTATE:
MOV A,MOTT
CJNE A,#01H,GB1
SETB P1.7
CLR P1.6
CLR P1.5
SETB P1.4
RET
GB1: CJNE A,#02H,GB2
SETB P1.7
SETB P1.6
CLR P1.5
CLR P1.4
RET
GB2: CJNE A,#03H,GB3
CLR P1.7
SETB P1.6
SETB P1.5
CLR P1.4
RET
GB3: CJNE A,#04H,GB4 ;66
CLR P1.7
CLR P1.6
SETB P1.5
SETB P1.4
GB4: RET
DELAY:
MOV R0,#45H ;0A
REP2: MOV R1,#99H ;99
REP1: NOP
DJNZ R1,REP1
DJNZ R0,REP2
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -