"); //-->
希望朋友能够继续关注。
将会慢慢的整理出一个完整的项目出来。
;================================================================= ;程序功能 ;作 者: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
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。