📄 robot_v01.asm
字号:
;SLEEP 150UA
;REC 20MA
;LIGHT 60MA
;LIGHT+TRANSMIT 90MA
;TEST BY LZY 2007NOV14
;--------------------------------------------------------------------------
; TEST 18F65J10 PROGRAM
;
; MPU: PIC18F65J11
; CHECK SUM :
; MAIN CRYSTAL OSCILLATOR : 8MHZ (PULL TO 32MHZ
; REAL TIMER CRYSTAL OSCILLATOR : 32768
; 2006SEP12
;-----------------------------------------------------------------------
LIST P=18F65J10,R=DEC
;----------------------------------------
INCLUDE "P18F65J10.INC"
CBLOCK 0X0100 ; NAME_1 WILL BE ASSIGNED 20
FLAG0,FLAG1,FLAG2,FLAG3,FLAG4,NOTICEFLAG
CNT
ROBOT_STATUSL
WALK_CNT
WALK_STEP
WALK_DIRECT
REC_CNT
REC_BIT_CNT
CNT0
VOIC_CNT
PIC_ADDRH,PIC_ADDRM,PIC_ADDRL
IR_HCNT,IR_LCNT
IR_DATAL
SERVO_CNT1,SERVO_CNT2
DEGREE1,DEGREE2,DEGREE3,DEGREE4,DEGREE5,DEGREE6,DEGREE7,DEGREE8,DEGREE9,DEGREE10
DEGREE11,DEGREE12,DEGREE13,DEGREE14,DEGREE15,DEGREE16,DEGREE17,DEGREE18,DEGREE19,DEGREE20
DEGREE21,DEGREE22,DEGREE23,DEGREE24,DEGREE25,DEGREE26,DEGREE27,DEGREE28
DEGREE29,DEGREE30,DEGREE31,DEGREE32
SERVO_M1,SERVO_M2,SERVO_M3,SERVO_M4
LATE_BAK,LATG_BAK,LATF_BAK
ENDC
;------------------------------
;------------------------------
;------------------------------
;------------------------------
#DEFINE FLAG_20MS FLAG0,0
#DEFINE REC_IR_OK FLAG0,0
;------------------------------
;------------------------------
;------------------------------
#DEFINE PIN_MOT1 LATD,7
#DEFINE PIN_MOT2 LATD,6
#DEFINE PIN_MOT3 LATD,5
#DEFINE PIN_MOT4 LATD,4
#DEFINE PIN_MOT5 LATD,3
#DEFINE PIN_MOT6 LATD,2
#DEFINE PIN_MOT7 LATD,1
#DEFINE PIN_MOT8 LATD,0
#DEFINE SOUND LATE,7
#DEFINE PIN_MOT10 LATE,6 ;FINGER1 HEAD
#DEFINE PIN_MOT11 LATE,5 ;LEG1 SNAP
#DEFINE PIN_MOT12 LATE,4 ;FINGER2
#DEFINE PIN_MOT13 LATE,3 ;LEG2
#DEFINE PIN_MOT14 LATE,2 ;FINGER3
#DEFINE PIN_MOT15 LATE,1 ;LEG3
#DEFINE PIN_MOT16 LATE,0 ;FINGER4
#DEFINE PIN_MOT17 LATG,0 ;LEG4
#DEFINE PIN_MOT18 LATG,1 ;FINGER
#DEFINE PIN_MOT19 LATG,2
#DEFINE PIN_MOT20 LATG,3
#DEFINE PIN_MOT21 LATG,4
#DEFINE PIN_MOT22 LATF,7
#DEFINE PIN_MOT23 LATF,6
#DEFINE PIN_MOT24 LATF,5
#DEFINE PIN_MOT25 LATF,4
#DEFINE PIN_MOT26 LATF,3
#DEFINE PIN_MOT27 LATF,2
#DEFINE PIN_MOT28 LATF,1
;-------------------------------
#DEFINE PIN_IR PORTC,0
;----------------
#DEFINE TP LATA,3
;-------------------------
#DEFINE F_CE LATC,2
;**********************************
;**********************************
F_I EQU 125-40
F_M EQU 125
F_O EQU 125+40
L_R EQU 125-15
L_M EQU 125
L_L EQU 125+15
H_D EQU 140
H_U EQU 180
T_D EQU 90
T_U EQU 110
;****************
HEAD EQU 0
SNAP EQU 1
FINGERR EQU 2
HANDR EQU 3
FOOTR EQU 4
LEGR EQU 5
TAIL EQU 6
BACK EQU 7
FOOTL EQU 8
LEGL EQU 9
FINGERL EQU 10
HANDL EQU 11
FING_NO EQU 19
;****************
ORG 000H
BRA POWER_ON
ORG 008H
ORG 018H
;******************************
POWER_ON:
CLRWDT
CLRF TOSU
CLRF TOSH
CLRF TOSL
MOVLB 1
MCU_INIT:
CALL IO_INIT
CALL CPU_CLOCK_32M
BSF F_CE
CALL STAND_UP
CLRF WALK_CNT
CLRF WALK_STEP
;***************
MCU_INIT2:
MCU_INIT4:
;**************
MOVLW 0
MOVWF VOIC_CNT
CALL SPEECH_V2
TEST_ME:
;*****************************
;*****************************
;*****************************
;*****************************
;*****************************
SETF SERVO_M1
SETF SERVO_M2
SETF SERVO_M3
SETF SERVO_M4
CLRF WALK_CNT
MAIN:
CLRF TMR1L
CLRF TMR1H
RCALL SERVO_MG995
BCF FLAG_20MS
MAIN2:
RCALL REC_IR_18MS
BTFSS REC_IR_OK
BRA MAIN_IR_END
MOVF IR_DATAL,W
MOVWF LATD
BSF WALK_CNT,7
MOVF IR_DATAL
CPFSEQ ROBOT_STATUSL
BRA MAIN_IR_NEW
BRA MAIN_IR_END
MAIN_IR_NEW:
MOVF IR_DATAL,W
ANDLW 7
MOVWF VOIC_CNT
MOVLW 0 ;DOWN
BTFSC ROBOT_STATUSL,5
MOVLW 6 ;LEFT
BTFSC ROBOT_STATUSL,4
MOVLW 12 ;RIGHT
BTFSC ROBOT_STATUSL,3
MOVLW 18 ;UP
ADDWF VOIC_CNT
MOVLW 24
CPFSLT VOIC_CNT
CLRF VOIC_CNT
CALL SPEECH_V2
MOVF IR_DATAL,W
MOVWF ROBOT_STATUSL
CLRWDT
;--------------
;--------------
CLRF WALK_STEP
MAIN_IR_END:
;BSF WALK_CNT,6
; MOVLW 01000000B
; MOVWF ROBOT_STATUSL
CALL ROBOT_WALK
;--------------------------
MAIN_END
CALL WORK_1
BTFSS FLAG_20MS
BRA MAIN_END
MOVF WALK_CNT
BZ MAIN
DECF WALK_CNT
BRA MAIN
;******************************
;******************************
;******************************
;******************************
;******************************
;******************************
REC_IR_18MS
MOVLW 150 ;
CPFSLT TMR1H
BRA REC_IR_18MS_ERROR
MIN_12P EQU 18
MAX_12P EQU 78
MIN_20P EQU 86-20
MAX_20P EQU 86+20
MIN_40P EQU 173-40
MAX_40P EQU 173+40
TEST_30P EQU 256-130
MIN_48P EQU 170
REC_IR_18MS_HEAD:
BTFSC PIN_IR ;SINGAL=HIGH
BRA REC_IR_18MS
CALL GET_RI_LOW
BZ REC_IR_18MS
MOVLW MIN_48P
CPFSGT REC_CNT
BRA REC_IR_18MS
CALL GET_RI_HIGH
BZ REC_IR_18MS
MOVLW MIN_12P
CPFSGT REC_CNT
BRA REC_IR_18MS
MOVLW MAX_12P
CPFSLT REC_CNT
BRA REC_IR_18MS
MOVLW 8
MOVWF REC_BIT_CNT
CLRF IR_DATAL
REC_IR_18MS_DATA:
CALL GET_RI_LOW
BZ REC_IR_18MS
MOVLW MIN_12P
CPFSGT REC_CNT
BRA REC_IR_18MS
MOVLW MAX_12P
CPFSLT REC_CNT
BRA REC_IR_18MS
MOVF REC_CNT,W
MOVWF IR_HCNT
CALL GET_RI_HIGH
BZ REC_IR_18MS
MOVLW MAX_40P
CPFSLT REC_CNT
BRA REC_IR_18MS
MOVF REC_CNT,W
MOVWF IR_LCNT
ADDWF IR_HCNT,W
MOVWF REC_CNT
MOVLW MIN_20P
CPFSGT REC_CNT
BRA REC_IR_18MS
MOVLW MAX_40P
CPFSLT REC_CNT
BRA REC_IR_18MS
MOVLW TEST_30P
ADDWF REC_CNT
RRCF IR_DATAL
DECFSZ REC_BIT_CNT
BRA REC_IR_18MS_DATA
BTFSC IR_DATAL,0
INCF REC_BIT_CNT
BTFSC IR_DATAL,1
INCF REC_BIT_CNT
BTFSC IR_DATAL,2
INCF REC_BIT_CNT
BTFSC IR_DATAL,3
INCF REC_BIT_CNT
BTFSC IR_DATAL,4
INCF REC_BIT_CNT
BTFSC IR_DATAL,5
INCF REC_BIT_CNT
BTFSC IR_DATAL,6
INCF REC_BIT_CNT
RRNCF REC_BIT_CNT
MOVLW 0X80
ANDWF REC_BIT_CNT
MOVLW 0X80
ANDWF IR_DATAL,W
CPFSEQ REC_BIT_CNT
BRA REC_IR_18MS_ERROR
BCF REC_BIT_CNT,7
BSF REC_IR_OK
;MOVF IR_DATAL,W
;ANDLW 7
;MOVWF VOIC_CNT
;CALL SPEECH_V2
RETURN
REC_IR_18MS_ERROR:
BCF REC_IR_OK
RETURN
;******************************
;******************************
GET_RI_HIGH:
CLRF REC_CNT
GET_RI_HIGH2:
BTFSS PIN_IR
RETURN
BTFSS PIN_IR
RETURN
BTFSS PIN_IR
RETURN
BTFSS PIN_IR
RETURN
BTFSS PIN_IR
RETURN
BTFSS PIN_IR
RETURN
BTFSS PIN_IR
RETURN
BTFSS PIN_IR
RETURN
BTFSS PIN_IR
RETURN
BTFSS PIN_IR
RETURN
BTFSS PIN_IR
RETURN
BTFSS PIN_IR
RETURN
BTFSS PIN_IR
RETURN
BTFSS PIN_IR
RETURN
BTFSS PIN_IR
RETURN
BTFSS PIN_IR
RETURN
BTFSS PIN_IR
RETURN
BTFSS PIN_IR
RETURN
BTFSS PIN_IR
RETURN
BTFSS PIN_IR
RETURN
BTFSS PIN_IR
RETURN
BTFSS PIN_IR
RETURN
CLRWDT
INCF REC_CNT
BNZ GET_RI_HIGH2
RETURN
;******************************
;******************************
;******************************
GET_RI_LOW:
CLRF REC_CNT
GET_RI_LOW2:
BTFSC PIN_IR
RETURN
BTFSC PIN_IR
RETURN
BTFSC PIN_IR
RETURN
BTFSC PIN_IR
RETURN
BTFSC PIN_IR
RETURN
BTFSC PIN_IR
RETURN
BTFSC PIN_IR
RETURN
BTFSC PIN_IR
RETURN
BTFSC PIN_IR
RETURN
BTFSC PIN_IR
RETURN
BTFSC PIN_IR
RETURN
BTFSC PIN_IR
RETURN
BTFSC PIN_IR
RETURN
BTFSC PIN_IR
RETURN
BTFSC PIN_IR
RETURN
BTFSC PIN_IR
RETURN
BTFSC PIN_IR
RETURN
BTFSC PIN_IR
RETURN
BTFSC PIN_IR
RETURN
BTFSC PIN_IR
RETURN
BTFSC PIN_IR
RETURN
BTFSC PIN_IR
RETURN
CLRWDT
INCF REC_CNT
BNZ GET_RI_LOW2
RETURN
;******************************
WORK_1:
MOVLW 154
CPFSLT TMR1H
BSF FLAG_20MS
RETURN
;******************************
SERVO_TABLE
;LATE LATG LATF LATE LATG LATF
DB 10111111B,11111111B,11111111B,11011111B,11111111B,11111111B;11 1
DB 11101111B,11111111B,11111111B,11110111B,11111111B,11111111B;13
DB 11111011B,11111111B,11111111B,11111101B,11111111B,11111111B;15
DB 11111110B,11111111B,11111111B,11111111B,11111110B,11111111B;17
DB 11111111B,11111101B,11111111B,11111111B,11111011B,11111111B;19
DB 11111111B,11110111B,11111111B,11111111B,11101111B,11111111B;21
DB 11111111B,11111111B,01111111B,11111111B,11111111B,10111111B;23
DB 11111111B,11111111B,11011111B,11111111B,11111111B,11101111B;25
DB 11111111B,11111111B,11110111B,11111111B,11111111B,11111011B;27
DB 11111111B,11111111B,11111101B,11111111B,11111111B,11111111B;29
DB 11111111B,11111111B,11111111B,11111111B,11111111B,11111111B;31
;************************
;************************
;************************
SERVO_M_READ:
MOVWF PRODL
MOVLW 19
CPFSLT PRODL
RETURN
MOVLW UPPER SERVO_TABLE; LOAD TBLPTR WITH THE BASE
MOVWF TBLPTRU ; PIC_ADDRESS OF THE WORD
MOVLW HIGH SERVO_TABLE
MOVWF TBLPTRH
MOVLW LOW SERVO_TABLE
MOVWF TBLPTRL
MOVF PRODL,W
MULLW 3
MOVF PRODL,W
ADDWF TBLPTRL
MOVF PRODH,W
ADDWFC TBLPTRH
TBLRD*+; READ INTO TABLAT AND INCREMENT
MOVF TABLAT,W ; GET DATA
ANDWF LATE_BAK
TBLRD*+; READ INTO TABLAT AND INCREMENT
MOVF TABLAT,W ; GET DATA
ANDWF LATG_BAK
TBLRD*+; READ INTO TABLAT AND INCREMENT
MOVF TABLAT,W ; GET DATA
ANDWF LATF_BAK
RETURN
;******************************
;******************************
;******************************
;******************************
SERVO_MG995:
SETF LATE_BAK
SETF LATG_BAK
SETF LATF_BAK
MOVF SERVO_M1,W
RCALL SERVO_M_READ
MOVF SERVO_M2,W
RCALL SERVO_M_READ
MOVF SERVO_M3,W
RCALL SERVO_M_READ
MOVF SERVO_M4,W
RCALL SERVO_M_READ
MOVF LATE_BAK,W
MOVWF LATE
MOVF LATG_BAK,W
MOVWF LATG
MOVF LATF_BAK,W
MOVWF LATF
;------------------------------
;------------------------------
;------------------------------
;------------------------------
;------------------------------
;------------------------------
;------------------------------
;------------------------------
;------------------------------
;------------------------------
MOVLW 80
MOVWF SERVO_CNT1
MOVLW 6; 11
MOVWF SERVO_CNT2
SERVO_MG995_DELAY500US:
DECFSZ SERVO_CNT1
BRA SERVO_MG995_DELAY500US
DECFSZ SERVO_CNT2
BRA SERVO_MG995_DELAY500US
CLRF SERVO_CNT1
SERVO_MG995_OUT:
MOVF SERVO_CNT1,W
CPFSGT DEGREE10
BSF PIN_MOT10
CPFSGT DEGREE11
BSF PIN_MOT11
CPFSGT DEGREE12
BSF PIN_MOT12
CPFSGT DEGREE13
BSF PIN_MOT13
CPFSGT DEGREE14
BSF PIN_MOT14
CPFSGT DEGREE15
BSF PIN_MOT15
CPFSGT DEGREE16
BSF PIN_MOT16
CPFSGT DEGREE17
BSF PIN_MOT17
CPFSGT DEGREE18
BSF PIN_MOT18
CPFSGT DEGREE19
BSF PIN_MOT19
CPFSGT DEGREE20
BSF PIN_MOT20
CPFSGT DEGREE21
BSF PIN_MOT21
CPFSGT DEGREE22
BSF PIN_MOT22
CPFSGT DEGREE23
BSF PIN_MOT23
CPFSGT DEGREE24
BSF PIN_MOT24
CPFSGT DEGREE25
BSF PIN_MOT25
CPFSGT DEGREE26
BSF PIN_MOT26
CPFSGT DEGREE27
BSF PIN_MOT27
CPFSGT DEGREE28
BSF PIN_MOT28
CLRWDT
CLRWDT
CLRWDT
CLRWDT
CLRWDT
CLRWDT
CLRWDT
CLRWDT
CLRWDT
CLRWDT
CLRWDT
CLRWDT
CLRWDT
CLRWDT
CLRWDT
CLRWDT
INCFSZ SERVO_CNT1
BRA SERVO_MG995_OUT
SETF LATE
SETF LATG
SETF LATF
RETURN
;******************
;******************
;******************
;******************
;******************
;******************
;******************
CPU_CLOCK_8M:
BCF OSCTUNE,PLLEN
CPU_CLOCK_32M_B:
MOVLW 0000010B
MOVWF OSCCON
CPU_CLOCK_32M_WAIT:
CLRWDT
BTFSS OSCCON,OSTS
BRA CPU_CLOCK_32M_WAIT
RETURN
CPU_CLOCK_32M:
BSF OSCTUNE,PLLEN
BRA CPU_CLOCK_32M_B
CPU_CLOCK_32K:
BCF OSCTUNE,PLLEN
MOVLW 0000011B
MOVWF OSCCON
RETURN
;******************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -