新闻  |   论坛  |   博客  |   在线研讨会
项目程序
0750long | 2009-07-09 12:21:35    阅读:2102   发布文章

项目程序

 

希望朋友能够继续关注。

将会慢慢的整理出一个完整的项目出来。

;=================================================================

;程序功能
;作   者:yuanlu
;时   间:2005-09-11
;使用芯片:PIC16F72
;CONFIG P EW HS==16.000MHZ
;版本 V1.0

;----------------------------------------------------------------

;----------------------------------------------------------------
ANSETL0	EQU	B'10000001'	;力矩补偿电流检测
ANSETL1	EQU	B'10001001'	;输出电压检测

RASETL	EQU	B'11111111'
RBSETL	EQU	B'00011100'
RCSETL	EQU	B'11100001'

;----------------------------------------------------------------
;I/O口设置:

#DEFINE	INCL_ITST	RA,2	;扬升电流检测(L)
#DEFINE	INCL_PWR	RC,1	;扬升电压输出控制
#DEFINE	UP	RC,3	;扬升升控制
#DEFINE	DWN	RC,4	;扬升降控制
#DEFINE	WZ0	RC,5
#DEFINE	WZ1	RC,6
#DEFINE	WZ2	RC,7
#DEFINE	CLK	RB,0
#DEFINE	DAT	RB,1
#DEFINE	KTST1	RB,2
#DEFINE	KTST2	RB,3
#DEFINE	KTST3	RB,4
#DEFINE	COM1	RB,5
#DEFINE	COM2	RB,6
#DEFINE	COM3	RB,7

;------------------------------------------------------------------
#DEFINE	GO	ADCON0,2
;------------------------------------------------------------------
;----------------------------------------------------------------
;专用寄存器配置:
;BANK   (STATUS<0:0>)

F0	EQU	00H
INDF	EQU	00H	;间址
TMR0	EQU	01H	;计时计数器0
PCL	EQU	02H	;低8位地址指针
STATUS	EQU	03H	;状态寄存器
FSR	EQU 	04H	;间址指针
RA	EQU	05H
PORTA	EQU	05H	;A I/O
RB	EQU	06H		
PORTB	EQU	06H	;B I/O
RC	EQU	07H	
PORTC	EQU	07H
PCLATH	EQU	0AH	;高5位地址指针
INTCON	EQU	0BH	;中断控制寄存器
PIR1	EQU	0CH	;计时与外围中断标志寄存器
TMR1L	EQU	0EH	;16位计时1低8位
TMR1H	EQU	0FH	;16位计时1高8位
T1CON	EQU	10H	;计时1控制寄存器
TMR2	EQU	11H	;计时器2
T2CON	EQU	12H	;计时控制器2
CCPR1L	EQU	15H	;CCP数据低位
CCPR1H	EQU	16H	;CCP数据高位
CCP1CON	EQU	17H	;CCP控制寄存器
ADRES	EQU	1EH	;A/D转换数据寄存器
ADCON0	EQU	1FH	;A/D转换控制寄存器0

;BANK   (STATUS <0:1>)

OPTION_R	EQU	81H	;功能选项寄存器
TRISA	EQU	85H
TRISB	EQU	86H
TRISC	EQU	87H
PIE1	EQU	8CH	;中断允许寄存器
PCON	EQU	8EH
PR2	EQU	92H	;TMR2时间间隔寄存器
ADCON1	EQU	9FH	;A/D转换控制寄存器1
;-------------------------------------------------------------
;通用寄存器使用表
;BANK0: 20H-----7FH
;BANK1: A0H-----BFH
;-------------------------------------------------------------
;常数定义:
;*************************************************************
W	EQU	0H
F	EQU	1H
Z	EQU	2H
;STATUS:
C	EQU	0H
CARRY	EQU	0H
RP0	EQU	5H
PA0	EQU	5H
;INTCON:
GIE	EQU	7H
PEIE	EQU	6H	;外围中断允许
T0IE	EQU	5H
INTE	EQU	4H
RBIE	EQU	3H
T0IF	EQU	2H
INTF	EQU	1H
RBIF	EQU	0H

TMR1IF	EQU	0H
TMR2ON	EQU	2H	;TMR2 ENB CONTROL
TMR1ON	EQU	0H
ADIF	EQU	6H
;--------------------------------------------------------------
;用户寄存器定义:
COUNT		EQU	020H
;**************************************************************
W_TEMP		EQU	021H		;中断保护寄存器
STATUS_TEMP	EQU	022H
;==============================================================
FLAG		EQU	023H
#DEFINE	F_START		FLAG,0
#DEFINE	F_OVER_SET	FLAG,1
#DEFINE	F_INCL_ZERO	FLAG,2
#DEFINE	F_BLINKEN	FLAG,3
#DEFINE	F_NOP		FLAG,4
#DEFINE	F_DAT_SET	FLAG,5
#DEFINE	F_INCLOVER	FLAG,6
#DEFINE	F_PWR		FLAG,7

FLAG1		EQU	024H
#DEFINE	F_SW_ONF	FLAG1,0
#DEFINE	F_SW_DWN	FLAG1,1
#DEFINE	F_SW_UP		FLAG1,2
#DEFINE	F_SW_SLOW	FLAG1,3
#DEFINE	F_SW_FAST	FLAG1,4
#DEFINE	F_SW_NEM	FLAG1,5
#DEFINE	F_SW_P3		FLAG1,6
#DEFINE	F_SW_P2		FLAG1,7

FLAG2		EQU	025H
#DEFINE	F_SW_ONFEN	FLAG2,0
#DEFINE	F_SW_DWNEN	FLAG2,1
#DEFINE	F_SW_UPEN	FLAG2,2
#DEFINE	F_SW_SLOWEN	FLAG2,3
#DEFINE	F_SW_FASTEN	FLAG2,4
#DEFINE	F_SW_NEMEN	FLAG2,5
#DEFINE	F_SW_P3EN	FLAG2,6
#DEFINE	F_SW_P2EN	FLAG2,7

FLAG_SW1	EQU	026H
#DEFINE	SWK00	FLAG_SW1,0
#DEFINE	SWK01	FLAG_SW1,1
#DEFINE	SWK02	FLAG_SW1,2
#DEFINE	SWK10	FLAG_SW1,3
#DEFINE	SWK11	FLAG_SW1,4
#DEFINE	SWK12	FLAG_SW1,5
#DEFINE	SWK20	FLAG_SW1,6
#DEFINE	SWK21	FLAG_SW1,7

FLAG_SW2	EQU	027H
#DEFINE	SWK22		FLAG_SW2,0
#DEFINE	F_SW_P1		FLAG_SW2,1
#DEFINE	F_SW_P1EN	FLAG_SW2,2

#DEFINE	SW_ONF	SWK00
#DEFINE	SW_DWN	SWK10
#DEFINE	SW_UP	SWK20
#DEFINE	SW_SLOW	SWK11
#DEFINE	SW_FAST	SWK02
#DEFINE	SW_NEM	SWK12
#DEFINE	SW_P3	SWK22
#DEFINE	SW_P2	SWK01
#DEFINE	SW_P1	SWK21

FLAG5		EQU	06FH
#DEFINE	F_INCLEN	FLAG5,0
#DEFINE	F_ERR		FLAG5,1
#DEFINE	F_UP		FLAG5,2
#DEFINE	F_DWN		FLAG5,3
#DEFINE	F_BLK_SPD	FLAG5,4
#DEFINE	F_BLK_INCL	FLAG5,5
#DEFINE	F_LMT		FLAG5,6
#DEFINE	F_ALARM		FLAG5,7

FLAG6		EQU	06EH
#DEFINE	F_BLK_PRO	FLAG6,0
#DEFINE	F_VLMT		FLAG6,1
#DEFINE	F_END		FLAG6,2
#DEFINE	F_INCL_PWM	FLAG6,3
#DEFINE	F_INCL_PWR	FLAG6,4
#DEFINE	F_NOP1		FLAG6,5

;**************************************************************

DPY1		EQU	028H
DPY2		EQU	029H
DPY3		EQU	02AH
DPYCNT		EQU	02BH
INTTMP		EQU	02CH
INTCNT		EQU	02DH
DLYCNT		EQU	02EH
TMS		EQU	02FH
TMT		EQU	030H
TMX		EQU	031H
TMX1		EQU	032H
CNT_DAT_PRO	EQU	033H
INCL_WZ		EQU	034H
OLD_INCL_WZ	EQU	035H
TST_INCL	EQU	036H
TM_INCL_ZERO_DWN EQU	037H
TM_INCL_ZERO_UP  EQU	038H
TM_INCLOVER	EQU	039H
TM_BLK		EQU	03AH
TM_NOP		EQU	03BH
BUF_DPY1	EQU	03CH
BUF_DPY2	EQU	03DH
BUF_DPY3	EQU	03EH
CNT_P		EQU	03FH
SPEED		EQU	040H
MIN_SPD		EQU	041H
MAX_SPD		EQU	042H
CNT_INCL_IOVER	EQU	043H
CNT_DWN_CLR	EQU	044H
CNT_DWN_SET	EQU	045H
CNT_UP_CLR	EQU	046H
CNT_UP_SET	EQU	047H
SET_INCL	EQU	048H
CNT_ERR5L	EQU	049H
CNT_ERR5H	EQU	04AH
BUF_V		EQU	04BH
SET_V		EQU	04CH
DAT_I		EQU	04DH
DAT_V		EQU	04EH
PWMOI		EQU	04FH
PWML		EQU	050H
PWMH		EQU	051H
PWMLOK		EQU	052H
PWMHOK		EQU	053H
PWMLOK_S	EQU	054H
PWMHOK_S	EQU	055H
TM_LMT		EQU	056H
TM_END		EQU	057H
TM_INCL_PWM	EQU	058H
PWMCNT		EQU	059H
PWMAMP		EQU	05AH
TMX2		EQU	05BH

TM_NOP1		EQU	05CH
;==============================================================
;以下为局部变量
ACCALO		EQU	070H
ACCAHI		EQU	071H
ACCBLO		EQU	072H
ACCBHI		EQU	073H
ACCCLO		EQU	074H
ACCCHI		EQU	075H
ACCDLO		EQU	076H
ACCDHI		EQU	077H
DLYTMP		EQU	078H
I2C_CNT		EQU	079H
TXBUF		EQU	07AH
RXBUF		EQU	07AH
TEMP		EQU	07BH
WRCNT		EQU	07CH
TEMP1		EQU	07DH	
TEMP2		EQU	07EH


TMP1		EQU	TEMP1
TMP2		EQU	TEMP2
TMP3		EQU	TEMP

;---------------------------------------------------------------

INTIN	MACRO
	MOVWF	W_TEMP
	SWAPF	STATUS,W
	BCF	STATUS,RP0
	MOVWF	STATUS_TEMP   	;现场保护
	ENDM

INTOUT	MACRO
	SWAPF	STATUS_TEMP,W	;中断现场恢复
	MOVWF	STATUS
	SWAPF	W_TEMP,F
	SWAPF	W_TEMP,W
	ENDM

;所有通用寄存器清0(BANK0)
CLRS	MACRO	
	MOVLW	.95
	MOVWF	COUNT
	MOVLW	21H
	MOVWF	FSR
	CLRF	INDF
	INCF	FSR
	DECFSZ	COUNT
	GOTO	$-3
	ENDM
	
BANK0	MACRO
	BCF	STATUS,RP0
	ENDM
	
BANK1	MACRO
	BSF	STATUS,RP0
	ENDM	



;--------------------------------------------------------------
	ORG	0H		;复位地址
	GOTO	START
	GOTO	START
	GOTO	START
	GOTO	START
	ORG	04H		;中断向量
	GOTO	INTSUB
	GOTO	START
	GOTO	START
;--------------------------------------------------------------
	ORG	0AH
TAB_LED_P
	ADDWF	PCL
	RETLW	B'00010000'
	RETLW	B'00000001'
	RETLW	B'00000010'
	RETLW	B'00000100'
TAB_LED_S1
	ADDWF	PCL
	RETLW	B'00000100'
	RETLW	B'00000100'
	RETLW	B'00000100'
	RETLW	B'00000100'
	RETLW	B'00000100'
	RETLW	B'00000100'
	RETLW	B'00000100'
	RETLW	B'00000100'
	RETLW	B'00000100'
	RETLW	B'00000100'	
TAB_LED_S2
	ADDWF	PCL
	RETLW	B'00000000'
	RETLW	B'00000001'
	RETLW	B'00000011'
	RETLW	B'00000111'
	RETLW	B'00001111'
	RETLW	B'00011111'
	RETLW	B'00111111'
	RETLW	B'01111111'
	RETLW	B'11111111'
	
TAB_LED_S1B
	ADDWF	PCL
	RETLW	B'00000000'
	RETLW	B'00000100'
	RETLW	B'00000100'
	RETLW	B'00000100'
	RETLW	B'00000100'
	RETLW	B'00000100'
	RETLW	B'00000100'
	RETLW	B'00000100'
	RETLW	B'00000100'
	RETLW	B'00000100'	
TAB_LED_S2B
	ADDWF	PCL
	RETLW	B'00000000'
	RETLW	B'00000000'	
	RETLW	B'00000001'
	RETLW	B'00000011'
	RETLW	B'00000111'
	RETLW	B'00001111'
	RETLW	B'00011111'
	RETLW	B'00111111'
	RETLW	B'01111111'
	RETLW	B'11111111'	
		
TAB_LED_MIN_S1	
	ADDWF	PCL
	RETLW	B'00000100'
	RETLW	B'00000000'
	RETLW	B'00000000'
	RETLW	B'00000000'
	RETLW	B'00000000'
	RETLW	B'00000000'
	RETLW	B'00000000'
	RETLW	B'00000000'
	RETLW	B'00000000'						
TAB_LED_MIN_S2
	ADDWF	PCL
	RETLW	B'11111111'
	RETLW	B'11111111'	
	RETLW	B'11111110'
	RETLW	B'11111100'
	RETLW	B'11111000'
	RETLW	B'11110000'
	RETLW	B'11100000'
	RETLW	B'11000000'
	RETLW	B'10000000'
TAB_LED_MAX_S1	
	ADDWF	PCL
	RETLW	B'00000100'
	RETLW	B'00000100'
	RETLW	B'00000100'
	RETLW	B'00000100'
	RETLW	B'00000100'
	RETLW	B'00000100'
	RETLW	B'00000100'
	RETLW	B'00000100'
	RETLW	B'00000100'
TAB_LED_MAX_S2
	ADDWF	PCL
	RETLW	B'00000000'
	RETLW	B'00000001'
	RETLW	B'00000011'
	RETLW	B'00000111'
	RETLW	B'00001111'
	RETLW	B'00011111'
	RETLW	B'00111111'
	RETLW	B'01111111'
	RETLW	B'11111111'
TAB_LED_C_S1
	ADDWF	PCL
	RETLW	B'11111011'
	RETLW	B'11111111'
	RETLW	B'11111111'
	RETLW	B'11111111'	
	RETLW	B'11111111'	
	RETLW	B'11111111'
	RETLW	B'11111111'	
	RETLW	B'11111111'
	RETLW	B'11111111'
TAB_LED_C_S2
	ADDWF	PCL
	RETLW	B'11111111'
	RETLW	B'11111110'
	RETLW	B'11111101'
	RETLW	B'11111011'
	RETLW	B'11110111'
	RETLW	B'11101111'
	RETLW	B'11011111'
	RETLW	B'10111111'
	RETLW	B'01111111'
						
TAB_LED_T
	ADDWF	PCL
	RETLW	B'11111000'
	RETLW	B'01111000'
	RETLW	B'00111000'
	RETLW	B'00011000'
	RETLW	B'00001000'
	RETLW	B'00001000'	
	
TAB_V

	ADDWF	PCL
	RETLW	.42
	RETLW	.53
	RETLW	.64
	RETLW	.75
	RETLW	.86
	RETLW	.97
	RETLW	.108
	RETLW	.119
	RETLW	.130
	RETLW	.141
	RETLW	.152
	RETLW	.163

TAB_INCL_PRO
	MOVLW	.2
	SUBWF	CNT_P,W
	ADDWF	PCL
	GOTO	TAB_INCL_P1
	GOTO	TAB_INCL_P2
	GOTO	TAB_INCL_P3
TAB_INCL_P1
	RETLW	00H

TAB_INCL_P2
	MOVLW	B'00000111'
	ANDWF	CNT_DAT_PRO,W
	ADDWF	PCL
	RETLW	04H	;0
	RETLW	04H	;1
	RETLW	04H	;2
	RETLW	04H	;3
	RETLW	00H	;4
	RETLW	03H	;5
	RETLW	03H	;6
	RETLW	00H	;7
TAB_INCL_P3
	MOVLW	B'00000111'
	ANDWF	CNT_DAT_PRO,W
	ADDWF	PCL
	RETLW	03H	;0
	RETLW	03H	;1
	RETLW	03H	;2
	RETLW	03H	;3
	RETLW	00H	;4
	RETLW	04H	;5
	RETLW	04H	;6
	RETLW	00H	;7
	
	
;--------------------------------------------------------------
;中断处理子程式 
;**************************************************************
INTSUB
	INTIN
	BCF	INTCON,GIE		;关毕总中断
	
	BTFSC	INTCON,2		;计时中断0	
	GOTO	TMR0SUB
	
	BTFSC	PIR1,0			;计时中断1
	GOTO	TMR1SUB
	
	GOTO	INTEND
	
;*************************************************************
START
;=======I/O设置及清0================================
	CLRWDT
	CLRF	PORTA
	CLRF	PORTB
	CLRF	PORTC
	CLRF	INTCON
	CLRS
	BANK1
	MOVLW	RASETL
	MOVWF	TRISA
	MOVLW	RBSETL
	MOVWF	TRISB
	MOVLW	RCSETL
	MOVWF	TRISC
	BANK0
	CLRF	RA
	CLRF	RB
	CLRF	RC
	BSF	COM1
	BSF	COM2
	BSF	COM3	
	CLRWDT
;=======AD转换设置:==================================
	MOVLW	ANSETL0
	MOVWF	ADCON0
	BANK1
	MOVLW	B'00000100'
	MOVWF	ADCON1
	BANK0
;=======TMR1设置 分频比 1:1 ===========================
	MOVLW	B'00000001'
	MOVWF	T1CON	
	MOVLW	063H
	MOVWF	TMR1H
	MOVLW	0C0H
	MOVWF	TMR1L
;=======TMR0设置 分频比1:8 中断时间512uS===============
	BSF	STATUS,RP0
	MOVLW	B'10000010'
	MOVWF	OPTION_R
	BCF	STATUS,RP0
;=======PWM设置========================================
;由CCPR1L的值确定是否工作,10位工作模式.
	CLRF	CCPR1L
	CLRF	CCPR1H
	CLRF	CCP1CON
	MOVLW	B'00000100'
	MOVWF	T2CON		;开启TMR2,分频比1:1,PWM 15.625K
	CLRF	TMR2
	MOVLW	B'00001100'
	MOVWF	CCP1CON		;设置CCP为PWM模式
;=======中断设置========================================
	MOVLW	B'11100000'
	MOVWF	INTCON		;设置中断控制寄存器
				;外围接口中断允许
				;TMR0中断允许
	BSF	STATUS,RP0	;TMR1中断允许
	MOVLW	B'00000001'
	MOVWF	PIE1
	BCF	STATUS,RP0
;=========================================================
	CLRWDT
	GOTO	PWRTST
;---------------------------------------------------------		

;------------------------------------------------------------
;512us计时0中断
TMR0SUB
	BCF	INTCON,2

;=========扬升PWM输出控制============================
INCLPWM
	INCF	PWMCNT
	MOVLW	.2
	SUBWF	PWMCNT,W
	BTFSC	STATUS,C
	GOTO	INCLPWM1
	BTFSC	F_INCL_PWR
	BSF	INCL_PWR
	GOTO	INCLPWM2
INCLPWM1	
	BCF	INCL_PWR
INCLPWM2	
	MOVLW	.4
	SUBWF	PWMCNT,W
	BTFSC	STATUS,C
	CLRF	PWMCNT
	GOTO	INCLPWMEND
INCLPWMEND

;=======================================================
;1024us
	INCF	TMX2
	MOVLW	.2
	SUBWF	TMX2,W
	BTFSS	STATUS,C
	GOTO	INTEND
	CLRF	TMX2
;--------------------------------------------------------------
	
	BSF	F_VLMT	
;-------------------------------------------------------------	
;显示扫描与扫键检测

	BTFSS	COM1
	GOTO	SWTST1
	BTFSS	COM2
	GOTO	SWTST2
	BTFSS	COM3
	GOTO	SWTST3
	GOTO	SWTSTEND
SWTST1
	BCF	SWK00
	BCF	SWK01
	BCF	SWK02
	BTFSC	KTST1
	BSF	SWK00
	BTFSC	KTST2
	BSF	SWK01
	BTFSC	KTST3
	BSF	SWK02
	GOTO	$+1
	GOTO	$+1
	GOTO	$+1
	BTFSS	KTST1
	BCF	SWK00
	BTFSS	KTST2
	BCF	SWK01
	BTFSS	KTST3
	BCF	SWK02
	GOTO	SWTSTEND
SWTST2
	BCF	SWK10
	BCF	SWK11
	BCF	SWK12
	BTFSC	KTST1
	BSF	SWK10
	BTFSC	KTST2
	BSF	SWK11
	BTFSC	KTST3
	BSF	SWK12
	GOTO	$+1
	GOTO	$+1
	GOTO	$+1
	BTFSS	KTST1
	BCF	SWK10
	BTFSS	KTST2
	BCF	SWK11
	BTFSS	KTST3
	BCF	SWK12	
	GOTO	SWTSTEND
SWTST3	
	BCF	SWK20
	BCF	SWK21
	BCF	SWK22
	BTFSC	KTST1
	BSF	SWK20
	BTFSC	KTST2
	BSF	SWK21
	BTFSC	KTST3
	BSF	SWK22
	GOTO	$+1
	GOTO	$+1
	GOTO	$+1
	BTFSS	KTST1
	BCF	SWK20
	BTFSS	KTST2
	BCF	SWK21
	BTFSS	KTST3
	BCF	SWK22	
	GOTO	SWTSTEND
SWTSTEND
;=======================================================
	MOVLW	B'11100000'
	IORWF	RB
	MOVLW	.0
	SUBWF	DPYCNT,W
	BTFSC	STATUS,Z
	GOTO	SCAN1
	MOVLW	.1
	SUBWF	DPYCNT,W
	BTFSC	STATUS,Z
	GOTO	SCAN2
	GOTO	SCAN3
SCAN1	COMF	DPY1,W
	GOTO	SENDB
SCAN2	COMF	DPY2,W
	GOTO	SENDB
SCAN3	COMF	DPY3,W
	GOTO	SENDB	

SENDB
	MOVWF	INTTMP
	MOVLW	.8
	MOVWF	INTCNT
SENDB1
	BCF	CLK
	RLF	INTTMP
	BTFSS	STATUS,C
	BCF	DAT
	BTFSC	STATUS,C
	BSF	DAT
	GOTO	$+1
	BSF	CLK
	GOTO	$+1
	DECFSZ	INTCNT
	GOTO	SENDB1
	BCF	CLK
	
	MOVLW	.0
	SUBWF	DPYCNT,W
	BTFSC	STATUS,Z
	GOTO	SCOM1
	MOVLW	.1
	SUBWF	DPYCNT,W
	BTFSC	STATUS,Z
	GOTO	SCOM2
	GOTO	SCOM3	
SCOM1	BCF	COM1
	GOTO	SCOMEND
SCOM2	BCF	COM2
	GOTO	SCOMEND
SCOM3	BCF	COM3
	GOTO	SCOMEND
SCOMEND
	INCF	DPYCNT
	MOVLW	.3
	SUBWF	DPYCNT,W
	BTFSC	STATUS,C
	CLRF	DPYCNT
;==========扬升斩波控制================================
INCLICON
	BTFSS	F_INCLEN
	GOTO	INCLICONC
	BTFSC	INCL_ITST
	BSF	F_INCL_PWR
	BTFSS	INCL_ITST
INCLICONC
	BCF	F_INCL_PWR
INCLICONEND


;========扬升电机电流持续时间过长检测=================
;如长时间有过流,说明斩波电路失效
INCL_IOVTST
	BTFSC	INCL_ITST
	GOTO	IIOTSTH
	INCF	CNT_INCL_IOVER
	MOVLW	.200
	SUBWF	CNT_INCL_IOVER,W
	BTFSC	STATUS,C
	BSF	F_ERR
	GOTO	IIOTSTEND
IIOTSTH	
	MOVF	CNT_INCL_IOVER,F
	BTFSS	STATUS,Z
	DECF	CNT_INCL_IOVER
IIOTSTEND
;**************************************************************
;电流报警信号检测,占空比>=16:1
ALRT
	BTFSS	F_START		;测启动标志
	GOTO	ALRTEND		;无启动转结束
	BTFSS	F_ALARM		;测电流报警信号
	GOTO	ALRT1			
;过流处理
	MOVLW	.16
	ADDWF	CNT_ERR5L,F
	BTFSC	STATUS,C
	INCF	CNT_ERR5H
	BTFSC	CNT_ERR5H,7
	BSF	F_ERR
	GOTO	ALRTEND
;无过流处理
ALRT1
	MOVF	CNT_ERR5H,F
	BTFSS	STATUS,Z
	GOTO	$+4
	MOVF	CNT_ERR5L,F
	BTFSC	STATUS,Z
	GOTO	ALRTEND
	MOVLW	.1
	SUBWF	CNT_ERR5L,F
	BTFSS	STATUS,C
	DECF	CNT_ERR5H
ALRTEND			
;==========================================================			
	GOTO	INTEND
;-------------------------------------------------------------
;10000us==10ms
TMR1SUB
	BCF	PIR1,0		;清中断标志
	MOVLW	0C0H
	ADDWF	TMR1L,F
	BTFSC	STATUS,C
	INCF	TMR1H
	MOVLW	063H
	ADDWF	TMR1H,F
;=============================================================	
;延时计时
	INCF	DLYCNT
;=============================================================
	BTFSS	SW_ONF
	GOTO	$+6
	BTFSC	F_SW_ONFEN
	GOTO	$+5
	BSF	F_SW_ONF
	BSF	F_SW_ONFEN
	GOTO	$+2
	BCF	F_SW_ONFEN
		
	BTFSS	SW_SLOW
	GOTO	$+6
	BTFSC	F_SW_SLOWEN
	GOTO	$+5
	BSF	F_SW_SLOW
	BSF	F_SW_SLOWEN
	GOTO	$+2
	BCF	F_SW_SLOWEN		


	BTFSS	SW_FAST
	GOTO	$+6
	BTFSC	F_SW_FASTEN
	GOTO	$+5
	BSF	F_SW_FAST
	BSF	F_SW_FASTEN
	GOTO	$+2
	BCF	F_SW_FASTEN
	
	BTFSS	SW_UP
	GOTO	$+6
	BTFSC	F_SW_UPEN
	GOTO	$+5
	BSF	F_SW_UP
	BSF	F_SW_UPEN
	GOTO	$+2
	BCF	F_SW_UPEN	
	
	BTFSS	SW_DWN
	GOTO	$+6
	BTFSC	F_SW_DWNEN
	GOTO	$+5
	BSF	F_SW_DWN
	BSF	F_SW_DWNEN
	GOTO	$+2
	BCF	F_SW_DWNEN	
	
	BTFSS	SW_NEM
	GOTO	$+6
	BTFSC	F_SW_NEMEN
	GOTO	$+5
	BSF	F_SW_NEM
	BSF	F_SW_NEMEN
	GOTO	$+2
	BCF	F_SW_NEMEN
	
	BTFSS	SW_P1
	GOTO	$+6
	BTFSC	F_SW_P1EN
	GOTO	$+5
	BSF	F_SW_P1
	BSF	F_SW_P1EN
	GOTO	$+2
	BCF	F_SW_P1EN
	
	BTFSS	SW_P2
	GOTO	$+6
	BTFSC	F_SW_P2EN
	GOTO	$+5
	BSF	F_SW_P2
	BSF	F_SW_P2EN
	GOTO	$+2
	BCF	F_SW_P2EN
	
	BTFSS	SW_P3
	GOTO	$+6
	BTFSC	F_SW_P3EN
	GOTO	$+5
	BSF	F_SW_P3
	BSF	F_SW_P3EN
	GOTO	$+2
	BCF	F_SW_P3EN			

	BTFSC	F_SW_SLOW
	GOTO	NOP_SWC
	BTFSC	F_SW_FAST
	GOTO	NOP_SWC
	BTFSC	F_SW_UP
	GOTO	NOP_SWC
	BTFSC	F_SW_DWN
	GOTO	NOP_SWC
	BTFSC	F_SW_NEM
	GOTO	NOP_SWC
	BTFSC	F_SW_P1
	GOTO	NOP_SWC
	BTFSC	F_SW_P2
	GOTO	NOP_SWC
	BTFSC	F_SW_P3
	GOTO	NOP_SWC
	GOTO	NOP_SWCEND
NOP_SWC
	CLRF	TM_NOP
NOP_SWCEND
		

;=============================================================
;计时
TMPRO
	BTFSS	F_START
	GOTO	TMPROC
	INCF	TMS
	MOVLW	.100
	SUBWF	TMS,W
	BTFSS	STATUS,C
	GOTO	TMPROEND
	CLRF	TMS
	INCF	TMT
	MOVLW	.15
	SUBWF	TMT,W
	BTFSS	STATUS,C
	GOTO	TMPROEND
	CLRF	TMT
	INCF	CNT_DAT_PRO
	BSF	F_DAT_SET
	MOVLW	.60
	SUBWF	CNT_DAT_PRO,W
	BTFSC	STATUS,C
	BSF	F_OVER_SET
	GOTO	TMPROEND
TMPROC
	CLRF	TMS
	CLRF	TMT
	CLRF	CNT_DAT_PRO
TMPROEND
		
;-------------------------------------------------------------
;扬升位置检测
;TST_INCL
;0  水平
;1  后倾
;3  后倾到位
;2  前倾
;4  前倾到位

INCLWZTST
;=======实际位置检测================================
	CLRF	INCL_WZ
	BTFSC	WZ1
	BSF	INCL_WZ,0
	BTFSC	WZ2
	BSF	INCL_WZ,1
;=======前倾到位检测================================	
	MOVLW	.2
	SUBWF	INCL_WZ,W
	BTFSC	STATUS,Z
	GOTO	INCWT3
;=======后倾到位检测=================================
	MOVLW	.0
	SUBWF	INCL_WZ,W
	BTFSC	STATUS,Z
	GOTO	INCWT4
;=======前倾后倾水平位置综合检测=====================

	BTFSS	F_INCL_ZERO	;0位标志检测
	GOTO	INCWT0
	
	MOVLW	.2
	SUBWF	CNT_P,W
	BTFSC	STATUS,C
	GOTO	INCWTM
	
	BTFSC	SW_UP
	GOTO	INCWTA
	BTFSC	SW_DWN
	GOTO	INCWTB
	GOTO	INCWTM
	
INCWTA	MOVF	TM_INCL_ZERO_DWN
	BTFSS	STATUS,Z
	DECF	TM_INCL_ZERO_DWN
	INCF	TM_INCL_ZERO_UP
	MOVLW	01H
	SUBWF	INCL_WZ,W
	MOVLW	.100
	BTFSC	STATUS,Z	
	MOVLW	.200
	SUBWF	TM_INCL_ZERO_UP,W
	BTFSC	STATUS,C
	BCF	F_INCL_ZERO
	GOTO	INCWTM

INCWTB	MOVF	TM_INCL_ZERO_UP
	BTFSS	STATUS,Z
	DECF	TM_INCL_ZERO_UP
	INCF	TM_INCL_ZERO_DWN
	MOVLW	03H
	SUBWF	INCL_WZ,W
	MOVLW	.100
	BTFSC	STATUS,Z	
	MOVLW	.200
	SUBWF	TM_INCL_ZERO_DWN,W
	BTFSC	STATUS,C
	BCF	F_INCL_ZERO
	GOTO	INCWTM	
INCWT0
	MOVLW	.1
	SUBWF	INCL_WZ,W
	BTFSC	STATUS,Z
	GOTO	INCWT1
	
	MOVLW	.3
	SUBWF	INCL_WZ,W
	BTFSC	STATUS,Z
	GOTO	INCWT2
	
;=======当前位置01,如果上一次为03,则为水平位置========
INCWT1		
	MOVLW	03H
	SUBWF	OLD_INCL_WZ,W
	BTFSS	STATUS,Z
	GOTO	INCWT1_1
	BSF	F_INCL_ZERO
	MOVLW	.0
	MOVWF	TST_INCL
	CLRF	TM_INCL_ZERO_UP
	CLRF	TM_INCL_ZERO_DWN
	GOTO	INCWTM
INCWT1_1
	MOVLW	01H		;后倾
	MOVWF	TST_INCL
	GOTO	INCWTM
;=======当前位置03,如果上一次为01,则为水平位置========	
INCWT2		
	MOVLW	01H
	SUBWF	OLD_INCL_WZ,W
	BTFSS	STATUS,Z
	GOTO	INCWT2_1
	BSF	F_INCL_ZERO
	MOVLW	.0
	MOVWF	TST_INCL
	CLRF	TM_INCL_ZERO_UP
	CLRF	TM_INCL_ZERO_DWN
	GOTO	INCWTM
INCWT2_1
	MOVLW	02H		;前倾
	MOVWF	TST_INCL
	GOTO	INCWTM	
;=======前倾到位=======================================
INCWT3
	MOVLW	.4
	MOVWF	TST_INCL
	BCF	F_INCL_ZERO
	GOTO	INCWTM
;=======后倾到位========================================
INCWT4
	MOVLW	.3
	MOVWF	TST_INCL
	BCF	F_INCL_ZERO
	GOTO	INCWTM
;========================================================
INCWTM
	MOVFW	INCL_WZ
	SUBWF	OLD_INCL_WZ,W
	BTFSS	STATUS,Z
	CLRF	TM_INCLOVER
	MOVFW	INCL_WZ
	MOVWF	OLD_INCL_WZ
INCWTEND
;======================================================
;扬升输出控制
;无电源开关
;先吸合后通电,先断电后释放
IUPSET
	BTFSS	F_UP
	GOTO	IUPS1
	CLRF	CNT_UP_CLR
	BTFSS	DWN
	GOTO	IUPS0

	BCF	F_INCL_PWM
	BCF	F_INCLEN
	CLRF	CNT_UP_SET
	CLRF	CNT_DWN_SET
	INCF	CNT_DWN_CLR
	BTFSC	CNT_DWN_CLR,6
	BCF	DWN
	GOTO	IUPSETEND	
	
IUPS0	
	INCF	CNT_UP_SET
	BTFSC	CNT_UP_SET,3
	BSF	UP
	BTFSC	CNT_UP_SET,6
	BSF	F_INCLEN	
	GOTO	IUPSETEND
IUPS1	BTFSC	F_DWN
	GOTO	IUPSETEND
	BCF	F_INCL_PWM
	BCF	F_INCLEN
	CLRF	CNT_UP_SET
	INCF	CNT_UP_CLR
	BTFSC	CNT_UP_CLR,6
	BCF	UP
IUPSETEND

;****************************************
IDWNSET
	BTFSS	F_DWN
	GOTO	IDWNS1
	CLRF	CNT_DWN_CLR
	BTFSS	UP
	GOTO	IDWNS0
	
	BCF	F_INCL_PWM
	BCF	F_INCLEN
	CLRF	CNT_DWN_SET
	CLRF	CNT_UP_SET
	INCF	CNT_UP_CLR
	BTFSC	CNT_UP_CLR,6
	BCF	UP
	GOTO	IDWNSETEND	
	
IDWNS0	
	INCF	CNT_DWN_SET
	BTFSC	CNT_DWN_SET,3
	BSF	DWN
	BTFSC	CNT_DWN_SET,6
	BSF	F_INCLEN	
	GOTO	IDWNSETEND
IDWNS1	BTFSC	F_UP
	GOTO	IDWNSETEND
	BCF	F_INCL_PWM
	BCF	F_INCLEN
	CLRF	CNT_DWN_SET
	INCF	CNT_DWN_CLR
	BTFSC	CNT_DWN_CLR,6
	BCF	DWN
IDWNSETEND	


;========================================================	
;闪烁计时
TMBLK
	INCF	TM_BLK
	MOVLW	.40
	SUBWF	TM_BLK,W
	BTFSS	STATUS,C
	BSF	F_BLINKEN
	BTFSC	STATUS,C
	BCF	F_BLINKEN
	MOVLW	.80
	SUBWF	TM_BLK,W
	BTFSC	STATUS,C
	CLRF	TM_BLK
TMBLKEND
;=========================================================
TMT_LMT
	BTFSS	F_START
	GOTO	TMT_LMTEND
	INCF	TM_LMT
	MOVLW	.5
	SUBWF	TM_LMT,W
	BTFSS	STATUS,C
	GOTO	TMT_LMTEND
	CLRF	TM_LMT
	BSF	F_LMT
TMT_LMTEND	
;=========================================================	
;100ms
	INCF	TMX1
	MOVLW	.10
	SUBWF	TMX1,W
	BTFSS	STATUS,C
	GOTO	INTEND
	CLRF	TMX1
;=========================================================
ENDSPDSET	
	BTFSS	F_END
	GOTO	ENDSPDSETEND
	INCF	TM_END
	MOVLW	.5
	SUBWF	TM_END,W
	BTFSS	STATUS,C
	GOTO	ENDSPDSETEND
	CLRF	TM_END
	MOVF	SPEED,F
	BTFSS	STATUS,Z
	DECF	SPEED
ENDSPDSETEND		
;=========================================================	
;扬升动作溢出计时
INCTMOVER
	INCF	TM_INCLOVER
	MOVLW	.120
	SUBWF	TM_INCLOVER,W
	BTFSC	STATUS,C
	BSF	F_INCLOVER
;=========================================================
;2.5S		
	INCF	TMX
	MOVLW	.25
	SUBWF	TMX,W
	BTFSS	STATUS,C
	GOTO	INTEND
	CLRF	TMX
;=========================================================
;1分钟体眠计时
TMNOP
	BTFSC	F_START
	GOTO	TMNOPC
	INCF	TM_NOP
	MOVLW	.24
	SUBWF	TM_NOP,W
	BTFSS	STATUS,C
	GOTO	TMNOPEND
	BSF	F_NOP
TMNOPC
	CLRF	TM_NOP
TMNOPEND			
;=========================================================
;10分钟体眠计时
TMNOP1
	INCF	TM_NOP1
	MOVLW	.160
	SUBWF	TM_NOP1,W
	BTFSS	STATUS,C
	GOTO	TMNOP1END
	BSF	F_NOP1
TMNOP1END	
;**************************************************************
INTEND
	INTOUT
	RETFIE			;中断返回
;--------------------------------------------------------------



;-------------------------------------------------------------
DELAY
	MOVWF	TEMP1
	CLRF	DLYCNT
	CLRWDT
	MOVFW	TEMP1
	SUBWF	DLYCNT,W
	BTFSS	STATUS,C
	GOTO	$-4
	RETURN
;--------------------------------------------------------------
DISPLAY
	CLRF	BUF_DPY1
	CLRF	BUF_DPY2
	CLRF	BUF_DPY3
	BTFSS	F_ERR
	GOTO	PRODIS

;=======错误状态显示==========================
ERRDIS
	MOVLW	B'11111001'
	MOVWF	BUF_DPY2
	BTFSS	F_BLINKEN
	GOTO	ERRDISEND
	MOVLW	B'00000001'
	MOVWF	BUF_DPY2
ERRDISEND
	GOTO	DISPLAYEND	
;=======程式LED显示===========================
PRODIS
	MOVLW	0H
	SUBWF	CNT_P,W
	BTFSC	STATUS,Z
	GOTO	PRODIS_M1
	GOTO	PRODIS_M2	
PRODIS_M1

	MOVLW	B'00010111'
	BTFSS	F_BLK_PRO
	GOTO	$+3
	BTFSC	F_BLINKEN
	MOVLW	0H
	IORWF	BUF_DPY3
	GOTO	PRODISEND
PRODIS_M2
	DECF	CNT_P,W
	CALL	TAB_LED_P
	IORWF	BUF_DPY3
PRODISEND	
;=======速度LED显示============================
SPDDIS
	MOVLW	0H
	SUBWF	CNT_P,W
	BTFSC	STATUS,Z
	GOTO	SPDDIS_M1
	MOVLW	01H
	SUBWF	CNT_P,W
	BTFSC	STATUS,Z
	GOTO	SPDDIS_M1
	GOTO	SPDDIS_M2
SPDDIS_M1
	BTFSC	F_START
	GOTO	SPDDIS_M1B
SPDDIS_M1_1	
	MOVFW	SPEED
	CALL	TAB_LED_S1
	IORWF	BUF_DPY2
	MOVFW	SPEED
	CALL	TAB_LED_S2
	IORWF	BUF_DPY1
	GOTO	SPDDISEND
SPDDIS_M1B
	BTFSS	F_BLINKEN
	GOTO	SPDDIS_M1_1
	MOVFW	SPEED
	CALL	TAB_LED_S1B
	IORWF	BUF_DPY2
	MOVFW	SPEED
	CALL	TAB_LED_S2B
	IORWF	BUF_DPY1
	GOTO	SPDDISEND	
	
	
	
SPDDIS_M2
	MOVFW	MIN_SPD
	CALL	TAB_LED_MIN_S1
	MOVWF	TEMP1
	MOVFW	MAX_SPD
	CALL	TAB_LED_MAX_S1
	ANDWF	TEMP1
	MOVFW	SPEED
	CALL	TAB_LED_C_S1
	BTFSS	F_BLK_SPD
	GOTO	$+3
	BTFSC	F_BLINKEN
	ANDWF	TEMP1
	MOVFW	TEMP1
	IORWF	BUF_DPY2
	
	MOVFW	MIN_SPD
	CALL	TAB_LED_MIN_S2
	MOVWF	TEMP1
	MOVFW	MAX_SPD
	CALL	TAB_LED_MAX_S2
	ANDWF	TEMP1
	MOVFW	SPEED
	CALL	TAB_LED_C_S2
	BTFSS	F_BLK_SPD
	GOTO	$+3	
	BTFSC	F_BLINKEN
	ANDWF	TEMP1
	MOVFW	TEMP1
	IORWF	BUF_DPY1
SPDDISEND	
;=======时间显示================================
TIMDIS	
	MOVFW	CNT_DAT_PRO
	MOVWF	TEMP1
	CLRF	TEMP2
TIMDIS1
	MOVLW	.12
	SUBWF	TEMP1,F
	BTFSS	STATUS,C
	GOTO	TIMDIS2
	INCF	TEMP2
	GOTO	TIMDIS1
TIMDIS2	MOVFW	TEMP2	
	CALL	TAB_LED_T
	IORWF	BUF_DPY2
;=======扬升位置显示=============================
INCLDIS
	MOVLW	.0
	SUBWF	TST_INCL,W
	BTFSC	STATUS,Z
	GOTO	INCLDIS1
	MOVLW	.1
	SUBWF	TST_INCL,W
	BTFSC	STATUS,Z
	GOTO	INCLDIS2
	MOVLW	.2
	SUBWF	TST_INCL,W
	BTFSC	STATUS,Z
	GOTO	INCLDIS3
	BTFSS	F_BLK_INCL
	GOTO	$+3
	BTFSC	F_BLINKEN
	GOTO	INCLDISEND
	MOVLW	.3
	SUBWF	TST_INCL,W
	BTFSC	STATUS,Z
	GOTO	INCLDIS2
	GOTO	INCLDIS3
	
INCLDIS1	
	BSF	BUF_DPY3,6
	GOTO	INCLDISEND
INCLDIS2
	BSF	BUF_DPY3,5
	GOTO	INCLDISEND
INCLDIS3
	BSF	BUF_DPY3,7
	GOTO	INCLDISEND
INCLDISEND
;=======电源指示================================
	BTFSC	F_PWR
	BSF	BUF_DPY2,0
;===============================================	
DISPLAYEND
	MOVFW	BUF_DPY1
	MOVWF	DPY1
	MOVFW	BUF_DPY2
	MOVWF	DPY2
	MOVFW	BUF_DPY3
	MOVWF	DPY3
	RETURN
;------------------------------------------------
;扬升自动定程式
INCLSET
	MOVLW	0H
	SUBWF	SET_INCL,W
	BTFSC	STATUS,Z
	GOTO	INCLSETA
	
	MOVLW	04H
	SUBWF	SET_INCL,W
	BTFSC	STATUS,Z
	GOTO	INCLSETB
	
	MOVLW	03H
	SUBWF	SET_INCL,W
	BTFSC	STATUS,Z
	GOTO	INCLSETC
	GOTO	INCLSETEND
;=======后倾定位==================================
INCLSETC
	MOVFW	TST_INCL
	SUBWF	SET_INCL,W
	BTFSC	STATUS,Z
	GOTO	INCLOUTSTOP
	GOTO	INCLOUTDWN
;=======前倾定位==================================
INCLSETB
	MOVFW	TST_INCL
	SUBWF	SET_INCL,W
	BTFSC	STATUS,Z
	GOTO	INCLOUTSTOP
	GOTO	INCLOUTUP
;=======水平定位==================================		
INCLSETA
	MOVFW	TST_INCL
	SUBWF	SET_INCL,W
	BTFSC	STATUS,Z
	GOTO	INCLOUTSTOP		
	MOVLW	.2
	SUBWF	TST_INCL,W
	BTFSC	STATUS,Z
	GOTO	INCLOUTDWN
	MOVLW	.4
	SUBWF	TST_INCL,W
	BTFSC	STATUS,Z
	GOTO	INCLOUTDWN
	GOTO	INCLOUTUP
;=======扬升上升输出===============================
INCLOUTUP
	BSF	F_UP
	BCF	F_DWN
	GOTO	INCLSETEND
;=======扬升下降输出================================
INCLOUTDWN
	BSF	F_DWN
	BCF	F_UP
	GOTO	INCLSETEND
;=======扬升停止====================================
INCLOUTSTOP
	BCF	F_DWN
	BCF	F_UP		
;===================================================
INCLSETEND
	RETURN
;--------------------------------------------------------------
;手动扬升定位程式
SWT_INCL
	BTFSS	SW_UP
	GOTO	SWT_I5
	MOVLW	.4
	SUBWF	TST_INCL,W
	BTFSS	STATUS,Z
	GOTO	SWT_I1
	BSF	F_BLK_INCL
	CALL	INCLOUTSTOP
	GOTO	SWT_INCLEND
SWT_I1
	CALL	INCLOUTUP
	GOTO	SWT_INCLEND	
SWT_I5	
	BTFSS	SW_DWN
	GOTO	SWT_ISTOP
	MOVLW	.3
	SUBWF	TST_INCL,W
	BTFSS	STATUS,Z
	GOTO	SWT_I6
	BSF	F_BLK_INCL
	CALL	INCLOUTSTOP
	GOTO	SWT_INCLEND
SWT_I6			
	CALL	INCLOUTDWN
	GOTO	SWT_INCLEND
SWT_ISTOP
	CALL	INCLOUTSTOP
	BCF	F_BLK_INCL
SWT_INCLEND
	RETURN	
;-------------------------------------------------------------
SWCLR
	BCF	F_SW_ONF
	BCF	F_SW_FAST
	BCF	F_SW_SLOW
	BCF	F_SW_UP
	BCF	F_SW_DWN
	BCF	F_SW_NEM
	BCF	F_SW_P1
	BCF	F_SW_P2
	BCF	F_SW_P3
	RETURN
;--------------------------------------------------------------
DATCLR
;	CLRF	CNT_DAT_PRO
	CLRF	TMS
	CLRF	TMX
	CLRF	TMX1
	CLRF	TM_INCLOVER
	BCF	F_INCLOVER
	CLRF	TM_NOP
	BCF	F_NOP
	BCF	F_DAT_SET
	BCF	F_OVER_SET
	BCF	F_BLK_SPD
	BCF	F_BLK_PRO
	RETURN
;--------------------------------------------------------------

;==============================================================
;延时15us
DLY	MOVLW	.15
	MOVWF	TEMP
	NOP
	DECFSZ	TEMP
	GOTO	$-2
	RETURN	
;==============================================================
;主电机控制程式
MOTORCON
;======速度转化为电压值=======================================
	MOVFW	SPEED
	CALL	TAB_V
	MOVWF	BUF_V
;=======目标电压逼近==========================================
BUF2SET
	BTFSS	F_LMT		
	GOTO	BUF2SETEND
	BCF	F_LMT
	MOVFW	SET_V
	SUBWF	BUF_V,W
	BTFSC	STATUS,Z
	GOTO	BUF2SETEND
	BTFSS	STATUS,C
	DECF	SET_V
	BTFSC	STATUS,C
	INCF	SET_V
BUF2SETEND
;=============================================================
MOTORCONB
	BTFSS	F_VLMT
	GOTO	MOTORCONEND
	BCF	F_VLMT	
;=======测输出电流============================================
	MOVLW	ANSETL0
	MOVWF	ADCON0
	CALL	DLY
	BSF	GO
	GOTO	$+1
	BTFSC	GO
	GOTO	$-1
	MOVFW	ADRES
	MOVWF	DAT_I
;=======测输出电压============================================
	MOVLW	ANSETL1
	MOVWF	ADCON0
	CALL	DLY
	BSF	GO
	GOTO	$+1
	BTFSC	GO
	GOTO	$-1
	MOVFW	DAT_I
	MOVWF	TEMP
	CLRC
	RRF	TEMP
	CLRC
	RRF	TEMP,W
	SUBWF	ADRES,W
	MOVWF	DAT_V
	MOVLW	.0
	BTFSS	STATUS,C
	MOVWF	DAT_V	
	
;=======电压比较============================================
VCOM

	MOVFW	SET_V
	SUBWF	DAT_V,W
	BTFSC	STATUS,Z
	GOTO	PWMALL
	BTFSC	STATUS,C
	GOTO	PWMSUB
	BTFSS	F_ALARM
	GOTO	PWMADD
	GOTO	PWMSUB
VCOMEND	
;=======PWM调整=============================================
PWMADD
	MOVF	PWMH,F
	BTFSS	STATUS,Z
	GOTO	PWMADD1
	MOVLW	.6
	SUBWF	PWML,W
	BTFSC	STATUS,C
	GOTO	PWMADD1
	MOVLW	.6
	MOVWF	PWML
	GOTO	PWMSEND
PWMADD1
	MOVLW	.1
	ADDWF	PWML,F
	BTFSC	STATUS,C
	INCF	PWMH
	GOTO	PWMSEND	
PWMSUB
	MOVF	PWMH,F
	BTFSS	STATUS,Z
	GOTO	PWMSUB1
	MOVLW	.6
	SUBWF	PWML,W
	BTFSS	STATUS,C
	GOTO	PWMSEND
PWMSUB1
	MOVLW	.1
	SUBWF	PWML,F
	BTFSS	STATUS,C
	DECF	PWMH
PWMSEND
;=======PWM数据综合=========================================
PWMALL

	MOVFW	PWML
	MOVWF	PWMLOK
	MOVFW	PWMH
	MOVWF	PWMHOK
	
	MOVFW	DAT_I
	ADDWF	PWMLOK,F
	BTFSC	STATUS,C
	INCF	PWMHOK
	
	MOVLW	.3
	SUBWF	PWMHOK,W
	BTFSS	STATUS,Z
	GOTO	$+3
	MOVLW	.50
	SUBWF	PWMLOK,W
	BTFSS	STATUS,C
	GOTO	PWMALLEND

	MOVLW	03H
	MOVWF	PWMHOK
	MOVLW	.50
	MOVWF	PWMLOK
	GOTO	PWMALLEND

PWMALLEND

;=======设定过流参数=========================================
IOVERTST

	MOVLW	.70
	SUBWF	DAT_I,W
	BTFSS	STATUS,C
	GOTO	IOVERTSTB
	
IOVERTSTA
	BSF	F_ALARM
	MOVF	PWMHOK_S,F
	BTFSS	STATUS,Z
	GOTO	IOVERTSTA1
	MOVF	PWMLOK_S,F
	BTFSC	STATUS,Z
	GOTO	IOVERTSTEND
IOVERTSTA1
	MOVLW	.1
	SUBWF	PWMLOK_S,F
	BTFSS	STATUS,C
	DECF	PWMHOK_S
	GOTO	IOVERTSTEND	

IOVERTSTB
	MOVFW	PWMHOK_S
	SUBWF	PWMHOK,W
	BTFSS	STATUS,Z
	GOTO	$+5
	MOVFW	PWMLOK_S
	SUBWF	PWMLOK,W
	BTFSC	STATUS,Z
	GOTO	IOVERTSTB1
	BTFSC	STATUS,C
	GOTO	IOVERTSTB2
IOVERTSTB1	
	BCF	F_ALARM	
	MOVFW	PWMHOK
	MOVWF	PWMHOK_S
	MOVFW	PWMLOK
	MOVWF	PWMLOK_S
	GOTO	IOVERTSTEND
IOVERTSTB2
	MOVLW	.1
	ADDWF	PWMLOK_S,F
	BTFSC	STATUS,C
	INCF	PWMHOK_S
	GOTO	IOVERTSTEND
IOVERTSTEND

;=======PWM值转化为CCP======================================
PWM2CCP
	CLRF	TMP1		;清暂存器
	MOVFW	PWMLOK_S
	MOVWF	TMP2
	MOVFW	PWMHOK_S
	MOVWF	TMP3
	
	CLRC			;右移二次,取PWM高8位(10位PWM)
	RRF	TMP3
	RRF	TMP2
	RRF	TMP1		;低2位移入
	CLRC
	RRF	TMP3
	RRF	TMP2
	RRF	TMP1
	CLRC			;将低二位PWM再右移二次(与CCP1CON对齐)
	RRF	TMP1
	CLRC	
	RRF	TMP1
	MOVFW	TMP2
	BCF	INTCON,GIE
	MOVWF	CCPR1L		;装高8位
	MOVLW	B'00001100'	;保留CCP1CON的设置值
	IORWF	TMP1,W
	MOVWF	CCP1CON		;装低2位
	BSF	INTCON,GIE
;===========================================================	
MOTORCONEND
	RETURN	
;--------------------------------------------------------------
OUTCLR
	CLRF	PWMHOK
	CLRF	PWMLOK
	CLRF	PWMHOK_S
	CLRF	PWMLOK_S	
	CALL	PWM2CCP
	CLRF	PWMH
	CLRF	PWML
	CLRF	PWMOI
	CLRF	SPEED
	CLRF	MIN_SPD
	CLRF	MAX_SPD
	CLRF	BUF_V
	CLRF	SET_V
	BCF	F_START
	BCF	F_ALARM
	BCF	F_UP
	BCF	F_DWN
	RETURN
;--------------------------------------------------------------
;速度调整程式
SWT_SPD
	BTFSS	F_SW_FAST
	GOTO	SWT_SPD5
	BCF	F_SW_FAST
	MOVLW	.8
	SUBWF	SPEED,W
	BTFSS	STATUS,C
	GOTO	SWT_SPD2
	MOVLW	.8
	SUBWF	MIN_SPD,W
	BTFSS	STATUS,C
	INCF	MIN_SPD
	GOTO	SWT_SPDEND
SWT_SPD2		
	INCF	SPEED
	MOVFW	SPEED
	SUBWF	MAX_SPD,W
	BTFSS	STATUS,C
	INCF	MAX_SPD
	MOVFW	MIN_SPD
	SUBWF	MAX_SPD,W
	SUBLW	.4
	BTFSS	STATUS,C
	INCF	MIN_SPD
	GOTO	SWT_SPDEND
SWT_SPD5
	BTFSS	F_SW_SLOW
	GOTO	SWT_SPDEND
	BCF	F_SW_SLOW
	MOVF	SPEED,F
	BTFSS	STATUS,Z
	GOTO	SWT_SPD6
	MOVF	MAX_SPD,F
	BTFSS	STATUS,Z
	DECF	MAX_SPD
	GOTO	SWT_SPDEND
SWT_SPD6	
	DECF	SPEED
	MOVFW	MIN_SPD
	SUBWF	SPEED,W
	BTFSS	STATUS,C
	DECF	MIN_SPD
	MOVFW	SPEED
	SUBWF	MAX_SPD,W
	SUBLW	.4
	BTFSS	STATUS,C
	DECF	MAX_SPD	
SWT_SPDEND
	RETURN
;-------------------------------------------------------------
DISCLR
	MOVLW	.0
	MOVWF	DPY1
	MOVWF	DPY2
	MOVWF	DPY3
	MOVWF	BUF_DPY1
	MOVWF	BUF_DPY2
	MOVWF	BUF_DPY3
	RETURN
;-------------------------------------------------------------
ERRPRO
	CALL	OUTCLR
	CALL	DATCLR
	CLRF	CNT_DAT_PRO
	CALL	SWCLR
	BSF	F_ERR
	CLRWDT
	CALL	DISPLAY
	BTFSS	F_SW_ONF
	GOTO	$-3
	BCF	F_ERR
	GOTO	PWROFF	
;--------------------------------------------------------------
MAIN
	CLRWDT
	BSF	F_END
	CLRF	CNT_P
	BTFSC	F_ERR
	GOTO	ERRPRO
	CALL	DISPLAY
	CALL	MOTORCON
	MOVLW	.50
	SUBWF	DAT_V,W
	BTFSC	STATUS,C
	GOTO	MAIN
	BCF	F_END
	CALL	OUTCLR
	CALL	DATCLR
	CLRF	CNT_DAT_PRO
	BCF	F_INCL_ZERO
	MOVLW	.20
	CALL	DELAY		;延时重新测定位置
	CALL	SWCLR
;=======扬升回位检测===========================================
INCLRES
	CLRWDT
	MOVLW	.0
	MOVWF	SET_INCL
	CALL	INCLSET
	BTFSC	F_INCLOVER
	GOTO	ERRPRO
	CALL	DISPLAY
	MOVLW	.0
	SUBWF	TST_INCL,W
	BTFSS	STATUS,Z
	GOTO	INCLRES
	
	MOVLW	.20
	CALL	DELAY
	
PWROFF	
	CALL	DISCLR
	CALL	SWCLR
	BCF	F_PWR
;=======电源开关检测===========================================	
PWRTST
	CLRWDT
	CALL	OUTCLR
	CALL	DATCLR
	CLRF	CNT_DAT_PRO
	BTFSS	F_SW_ONF
	GOTO	PWRTST
	CALL	SWCLR
	CLRF	CNT_P
	BSF	F_PWR
	BSF	F_BLK_PRO
;=======模式选择==============================================
MCHOOSE
	CLRWDT
	CALL	SWT_INCL
	BTFSC	F_ERR
	GOTO	ERRPRO
	BTFSC	F_SW_NEM
	GOTO	M_NEM
	BTFSC	F_SW_P1
	GOTO	MPROIN1
	BTFSC	F_SW_P2
	GOTO	MPROIN2
	BTFSC	F_SW_P3
	GOTO	MPROIN3
	CALL	DISPLAY
	BTFSC	F_SW_ONF
	GOTO	MAIN
	BTFSC	F_NOP
	GOTO	MAIN
	GOTO	MCHOOSE
;=======手动模式===============================================
M_NEM
	CALL	SWCLR
	CALL	DATCLR
	MOVLW	.1
	MOVWF	CNT_P
	BSF	F_START
M_NEM_LP
	CLRWDT	
	CALL	SWT_SPD
	CALL	SWT_INCL
	CALL	DISPLAY
	CALL	MOTORCON
	BTFSC	F_ERR
	GOTO	ERRPRO
	BTFSC	F_SW_P1
	GOTO	MCHOOSE
	BTFSC	F_SW_P2
	GOTO	MCHOOSE
	BTFSC	F_SW_P3
	GOTO	MCHOOSE
	BTFSC	F_OVER_SET
	GOTO	MEND
	BTFSC	F_SW_ONF
	GOTO	MAIN
	GOTO	M_NEM_LP
;=======程式入口设置=============================================
MPROIN1
	MOVLW	.2
	MOVWF	CNT_P
	MOVLW	.2
	MOVWF	MIN_SPD
	MOVWF	SPEED
	MOVLW	.6
	MOVWF	MAX_SPD
	GOTO	MPRO
MPROIN2
	MOVLW	.3
	MOVWF	CNT_P
	MOVLW	.3
	MOVWF	MIN_SPD
	MOVWF	SPEED
	MOVLW	.7
	MOVWF	MAX_SPD
	GOTO	MPRO
MPROIN3
	MOVLW	.4
	MOVWF	CNT_P
	MOVLW	.1
	MOVWF	MIN_SPD
	MOVWF	SPEED
	MOVLW	.5
	MOVWF	MAX_SPD
	GOTO	MPRO
;=======程式模式===================================================
MPRO
	CALL	SWCLR
	CALL	DATCLR			
	BSF	F_START
	BSF	F_BLK_SPD
MPRO_LP	
	CLRWDT
	CALL	TAB_INCL_PRO
	MOVWF	SET_INCL
	CALL	SWT_SPD
	CALL	INCLSET
	CALL	DISPLAY
	CALL	MOTORCON
	BTFSC	F_ERR
	GOTO	ERRPRO
	
	MOVLW	.2
	SUBWF	CNT_P,W
	BTFSC	STATUS,Z
	GOTO	MPRO_SWT1
	MOVLW	.3
	SUBWF	CNT_P,W
	BTFSC	STATUS,Z
	GOTO	MPRO_SWT2
	MOVLW	.4
	SUBWF	CNT_P,W
	BTFSC	STATUS,Z
	GOTO	MPRO_SWT3
MPRO2	
	BTFSC	F_SW_ONF
	GOTO	MAIN
	BTFSC	F_OVER_SET
	GOTO	MEND
	BTFSS	F_DAT_SET
	GOTO	MPRO_LP
	BCF	F_DAT_SET
	INCF	SPEED
	MOVFW	MAX_SPD
	SUBWF	SPEED,W
	BTFSS	STATUS,C
	GOTO	MPRO_LP
	MOVFW	MIN_SPD
	MOVWF	SPEED
	GOTO	MPRO_LP

MPRO_SWT1
	BCF	F_SW_P1
	BTFSC	F_SW_P2
	GOTO	MCHOOSEB
	BTFSC	F_SW_NEM
	GOTO	MCHOOSEB
	BTFSC	F_SW_P3
	GOTO	MCHOOSEB
	GOTO	MPRO2
MPRO_SWT2
	BCF	F_SW_P2
	BTFSC	F_SW_P1
	GOTO	MCHOOSEB
	BTFSC	F_SW_NEM
	GOTO	MCHOOSEB
	BTFSC	F_SW_P3
	GOTO	MCHOOSEB
	GOTO	MPRO2

MPRO_SWT3	
	BCF	F_SW_P3
	BTFSC	F_SW_P2
	GOTO	MCHOOSEB
	BTFSC	F_SW_NEM
	GOTO	MCHOOSEB
	BTFSC	F_SW_P1
	GOTO	MCHOOSEB
	GOTO	MPRO2
	
	
MCHOOSEB
	BCF	F_INCL_ZERO
	MOVLW	.20
	CALL	DELAY
	MOVLW	.0
	MOVWF	SET_INCL
	BCF	F_INCL_ZERO	
	CALL	INCLSET
	GOTO	MCHOOSE
	
	
;=======程式结束====================================================
MEND

	GOTO	MAIN

	CALL	DATCLR
	CALL	OUTCLR
	BSF	F_ERR
	CLRF	TM_NOP1
	BCF	F_NOP1
	
	CLRWDT
	CALL	DISPLAY
	BTFSS	F_NOP1
	GOTO	$-3

	MOVLW	.8
	MOVWF	SPEED
	BCF	F_ERR
	GOTO	M_NEM


	GOTO	MAIN			
;===================================================================

;-----------------------------------------------------------------
	END

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客