📄 robot_v01bak.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=18F65J11,R=DEC
;----------------------------------------
INCLUDE "P18F65J11.INC"
CBLOCK 0X0100 ; NAME_1 WILL BE ASSIGNED 20
FLAG0,FLAG1,FLAG2,FLAG3,FLAG4,NOTICEFLAG
CNT
ROBOT_STATUSH,ROBOT_STATUSL
WORK_CNT
WORK_STEP
WORK_DIRECT
REC_CNT,REC_CNTL
REC_BIT_CNT
VOIC_CNT
PIC_ADDRH,PIC_ADDRM,PIC_ADDRL
IR_HCNT,IR_LCNT
IR_DATAH,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
ENDC
;------------------------------
;------------------------------
;------------------------------
;------------------------------
#DEFINE FLAG_20MS FLAG0,0
#DEFINE REC_IR_OK FLAG0,0
;------------------------------
;------------------------------
;------------------------------
#DEFINE PIN_SER1 LATD,7
#DEFINE PIN_SER2 LATD,6
#DEFINE PIN_SER3 LATD,5
#DEFINE PIN_SER4 LATD,4
#DEFINE PIN_SER5 LATD,3
#DEFINE PIN_SER6 LATD,2
#DEFINE PIN_SER7 LATD,1
#DEFINE PIN_SER8 LATD,0
#DEFINE SOUND LATE,7
#DEFINE PIN_SER10 LATE,6
#DEFINE PIN_SER11 LATE,5
#DEFINE PIN_SER12 LATE,4
#DEFINE PIN_SER13 LATE,3
#DEFINE PIN_SER14 LATE,2
#DEFINE PIN_SER15 LATE,1
#DEFINE PIN_SER16 LATE,0
#DEFINE PIN_SER17 LATG,0
#DEFINE PIN_SER18 LATG,1
#DEFINE PIN_SER19 LATG,5
#DEFINE PIN_SER20 LATG,3
#DEFINE PIN_SER21 LATG,4
#DEFINE PIN_SER22 LATF,7
#DEFINE PIN_SER23 LATF,6
#DEFINE PIN_SER24 LATF,5
#DEFINE PIN_SER25 LATF,4
#DEFINE PIN_SER26 LATF,3
#DEFINE PIN_SER27 LATF,2
#DEFINE PIN_SER28 LATF,1
;-------------------------------
#DEFINE PIN_IR PORTA,3
;----------------
#DEFINE TP LATC,6
;-------------------------
#DEFINE F_CE LATC,2
;**********************************
;**********************************
;**********************************
;****************
ORG 000H
BRA POWER_ON
ORG 008H
ORG 018H
;******************************
POWER_ON:
CLRWDT
CLRF TOSU
CLRF TOSH
CLRF TOSL
MOVLB 1
CLRF CCPR2L
MCU_INIT:
CALL IO_INIT
CALL CPU_CLOCK_32M
BSF F_CE
MOVLW 0
MOVWF CCPR2L
MOVWF CCPR1L
CLRF WORK_CNT
;***************
MCU_INIT2:
MCU_INIT4:
;**************
MOVLW 0
MOVWF VOIC_CNT
CALL SPEECH_V2
TEST_ME:
CLRWDT
;BRA TEST_ME
;*****************************
;*****************************
;*****************************
;*****************************
;*****************************
MAIN:
MOVLW 90
MOVWF DEGREE28
CLRF TMR1L
CLRF TMR1H
CALL SERVO_MG995
BCF FLAG_20MS
MAIN2:
CALL REC_IR_18MS
BTFSS REC_IR_OK
BRA MAIN_IR_END
MOVLW 50
MOVWF WORK_CNT
MOVF IR_DATAH
CPFSEQ ROBOT_STATUSH
BRA MAIN_IR_NEW
MOVF IR_DATAL
CPFSEQ ROBOT_STATUSL
BRA MAIN_IR_NEW
BRA MAIN_IR_END
MAIN_IR_NEW:
MOVF IR_DATAH
MOVWF ROBOT_STATUSH
MOVF IR_DATAL
MOVWF ROBOT_STATUSL
;--------------
;--------------
CLRF WORK_STEP
MAIN_IR_END:
CALL ROBOT_WORK
;--------------------------
MAIN_END
CALL WORK_1
BTFSS FLAG_20MS
BRA MAIN_END
MOVF WORK_CNT
BZ MAIN
DECF WORK_CNT
BRA MAIN
;******************************
;******************************
;******************************
;******************************
;******************************
;******************************
REC_IR_18MS
MOVLW 140 ;
CPFSLT TMR1H
BRA REC_IR_18MS_ERROR
MIN_8P EQU 18
MAX_8P EQU 24
MIN_24P EQU 54
MAX_24P EQU 72
MAX_16P EQU 48
MIN_48P EQU 180
REC_IR_18MS_HEAD:
BTFSS PIN_IR ;SINGAL=HIGH
BRA REC_IR_18MS
CALL GET_IR_HIGH
BZ REC_IR_18MS
MOVLW MIN_48P
CPFSGT REC_CNT
BRA REC_IR_18MS
CALL GET_IR_LOW
BZ REC_IR_18MS
MOVLW MIN_8P
CPFSGT REC_CNT
BRA REC_IR_18MS
MOVLW MAX_8P
CPFSLT REC_CNT
BRA REC_IR_18MS
MOVLW 10
MOVWF REC_BIT_CNT
CLRF IR_DATAH
CLRF IR_DATAL
REC_IR_18MS_DATA:
CALL GET_IR_HIGH
BZ REC_IR_18MS
MOVLW MIN_8P
CPFSGT REC_CNT
BRA REC_IR_18MS
MOVLW MAX_16P
CPFSLT REC_CNT
BRA REC_IR_18MS
MOVF REC_CNT,W
MOVWF IR_HCNT
CALL GET_IR_LOW
BZ REC_IR_18MS
MOVLW MIN_8P
CPFSGT REC_CNT
BRA REC_IR_18MS
MOVLW MAX_16P
CPFSLT REC_CNT
BRA REC_IR_18MS
MOVF REC_CNT,W
MOVWF IR_LCNT
ADDWF IR_HCNT,W
MOVWF REC_CNT
MOVLW MIN_24P
CPFSGT REC_CNT
BRA REC_IR_18MS
MOVLW MAX_24P
CPFSLT REC_CNT
BRA REC_IR_18MS
RRCF IR_DATAH
RRCF IR_DATAL
MOVF IR_LCNT,W
BSF IR_DATAH,1
CPFSGT IR_HCNT
BCF IR_DATAH,1
DECFSZ REC_BIT_CNT
BRA REC_IR_18MS_DATA
MOVLW B'00000011'
ANDWF IR_DATAH
BSF REC_IR_OK
RETURN
REC_IR_18MS_ERROR:
BCF REC_IR_OK
RETURN
;******************************
;******************************
GET_IR_LOW:
CLRF REC_CNT
GET_IR_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
INCFSZ REC_CNTL
BRA GET_IR_LOW2
RETURN
;******************************
;******************************
;******************************
GET_IR_HIGH:
CLRF REC_CNT
GET_IR_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
INCFSZ REC_CNTL
BRA GET_IR_HIGH2
RETURN
;******************************
WORK_1:
MOVLW 156
CPFSGT TMR1H
RETURN
BSF FLAG_20MS
RETURN
;******************************
;******************************
SERVO_MG995:
CLRF LATE
CLRF LATG
CLRF LATF
MOVLW 80
MOVWF SERVO_CNT1
MOVLW 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_SER10
CPFSGT DEGREE11
BSF PIN_SER11
CPFSGT DEGREE12
BSF PIN_SER12
CPFSGT DEGREE13
BSF PIN_SER13
CPFSGT DEGREE14
BSF PIN_SER14
CPFSGT DEGREE15
BSF PIN_SER15
CPFSGT DEGREE16
BSF PIN_SER16
CPFSGT DEGREE17
BSF PIN_SER17
CPFSGT DEGREE18
BSF PIN_SER18
CPFSGT DEGREE19
BSF PIN_SER19
CPFSGT DEGREE20
BSF PIN_SER20
CPFSGT DEGREE21
BSF PIN_SER21
CPFSGT DEGREE22
BSF PIN_SER22
CPFSGT DEGREE23
BSF PIN_SER23
CPFSGT DEGREE24
BSF PIN_SER24
CPFSGT DEGREE25
BSF PIN_SER25
CPFSGT DEGREE26
BSF PIN_SER26
CPFSGT DEGREE27
BSF PIN_SER27
CPFSGT DEGREE28
BSF PIN_SER28
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
;******************
IO_INIT:
MOVLW UPPER IO_TABLE; LOAD TBLPTR WITH THE BASE
MOVWF TBLPTRU ; PIC_ADDRESS OF THE WORD
MOVLW HIGH IO_TABLE
MOVWF TBLPTRH
MOVLW LOW IO_TABLE
MOVWF TBLPTRL
MOVLW 0X0F
MOVWF FSR0H
MOVLW 0XD5
MOVWF FSR0L
MOVLW 0X76
MOVWF CNT
IO_INT2:
TBLRD*+; READ INTO TABLAT AND INCREMENT
MOVF TABLAT,W ; GET DATA
MOVWF POSTDEC0
CLRWDT
DECFSZ CNT
BRA IO_INT2
CLRF INTCON
MOVLW 11000000B
MOVWF INTCON2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -