⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zhuasucontrol.asm

📁 四线步进电机控制汇编程序(PIC单片机)
💻 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 + -