📄 2005-8-26.asm
字号:
K1 BCF STATUS,0 ;清C
MOVLW 3H ;设置误差2,影响精确度
SUBWF DATE6,W ;差值-2H
BTFSS STATUS,0 ;判C
GOTO Y1 ;若在允许误差范围之内
BSF PORTB,5 ;确定关指示灯灭
BSF PORTB,7 ;确定电机停转
BTFSS FLAG,3 ;电机运行标志
GOTO K4
MOVLW 019H
MOVWF COUNT6
CALL DELAY1
BCF FLAG,3
K4 BCF PORTB,4 ;开运行指示灯亮
BCF PORTB,6 ;电机正转
BSF FLAG,4
BCF FLAG,0
BSF FLAG,2 ;电机(正转)运行标志(针对突变)
GOTO START ;到开始
Y1 BSF PORTB,6 ;电机停止转动
BSF PORTB,4 ;开运行指示灯灭
BSF FLAG,0 ;置电机停标志位
BCF FLAG,2
GOTO START
;*********开运行********
X1 MOVF DATE5,W
BSF STATUS,0
BSF STATUS,2
SUBWF DATE4,W
MOVWF DATE6
BTFSC STATUS,2
GOTO Y1
BTFSS FLAG,0 ;电机运行标志
GOTO K2
BCF STATUS,0 ;判启动
MOVLW 4H
SUBWF DATE6,W
BTFSS STATUS,0
GOTO ADJUST1 ;误差<启动误差跳到Y2,不启动
MOVLW 019H
MOVWF COUNT6
CALL DELAY1
K2 BCF STATUS,0 ;清C
MOVLW 3H ;设置误差2,影响精确度
SUBWF DATE6,W ;差值-2H
BTFSS STATUS,0
GOTO Y2
BSF PORTB,4
BSF PORTB,6
BTFSS FLAG,2 ;电机运行标志
GOTO K3
MOVLW 019H
MOVWF COUNT6
CALL DELAY1 ;延时
BCF FLAG,2
K3 BCF PORTB,5 ;关运行指示灯亮
BCF PORTB,7 ;电机反转
BSF FLAG,4
BCF FLAG,0
BSF FLAG,3 ;电机(反转)运行标志位:(针对突变)
GOTO START
Y2 BSF PORTB,7 ;电机停止转动
BSF PORTB,5 ;关运行指示灯灭
BSF FLAG,0
BCF FLAG,3
GOTO START
;********************失信号报警,电机相应动作************************** 0,0 OPEN; 0,1 CLOSE; 1,0 STOP
ERR BTFSC PORTC,4
GOTO STOP
GOTO OPEN
STOP BSF PORTB,6 ;电机停止转动
BSF PORTB,7
BSF PORTB,4 ;开运行指示灯灭
BSF PORTB,5 ;关运行指示灯灭
BCF PORTC,3 ;失信号报警
GOTO START
OPEN BTFSC PORTC,5
GOTO CLOSE
BCF PORTB,4 ;开运行指示灯亮
BCF PORTB,6 ;电机正转
BCF PORTC,3 ;失信号报警
GOTO START
CLOSE BCF PORTB,5 ;关运行指示灯亮
BCF PORTB,7 ;电机反转
BCF PORTC,3 ;失信号报警
GOTO START
;*******************步进调整程序********************
ADJUST DECFSZ 37H,F
GOTO START
BTFSS FLAG,4
GOTO START
BCF STATUS,0
MOVLW 2H
SUBWF DATE6,W
BTFSC STATUS,0
GOTO START
BCF FLAG,4 ;是否调整标志2位
BCF PORTB,4 ;开运行指示灯亮
BCF PORTB,6 ;电机正转
MOVLW 03EH
MOVWF COUNT7
CALL DELAY2
BSF PORTB,6 ;电机停止转动
BSF PORTB,4 ;开运行指示灯灭
GOTO START
ADJUST1 DECFSZ 38H,F
GOTO START
BTFSS FLAG,4
GOTO START
BCF STATUS,0
MOVLW 2H
SUBWF DATE6,W
BTFSC STATUS,0
GOTO START
BCF FLAG,4 ;是否调整标志位
BCF PORTB,5 ;开运行指示灯亮
BCF PORTB,7 ;电机正转
MOVLW 03EH
MOVWF COUNT7
CALL DELAY2
BSF PORTB,5 ;电机停止转动
BSF PORTB,7 ;开运行指示灯灭
GOTO START
;********************乘法子程序***************************************
MUL clrf ACCBHI
clrf ACCBLO
movlw 8h
movwf COUNT
movf MULCND,w
bcf STATUS,0
loop rrf MULPLR
btfsc STATUS,0
addwf ACCBHI,1
rrf ACCBHI,1
rrf ACCBLO,1
decfsz COUNT
goto loop
RETLW 0
;*********************除法子程序**************************************
div CALL SETUP
INCF TEMP
CLRF ACCCHI
CLRF ACCCLO
DLOOP BCF STATUS,0 ;清进位位
RLF ACCDLO ;被除数、余数左移1位
RLF ACCDHI
RLF ACCCLO
RLF ACCCHI
MOVF ACCAHI,0 ;ACCCHI-ACCAHI
SUBWF ACCCHI,0
BTFSS STATUS,2 ;ACCCHI=ACCAHI?
GOTO NOCHK
MOVF ACCALO,0 ;是,ACCCLO-ACCALO
SUBWF ACCCLO,0
NOCHK BTFSS STATUS,0 ;ACCC>ACCA?
GOTO NOGO
MOVF ACCALO,0 ;是,余数减除数
SUBWF ACCCLO
BTFSS STATUS,0
DECF ACCCHI
MOVF ACCAHI,0
SUBWF ACCCHI
BSF STATUS,0 ;置进位位
NOGO RLF ACCBLO ;商左移1位
RLF ACCBHI
DECFSZ TEMP ;循环完毕?
GOTO DLOOP
BTFSS SIGN,7 ;是,确定商的符号
GOTO DIVOVER ;为正,除法结束,跳转到结束行
COMF ACCCLO ;为负,商和余数分别取补
INCF ACCCLO
BTFSC STATUS,2
DECF ACCCHI
COMF ACCCHI
CALL NEG_B ;见乘法程序中间NEG_B
DIVOVER RETURN ;子程序返回
NEG_A COMF ACCALO ; ACCALO取反加1
INCF ACCALO
BTFSC STATUS,2 ; 低8位有进位吗?
DECF ACCAHI ;有,ACCAHI减1,再取反
COMF ACCAHI ;否则ACCAHI直接取反
RETURN ;子程序返回
;********* ACCB取补子程序*******
NEG_B DECF ACCBLO ;ACCBLO取反加1
COMF ACCBLO
BTFSC STATUS,2 ;低8位有进位吗?
DECF ACCBHI ;有,ACCBHI减1,再取反
COMF ACCBHI ;否,ACCBHI直接取反
RETLW 0
;*******************************
SETUP MOVLW .15 ;初始化TEMP寄存器
MOVWF TEMP
MOVF ACCBHI,0 ;ACCB送ACCD
MOVWF ACCDHI
MOVF ACCBLO,0
MOVWF ACCDLO
CLRF ACCBHI ;清ACCB
CLRF ACCBLO
RETURN ;子程序返回
;*********************延时子程序5s***************************
DELAY1 MOVF COUNT6,W
MOVWF 31H
LOOP0 MOVLW 85H
MOVWF 32H
L00P1 MOVLW 0FBH
MOVWF 33H
L00P2 DECFSZ 33H,1
GOTO L00P2
DECFSZ 32H,1
GOTO L00P1
DECFSZ 31H,1
GOTO LOOP0
RETURN
;********************延时子程序1S*************************
DELAY2 MOVF COUNT7,W
MOVWF 35H
LP1 MOVLW 0FFH
MOVWF 36H
LP2 DECFSZ 36H,1
GOTO LP2
DECFSZ 35H,1
GOTO LP1
RETURN
;*********************延时子程序24Us****************************
DELAY20 MOVLW 10H
MOVWF COUNT1
D20LOOP DECFSZ COUNT1,1
GOTO D20LOOP
RETURN
;*********************烧写EEPROM子程序**************************
WRITE BSF STATUS,RP0
BSF STATUS,RP1
BTFSC EECON1,WR
GOTO $-1
BCF STATUS,RP0
MOVF ADDR,W
MOVWF EEADR
MOVF DATE8,W
MOVWF EEDATA
BSF STATUS,RP0
BCF EECON1,EEPGD
BSF EECON1,WREN
MOVLW 55H
MOVWF EECON2
MOVLW 0AAH
MOVWF EECON2
BSF EECON1,WR
BCF EECON1,WREN
BCF STATUS,RP1
BCF STATUS,RP0
RETURN
;********************读取EEPROM子程序******************************
READ BCF STATUS,RP0
BSF STATUS,RP1
MOVF ADDR,W
MOVWF EEADR
BSF STATUS,RP0
BCF EECON1,EEPGD
BSF EECON1,RD
BCF STATUS,RP0
MOVF EEDATA,W
BCF STATUS,RP1
BCF STATUS,RP0
RETURN
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -