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

📄 motor_28.asm

📁 pic得电机控制程序
💻 ASM
📖 第 1 页 / 共 3 页
字号:
	MOVF	FSR,0		; EEADDR
	GOTO	EEPROG		; write complete byte
;--------------------------------
VBIT	ANDWF	INDF,0		;
	BTFSC	STATUS,ZERO	;
	GOTO	BITCLR		;
	NOP			;
BITSET	BTFSC	BT3,3		;
	GOTO	ACKNOW		; =1 
	GOTO	HOPP		;

BITCLR	BTFSS	BT3,3		;
	GOTO	ACKNOW		; =0
	GOTO	HOPP		;
;--------------------------------
BITPOS	ADDWF	PC		;
	RETLW	00000001b	; 0	
	RETLW	00000010b	; 1	
	RETLW	00000100b	; 2	
	RETLW	00001000b	; 3	
	RETLW	00010000b	; 4	
	RETLW	00100000b	; 5	
	RETLW	01000000b	; 6	
	RETLW	10000000b	; 7	
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

;.....................................................................
DECCON	BTFSC	INDF,4		; 000>0<CCCD
	GOTO	CONCON		; 0001 consist control
	RRF	INDF,0		; 0000CCC>D< moved to carry
	ANDLW	00000111b	;
	ADDWF	PC		;
	GOTO	RESET		; 000 reset / hard reset
	GOTO	HOPP	;FTEST	; 001 factory test instruction
	GOTO	HOPP		; 010
	GOTO	HOPP ;ADVACK		; 011 advance acknowl. CV29,3	
	GOTO	HOPP		; 100
	GOTO	HOPP ;ADVADR		; 101 advance adressing CV29,5	
	GOTO	HOPP		; 110
	GOTO	HOPP ;ACKREQ		; 111 acknowledge request
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

;.....................................................................
LIGHT	BTFSS	INDF,4		;				1
	GOTO	NOLIGHT		;				2-3
	BTFSC	DIR		; direction invert?		3
	GOTO	BLIGHT		;				4-5
	NOP			;				5
FLIGHT	BTFSC	LIINV		; light invert?	(PWRSRC)	6
	GOTO	BLI		;				7-8
FLI	BSF	GPIOOUT,LIGHT1	;				8
	BCF	GPIOOUT,LIGHT2	;				9
	RETLW	0		;				10-11

BLIGHT	BTFSC	LIINV		; light invert?	(PWRSRC)	6
	GOTO	FLI		;				7-8
BLI	BCF	GPIOOUT,LIGHT1	;				8
	BSF	GPIOOUT,LIGHT2	;				9
	RETLW	0		;				10-11

NOLIGHT	BCF	GPIOOUT,LIGHT1	;				4
	BCF	GPIOOUT,LIGHT2	;				5
	NOP			;				6
	NOP			;				7
	NOP			;				8
	NOP			;				9
	RETLW	0		;				10-11
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

;....................................................................
FINDCV	BCF	NOCV		;
	BCF	ROMCV		;

	XORLW	(1-1)		; CV1
	BTFSC	STATUS,ZERO	;
	RETLW	CV1		; Primary Adress

	XORLW	(1-1)^(17-1)	; CV17
	BTFSC	STATUS,ZERO	;
	RETLW	CV17		; Extended Adress Low Byte

	XORLW	(17-1)^(18-1)	; CV18
	BTFSC	STATUS,ZERO	;
	RETLW	CV18		; Extended Adress High Byte

	XORLW	(18-1)^(19-1)	; CV19
	BTFSC	STATUS,ZERO	;
	RETLW	CV19		; Consist Adress

	XORLW	(19-1)^(29-1)	; CV29
	BTFSC	STATUS,ZERO	;
	RETLW	CV29		; 0=DIR 1=14/28 2=PWSRC 3=ADVACK 4=SPEEDTAB 5=LADRE 6= 7=ACCDEC

	XORLW	(29-1)^(49-1)	; CV49
	BTFSC	STATUS,ZERO	;
	RETLW	CV49		; Output F1-F8 to GP2

	XORLW	(49-1)^(50-1)	; CV50
	BTFSC	STATUS,ZERO	;
	RETLW	CV50		; front light switch with F1-F8

	XORLW	(50-1)^(51-1)	; CV51
	BTFSC	STATUS,ZERO	;
	RETLW	CV51		; back light switch with F1-F8

	XORLW	(51-1)^(64-1)	; CV64
	BTFSC	STATUS,ZERO	;
	RETLW	CV64		; configuration byte

	BSF	ROMCV		;
	XORLW	(64-1)^(7-1)	; CV7
	BTFSC	STATUS,ZERO	;
	RETLW	CV7		; Version No

	XORLW	(7-1)^(8-1)	; CV8
	BTFSC	STATUS,ZERO	;
	RETLW	CV8		; Manufacturer

	BCF	ROMCV		;
	BSF	NOCV		;
	RETLW	0xFF		; no CV's to program
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

;....................................................................
PROG	MOVF	FSR,0		;
	ANDLW	00001111b	;
	XORLW	BT3		;
	BTFSS	STATUS,ZERO	;
	GOTO	PROGREG		; 3 byte command

PROGOTM	MOVF	BT2,0		;
	CALL	FINDCV		;
	BTFSC	NOCV		;
	GOTO	HOPP		;

	BTFSC	ROMCV		;
	BTFSS	BT1,3		; write/verify bit
	GOTO	ROMNEXT		;
	MOVWF	MAPCV		;
	MOVLW	MAPCV		;

ROMNEXT	BTFSS	BT1,2		;
	GOTO	BITMAN		; bit manipulation

	BTFSS	BT1,3		; write/verify bit
	GOTO	EEVERI		;
;--------------------------------

EEPROG	ANDLW	00001111b	;
	MOVWF	EEADDR		;
READ	CALL	READ_RANDOM	;
	BTFSS	PC_OFFSET,EE_OK ;(BTFSC STATUS,ZERO) ERROR?
	GOTO	READ
	CLRF	CONFIG
	MOVF	INDF,0		;
	XORWF	EEDATA,0	;

	BTFSC	STATUS,ZERO	;
	BCF	STATUS,SEITE	; auf ROM seite 0
	BTFSC	STATUS,ZERO	;
	GOTO	LOADREG		;

	MOVF	INDF,0		;
	MOVWF	EEDATA		;

	BTFSC	PROGBIT		;
	GOTO	EEIN		;
	BSF	PROGBIT		; 2x prog
	GOTO	PROGEX		;

EEIN	CALL	WRITE_BYTE	;
	BTFSS	PC_OFFSET,EE_OK ;(BTFSC STATUS,ZERO) ERROR?
	GOTO	EEIN		;
	CLRF	CONFIG
	BCF	STATUS,SEITE	; auf ROM seite 0
	BCF	PROGBIT		;
	GOTO	INIT		; 
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

;....................................................................

OLDACK	MOVF	BT1,0		;------ for old DCC-Programmer ------
	MOVWF	INDF		; save loco adress
	CLRW			; CV1
	CLRF	MAPCV		; for old acknowledge
	GOTO	OACK		;

EEVERI	BTFSC	ROMCV		;
	GOTO	RDROMCV		;

	ANDLW	00001111b	;
OACK	MOVWF	EEADDR		;
READ2	CALL	READ_RANDOM	;
	BTFSS	PC_OFFSET,EE_OK ;(BTFSC STATUS,ZERO) ERROR?
	GOTO	READ2
	CLRF	CONFIG
	MOVF	INDF,0		;
	XORWF	EEDATA,0	;

VERIBK	BTFSS	STATUS,ZERO	;
	BCF	STATUS,SEITE	; to ROM page 0
	BTFSS	STATUS,ZERO	;
	GOTO	START		;

ACKNOW	BTFSC	ACKBIT		;
	GOTO	ACKNOW1		;
	BSF	ACKBIT		; 2x verify 
	GOTO	PROGEX		;

ACKNOW1	MOVLW	MOTOR1|(1<<LIGHT1)|(1<<LIGHT2)	; set FL/FR and motor on
	MOVWF	GPIO		;

LOOP	MOVLW	5		; 7x765uS (5355)
	MOVWF	BT5		;
OLOOP	CLRF	BT6		; help register

ILOOP	INCFSZ	BT6,1		; 765uS ON	1
	GOTO	ILOOP		;		2-3
	DECFSZ	BT5,1		;		
	GOTO	OLOOP		;		

	CLRF	GPIO		;
	BCF	ACKBIT		;
	BCF	FSR,5		;
	BCF	STATUS,SEITE	; to ROM page 0

	GOTO	LOADREG		;

RDROMCV	XORWF	INDF,0		;
	GOTO	VERIBK		;
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

;....................................................................

PROGREG	MOVF	BT1,0		; CV5=CV29
	XORLW	01111101b	; reg6
	ANDLW	11110111b
	BTFSC	STATUS,ZERO	;
	GOTO	REG6		;
	XORLW	(01111101b)^(01111100b)	; reg5
	BTFSC	STATUS,ZERO	;
	GOTO	REG5		;
	MOVF	BT1,0		;
	ANDLW	00000111b	; lower 3bit
	ADDWF	MAPCV,0		;
	CALL	FINDCV		;
	BTFSC	NOCV		;
	GOTO	HOPP		;
PREG	BTFSS	BT1,3		;
	GOTO	EEVERI		;
	GOTO	EEPROG		;

REG6	DECF	BT2,1		;
	BCF	STATUS,CARRY	;
	RLF	BT2,1		;
	RLF	BT2,1		;

REG5	MOVF	BT1,0		;
	ANDLW	00000111b	; lower 3bit
	GOTO	PREG		;

;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


;....................................................................
FTION1	CALL	PWMTAB1		;				3.-3
	BTFSS	INDF,4		; 101>1<FFFF			4
	GOTO	FTION2		; 1010xxxx			5
	SWAPF	INDF,0		;				6
	ANDLW	11110000b	;				7
	BCF	FSR,5		;				8
	IORWF	F1F8SET,1	; xxxx00X0			9
	XORLW	0x0F		;				10
	GOTO	FT2		;				11-12
;--------------------------------
FTION	CALL	PWMTAB1		;				3.-3
	CALL	LIGHT		;				4
	BTFSC	INDF,4		; 100>L<FFFF 28 speed step	5
	BSF	FS28		; automatic detection		6

FT1	MOVF	INDF,0		;				7
	ANDLW	00001111b	; 1111xxXx			8
	BCF	FSR,5		;				9
	IORWF	F1F8SET,1	; xxxx00X0			10
	XORLW	0xF0		;				11
	NOP			;				12
FT2	ANDWF	F1F8SET,0	;				13
	MOVWF	F1F8SET		;				14
	MOVWF	BT6		; save for switch to 2nd page	15
	BSF	FSR,5		;				16
;--------------------------------
	NOP			;				17
;.PWM2................................................................
	BCF	FSR,5		;				18
	MOVF	PWM2,0		;				19
	MOVWF	GPIO		;				20
	BSF	FSR,5		;				21
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	MOVF	BT6,0		;				22
	ANDWF	CV49,0		; F1F8->GP3			23
	BTFSC	STATUS,ZERO	;				24
	GOTO	FOFF		;				25-26
	NOP			;				26
FON	BTFSC	FLACKON		;				27
	BSF	FLACKER		;				28
	BSF	GPIOOUT,LED	;				1.
	GOTO	FT50		;				2.-3.

FOFF	BTFSC	LITAUTO		;				27
	GOTO	FT50		;				28
	BTFSC	FLACKON		;				1.
	BCF	FLACKER		;				2.
	BCF	GPIOOUT,LED	;				3.
;--------------------------------
FT50	CALL	PWMTAB1		;				3.-3
	MOVF	BT6,0		;				4
	ANDWF	CV50,0		;				5
	BTFSC	STATUS,ZERO	;				6
	GOTO	NXFT50A		;				7-8
	BSF	REDLT		;				8
	BTFSC	RDLTON		;				9
	GOTO	FT51		;				10-11
	BTFSC	RANGIER		; low activ			11
	GOTO	NXFT50		;				12-13
	BSF	GPIOOUT,LIGHT2	;				13
NXFT50	BSF	GPIOOUT,LIGHT1	;				14
	NOP			;				15
	GOTO	FT51		;				16-17

NXFT50A	GOTO	$+1		;				9-10
	GOTO	$+1		;				11-12
	GOTO	$+1		;				13-14
	BTFSC	RANGIER		; low activ			15
	BCF	GPIOOUT,LIGHT1	;				16
	BCF	REDLT		;				17
;--------------------------------
;.PWM2................................................................
FT51	BCF	FSR,5		;				18
	MOVF	PWM2,0		;				19
	MOVWF	GPIO		;				20
	BSF	FSR,5		;				21
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	MOVF	BT6,0		;				22
	ANDWF	CV51,0		;				23
	BTFSC	STATUS,ZERO	;				24
	GOTO	NXFT51		;				25-26
	BTFSC	SPEED2		; low activ			26
	BSF	GPIOOUT,LIGHT2	;				27
	BTFSS	SPEED2		; low activ			28
	BSF	FLAGS2		;				1.
	GOTO	HOPP3		;				2.-3.

NXFT51	BTFSC	SPEED2		; low activ			27
	BCF	GPIOOUT,LIGHT2	;				28
	BCF	FLAGS2		;				1.
	GOTO	HOPP3		;				2.-3.
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

;.....................................................................
FORWARD	CALL	PWMTAB1		;				3.-3
	BCF	DIR		;				4
	GOTO	SPEED		;				5-6
REVERSE	CALL	PWMTAB1		;				3.-3
	BSF	DIR		;				4
	NOP			;				5
	NOP			;				6
SPEED	MOVF	GPIOOUT,0	;---------- Direction --------- 7
	ANDLW	(255-(MOTOR1|MOTOR2)) ;11111100b	; Motor out = 0			8
	BTFSC	DIR		;				9
	IORLW	MOTOR1		; forward			10
	BTFSS	DIR		;				11
	IORLW	MOTOR2		; reverse 			12
	BTFSC	CV29,0		; CV29,0 (DIR) invert?		13
	XORLW	(MOTOR1|MOTOR2)	; invert Motor out		14
	BTFSC	CV19,7		; CV19,7 (DIR) invert?		15
	XORLW	(MOTOR1|MOTOR2)	; invert Motor out		16
	MOVWF	GPIOOUT		;------------------------------	17
;--------------------------------------------------------------------
;.PWM2................................................................
	BCF	FSR,5		;				18
	MOVF	PWM2,0		;				19
	MOVWF	GPIO		;				20
	BSF	FSR,5		;				21
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	BCF	FS126		;				22
	RLF	INDF,0		; 01DSSSSS			23
	ANDLW	00011110b	; xx04321x			24
	MOVWF	SOLL		; 1D04321x			25
	BTFSC	INDF,4		; 01D>S<SSSS			26
	BSF	SOLL,0		; mov pos.4 to pos.0		27
;........................ Arnold Digital ............................
	BTFSS	FS28		; 14/28 Speed?			28
	BCF	SOLL,0		; <- 14 Speed			1.
	NOP			;				2.
;.....................................................................
	CALL	PWMTAB1		;				3.-3
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	BTFSS	FS28		; 14/28 Speed?			4
	CALL	LIGHT		;				5-6 (1-11)
;^^^^^^^^^^^^^^^^^^^^^^^^ Arnold Digital ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;.PWM2................................................................
	BCF	FSR,5		;				18
	MOVF	PWM2,0		;				19
	MOVWF	GPIO		;				20
	BSF	FSR,5		;				21
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	GOTO	HOPP		;				22-23
;--------------------------------

;.....................................................................
CONCON	MOVF	BT3,0		;				55
	MOVWF	CV19		;				56
	MOVF	INDF,0		;				57
	XORLW	00010010b	;				58
	BTFSC	STATUS,ZERO	;				59
	BCF	CV19,7		;				60
	XORLW	(00010010b)^(00010011b);			61
	BTFSC	STATUS,ZERO	;				62
	BSF	CV19,7		;				63
	MOVLW	CV19		;				64
	MOVWF	INDF		;				65
	MOVF	CV19,0		;				66
	GOTO	EEPROG		;				67-68
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

;.....................................................................
ADVAN
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

RESET
FTION2				;				57
TELNEW				;				52

HOPP	NOP			;				24
	GOTO	$+1		;				25-26
	GOTO	$+1		;				27-28
	GOTO	$+1		;				1.-2.
;.....................................................................
HOPP3	CALL	PWMTAB1		;				3.-3
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	GOTO	$+1		;				4-5
	GOTO	$+1		;				6-7
	NOP			;				8
	BCF	PROGBIT		;				9
	BCF	ACKBIT		;				10
PROGEX	BCF	STATUS,SEITE	;				11
	BCF	FSR,5		;				12
	GOTO	START		;				13-14

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

	ORG	03FFh
	MOVLW	0x70		; f黵 OSCCAL

	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -