📄 zhuasucontrol.asm
字号:
;PIC16F684
;MPIDE V8.1
;xsc
;2008-2-3
;;内部振荡4MHz, RA0,RA1,RA2为电量输出显示
;;RA4/AN3为A/D采样输入
;RC5/CCP/P1A为捕捉模式,采集发动机转速脉冲
;;RA5为工作指示,闪烁0.5次/秒
;;RC0,RC1,RC2,RC3步进电机控制
;;
LIST P=16F684
#INCLUDE<P16F684.INC>
__CONFIG _BOD_ON & _CPD_ON & _MCLRE_OFF & _PWRTE_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT &_FCMEN_ON & _IESO_OFF & _CP_ON
I EQU 21H;;;;DELAY CONTER
J EQU 22H
ADGAO EQU 23H;;;;AD CONVERTER HIGH 8BIT
;ADDI EQU 24H;;;;AD CONVERTER LOW 2BIT
W_TEMP EQU 25H;;;;;;W寄存器保护
STATUS_TEMP EQU 26H;;;STATUS寄存器保护
COUNTER0 EQU 27H
COUNTER1 EQU 28H;;转速脉冲周期:COUNTER1:COUNTER0
TEMP EQU 29H
TEMP0 EQU 2AH
;J EQU 2BH
K EQU 2CH
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 0X00
NOP
GOTO QINGRAM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;中断
; ORG 0X04
; MOVWF W_TEMP
; SWAPF STATUS,W
; MOVWF STATUS_TEMP ;;;;;;现场保护
; SWAPF STATUS_TEMP,W
; MOVWF STATUS
; SWAPF W_TEMP,F
; SWAPF W_TEMP,W ;;;恢复现场
; RETFIE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;main
MAIN
NOP
CALL ZHUANSUTEST;;;;;;;;转速测试
CALL ZHUANSUCONTROL;;;;转速控制
CALL ADCONVERTER;;;;;;;A/D转换
CALL POWERDISPLAY;;;;;;电量指示
CALL WORK_DISPLAY;;;;;;工作指示
GOTO MAIN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WORK_DISPLAY-START
WORK_DISPLAY
BTFSS PIR1,TMR2IF
GOTO EXIT
BCF PIR1,TMR2IF
DECFSZ J,F
GOTO EXIT
MOVLW D'5'
MOVWF J
BTFSS PORTA,IOCA5
GOTO ZHIYI
GOTO ZHILING
ZHILING
MOVLW B'011111'
ANDWF PORTA,F
GOTO EXIT
ZHIYI
MOVLW B'100000'
IORWF PORTA,F
EXIT
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WORK_DISPLAY-END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ADCONVERTER-START
ADCONVERTER;;;;左对齐,AN0输入,VDD参考电压 FOSC/4=1MHZ
BSF ADCON0,ADON;启动A/D
CALL ADSAMTIME;延时 24us
BSF ADCON0,GO ;开始转换
BTFSC ADCON0,GO ;Is conversion done?
GOTO $-1 ;No, test again
MOVF ADRESH,W
MOVWF ADGAO
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ADCONVERTER-END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ADSAMTIME-START
ADSAMTIME;;;;DELAY24uS
MOVLW D'10'
MOVWF I
DECFSZ I,F
GOTO $-1
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ADSAMTIME-END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ZHUANSUTEST-START
ZHUANSUTEST
CLRF TMR1H
CLRF TMR1L
BCF PIR1,CCP1IF
BSF T1CON,TMR1ON;;启动TMR1
BTFSS PIR1,CCP1IF
GOTO $-1
BCF PIR1,CCP1IF
MOVF CCPR1L,W
MOVWF COUNTER0
MOVF CCPR1H,W
MOVWF COUNTER1
BTFSS PIR1,CCP1IF
GOTO $-1
BCF T1CON,TMR1ON;;关闭TMR1
;;;;两次数据相减得转速脉冲周期;;;;第一次数据:COUNTER1:COUNTER0
MOVF COUNTER0,W;;;;;;;;;;;;第二次数据:CCPR1H:CCPR1L
SUBWF CCPR1L,W;;;;;;;;;;;;;;结果存数据:COUNTER1:COUNTER0
BTFSS STATUS,C
GOTO COUNTER0MAX
CCPR1LMAX
MOVF COUNTER0,W
SUBWF CCPR1L,W
MOVWF COUNTER0
GOTO GAOWEIBIJIAN
COUNTER0MAX
MOVF CCPR1L,W
SUBWF COUNTER0,F
DECF CCPR1H,F
GAOWEIBIJIAN
MOVF COUNTER1,W
SUBWF CCPR1H,W
MOVWF COUNTER1
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;HUANSUTEST-END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;POWERDISPLAY-START
POWERDISPLAY
MOVF TEMP,W
;;;;;;;;;;;;;;;;;;;;;;;是否连接
MOVF ADGAO,F
BTFSS STATUS,Z
GOTO CONNECT
GOTO NOCONNECT
NOCONNECT
MOVLW 0X18
ANDWF PORTA,F
RETURN
CONNECT
MOVLW D'15'
SUBWF ADGAO,W
BTFSS STATUS,C
GOTO FULL
GOTO NOFULL
FULL
MOVLW 27H
MOVWF PORTA
RETURN
NOFULL
MOVLW 0H
MOVWF TEMP
NEXT
MOVF TEMP,W
CALL AD_DATA
SUBWF ADGAO,W
BTFSS STATUS,C
GOTO DISPLAY
INCF TEMP,F
GOTO NEXT
DISPLAY
MOVF TEMP,W
CALL DISPLAY_DATA
MOVWF TEMP0
BTFSS PORTA,IOCA5
GOTO QQ
MOVF TEMP0,W
IORLW 20H
MOVWF PORTA
RETURN
QQ
MOVF TEMP0,W
MOVWF PORTA
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OWERDISPLAY-END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ZHUANSUCONTROL-START
ZHUANSUCONTROL
MOVLW B'110'
SUBWF COUNTER1,W
BTFSC STATUS,Z
GOTO NO_CONTROL
MOVLW B'111'
SUBWF COUNTER1,W
BTFSC STATUS,C
GOTO ZHUANSUCONTROL_JIASU
MOVLW B'101'
SUBWF COUNTER1,W
BTFSS STATUS,C
GOTO ZHUANSUCONTROL_JIANSU
CLRF PORTC
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ZHUANSUCONTROL_JIANSU
CALL DELAY80MS
MOVLW 0X4
MOVWF K
ZHUANSUCONTROL_JIANSU_NEXT
CLRF PORTC
MOVF K,W
CALL FANZHUAN_DATA
ANDLW 0XF
MOVWF PORTC
CALL DELAY2MS
DECFSZ K,F
GOTO ZHUANSUCONTROL_JIANSU_NEXT
CLRF PORTC
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ZHUANSUCONTROL_JIASU
CALL DELAY80MS
MOVLW 0X4
MOVWF K
ZHUANSUCONTROL_JIASU_NEXT
CLRF PORTC
MOVF K,W
CALL ZHENGZHUAN_DATA
ANDLW 0XF
MOVWF PORTC
CALL DELAY2MS
DECFSZ K,F
GOTO ZHUANSUCONTROL_JIASU_NEXT
CLRF PORTC
RETURN
NO_CONTROL
CLRF PORTC
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ZHUANSUCONTROL-END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;延时2MS-START
DELAY2MS
MOVLW D'131'
MOVWF TMR0
BCF INTCON,T0IF
BTFSS INTCON,T0IF
GOTO $-1
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;延时2MS-END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;延时80MS-START
DELAY80MS
MOVLW D'20'
MOVWF K
CLRF TMR0
DELAY80MS_NEXT
BCF INTCON,T0IF
BTFSS INTCON,T0IF
GOTO $-1
BCF INTCON,T0IF
DECFSZ K,F
GOTO DELAY80MS_NEXT
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;延时80MS-END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CLEARN RAM0 AND RAM1-START
QINGRAM
MOVLW 20H
MOVWF FSR
QINGRAM0NEXT
CLRF INDF
INCF FSR,F
MOVLW 7FH
SUBWF FSR,W
BTFSS STATUS,Z
GOTO QINGRAM0NEXT;清BANK0 RAM
BSF STATUS,RP0;;清BANK1 RAM
MOVLW 0XA0
MOVWF FSR
QINGRAM1NEXT
CLRF INDF
INCF FSR,F
MOVLW 0XF0
SUBWF FSR,W
BTFSS STATUS,Z
GOTO QINGRAM1NEXT
BCF STATUS,RP0;;BANK0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CLEARN RAM0 AND RAM1-END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;INTI
INIT
BSF STATUS,RP0;;;BANK 1
MOVLW B'1100001'
MOVWF OSCCON;;;内部4MHz
CLRF OSCTUNE;
MOVLW B'011'
MOVWF OPTION_REG; TMR0 1:16
MOVLW B'11000000'
MOVWF INTCON;允许全局中断
MOVLW B'00000000'
MOVWF PIE1;;;各中断允许选择
MOVLW B'11000';;;RA3\RA4 输入
MOVWF TRISA
MOVLW B'100000';; RC5/CCP1/P1A 输入
MOVWF TRISC
BSF ANSEL,ANS3;;;RA4/AN3为A/D采样模拟输入
MOVLW B'1100'
MOVWF ADCON0;;;;FOSC/4 AD时钟选择
MOVLW 0XFF
MOVWF PR2;;;设置PR2
; MOVLW 0X42
; MOVWF PIE1;;;允许TMR2,AD中断
BCF STATUS,RP0;;;BANK 0
; CLRF TMR0
MOVLW B'100'
MOVWF CCP1CON;;;;;;;;;CCP工作在下降沿捕捉模式(RC5/P1A)
CLRF PIR1;;;各中断标志位
CLRF PORTA
CLRF PORTC
MOVLW B'111'
MOVWF CMCON0;关闭比较器
MOVLW B'1101'
MOVWF ADCON0;;;左对齐,AN3输入,VDD参考电压,未启动AD
MOVLW 0XFF
MOVWF T2CON;;;;T2——1:16
MOVLW D'15'
MOVWF J
CLRF TMR2
CLRF T1CON
GOTO MAIN
;;;;;;;;;;;;;;;;;;;;;;;;;;;DATA
FANZHUAN_DATA
ADDWF PCL,F
DT 0H,9H,5H,0X6,0XA
ZHENGZHUAN_DATA
ADDWF PCL,F
DT 0H,0XA,0X6,5H,9H
AD_DATA
ADDWF PCL,F
DT D'64',D'128',D'192',D'255',D'0'
DISPLAY_DATA
ADDWF PCL,F
DT B'111',B'011',B'001',B'000',B'000'
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -