ctw_dy.asm

来自「线切割机床高频电源脉冲发生器的程序」· 汇编 代码 · 共 1,253 行 · 第 1/2 页

ASM
1,253
字号
	BTFSS	PORTB_MAP,IP8
	BCF	PORTB,IP8
	NOP
	NOP
	NOP

	MOVLW	0XB
	SUBWF	REGL,F
GENERATOR_LOOP7:
	NOP
	NOP
	DECFSZ	REGL,F
	GOTO	GENERATOR_LOOP7
GENERATOR7_END:
	MOVLW	0XFF
	MOVWF	PORTB
	CALL	OFF_DELAY	;停歇产生
	CALL	RECEIVE		;接收加工参数
	BTFSS	FLAG,HASMODIFY
	GOTO	WAVE_GENERATOR7
	RETURN

WAVE_GENERATOR8:
	MOVF	TON,W
	MOVWF	REGL

	BTFSS	PORTB_MAP,IP1
	BCF	PORTB,IP1
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP

	BTFSS	PORTB_MAP,IP2
	BCF	PORTB,IP2
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP

	BTFSS	PORTB_MAP,IP3
	BCF	PORTB,IP3
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP

	BTFSS	PORTB_MAP,IP4
	BCF	PORTB,IP4
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP

	BTFSS	PORTB_MAP,IP5
	BCF	PORTB,IP5
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP

	BTFSS	PORTB_MAP,IP6
	BCF	PORTB,IP6
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP

	BTFSS	PORTB_MAP,IP7
	BCF	PORTB,IP7
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP

	BTFSS	PORTB_MAP,IP8
	BCF	PORTB,IP8
	NOP

	MOVLW	0XC
	SUBWF	REGL,F
GENERATOR_LOOP8:
	NOP
	NOP
	DECFSZ	REGL,F
	GOTO	GENERATOR_LOOP8
GENERATOR8_END:
	MOVLW	0XFF
	MOVWF	PORTB
	CALL	OFF_DELAY	;停歇产生
	CALL	RECEIVE		;接收加工参数
	BTFSS	FLAG,HASMODIFY
	GOTO	WAVE_GENERATOR8
	RETURN

WAVE_GENERATOR9:
	MOVF	TON,W
	MOVWF	REGL

	BTFSS	PORTB_MAP,IP1
	BCF	PORTB,IP1
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP

	BTFSS	PORTB_MAP,IP2
	BCF	PORTB,IP2
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP

	BTFSS	PORTB_MAP,IP3
	BCF	PORTB,IP3
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP

	BTFSS	PORTB_MAP,IP4
	BCF	PORTB,IP4
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP

	BTFSS	PORTB_MAP,IP5
	BCF	PORTB,IP5
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP

	BTFSS	PORTB_MAP,IP6
	BCF	PORTB,IP6
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP

	BTFSS	PORTB_MAP,IP7
	BCF	PORTB,IP7
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP

	BTFSS	PORTB_MAP,IP8
	BCF	PORTB,IP8

	MOVLW	0XD
	SUBWF	REGL,F
GENERATOR_LOOP9:
	NOP
	NOP
	DECFSZ	REGL,F
	GOTO	GENERATOR_LOOP9
GENERATOR9_END:
	MOVLW	0XFF
	MOVWF	PORTB
	CALL	OFF_DELAY	;停歇产生
	CALL	RECEIVE		;接收加工参数
	BTFSS	FLAG,HASMODIFY
	GOTO	WAVE_GENERATOR9
	RETURN

WAVE_GENERATOR10:
	MOVF	TON,W
	MOVWF	REGL

	BTFSS	PORTB_MAP,IP1
	BCF	PORTB,IP1
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP

	BTFSS	PORTB_MAP,IP2
	BCF	PORTB,IP2
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP

	BTFSS	PORTB_MAP,IP3
	BCF	PORTB,IP3
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP

	BTFSS	PORTB_MAP,IP4
	BCF	PORTB,IP4
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP

	BTFSS	PORTB_MAP,IP5
	BCF	PORTB,IP5
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP

	BTFSS	PORTB_MAP,IP6
	BCF	PORTB,IP6
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP

	BTFSS	PORTB_MAP,IP7
	BCF	PORTB,IP7
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP

	BTFSS	PORTB_MAP,IP8
	BSF	PORTB,IP8

	MOVLW	0XE
	SUBWF	REGL,F
GENERATOR_LOOP10:
	NOP
	NOP
	DECFSZ	REGL,F
	GOTO	GENERATOR_LOOP10
GENERATOR10_END:
	MOVLW	0XFF
	MOVWF	PORTB
	CALL	OFF_DELAY	;停歇产生
	CALL	RECEIVE		;接收加工参数
	BTFSS	FLAG,HASMODIFY
	GOTO	WAVE_GENERATOR10
	RETURN

;============================
RECEIVE:


	BTFSS	PORTC,SCLK	;上位机有参数要发送吗?
	RETURN
	NOP			;是
	NOP
	NOP
	NOP
	NOP
	BTFSS	PORTC,SCLK	;再次确认
	RETURN

	;前沿握手信号宽度确认1MS
	MOVLW	0XFA
	MOVWF	REGL
RECEIVE1:
	BTFSS	PORTC,SCLK
	RETURN
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	DECFSZ	REGL,F
	GOTO	RECEIVE1


	;有参数将传送,开始接收
RECEIVE_C:
	CALL	RCV_ONE_BYTE
	BCF	PORTC,RETRY
	MOVF	RECEIVEBYTE,W
	MOVWF	TON

	CALL	RCV_ONE_BYTE
	MOVF	RECEIVEBYTE,W
	MOVWF	TOFFL

	CALL	RCV_ONE_BYTE
	MOVF	RECEIVEBYTE,W
	MOVWF	TOFFH

	CALL	RCV_ONE_BYTE
	MOVF	RECEIVEBYTE,W
	MOVWF	IP

	CALL	RCV_ONE_BYTE
	MOVF	RECEIVEBYTE,W
	MOVWF	WAVEFORM

	CALL	RCV_ONE_BYTE
	MOVF	RECEIVEBYTE,W
	MOVWF	CHECKSUML

	CALL	RCV_ONE_BYTE
	MOVF	RECEIVEBYTE,W
	MOVWF	CHECKSUMH

	CLRF	SUML
	CLRF	SUMH

	MOVF	TON,W
	ADDWF	SUML,F
	BTFSC	STATUS,C
	INCF	SUMH,F

	MOVF	TOFFL,W
	ADDWF	SUML,F
	BTFSC	STATUS,C
	INCF	SUMH,F

	MOVF	TOFFH,W
	ADDWF	SUML,F
	BTFSC	STATUS,C
	INCF	SUMH,F

	MOVF	IP,W
	ADDWF	SUML,F
	BTFSC	STATUS,C
	INCF	SUMH,F

	MOVF	WAVEFORM,W
	ADDWF	SUML,F
	BTFSC	STATUS,C
	INCF	SUMH,F

	MOVF	SUML,W
	SUBWF	CHECKSUML,W
	BTFSS	STATUS,Z
	GOTO	C_ERROR
	MOVF	SUMH,W
	SUBWF	CHECKSUMH,W
	BTFSS	STATUS,Z
	GOTO	C_ERROR
	BSF	FLAG,HASMODIFY
	RETURN
C_ERROR:
	BSF	PORTC,RETRY
	GOTO	RECEIVE_C
;===============接收一个字节,先低位后高位=============
RCV_ONE_BYTE:
	MOVLW	0X8	
	MOVWF	REGL
	CLRF	RECEIVEBYTE
RCV_ONE_START:
	CALL	WAIT_SCLK_IS_HIGH
	CALL	CHECK_BIT_STATUS
	BSF	PORTC,SACK
	CALL	WAIT_SCLK_IS_LOW
	BCF	PORTC,SACK
	BCF	STATUS,C
	BTFSC	FLAG,DATA_BIT_STATUS
	BSF	STATUS,C

	RRF	RECEIVEBYTE,F

	DECFSZ	REGL,F
	GOTO	RCV_ONE_START
	RETURN

;如果接收到数据串"1359"则通信完成B'0001001101011001',按从低位至高位顺序
;联机通信初始化
HANDSHAKE:
	;1
	CALL	WAIT_SCLK_IS_HIGH
	CALL	CHECK_BIT_STATUS
	BSF	PORTC,SACK
	CALL	WAIT_SCLK_IS_LOW

	BCF	PORTC,SACK
	BTFSS	FLAG,DATA_BIT_STATUS
	GOTO	HANDSHAKE
HANDSHAKE_RETRY:	
	;0
	CALL	WAIT_SCLK_IS_HIGH
	CALL	CHECK_BIT_STATUS
	BSF	PORTC,SACK
	CALL	WAIT_SCLK_IS_LOW
	BCF	PORTC,SACK
	BTFSC	FLAG,DATA_BIT_STATUS
	GOTO	HANDSHAKE_RETRY

	;0
	CALL	WAIT_SCLK_IS_HIGH
	CALL	CHECK_BIT_STATUS
	BSF	PORTC,SACK
	CALL	WAIT_SCLK_IS_LOW
	BCF	PORTC,SACK
	BTFSC	FLAG,DATA_BIT_STATUS
	GOTO	HANDSHAKE_RETRY

	;1
	CALL	WAIT_SCLK_IS_HIGH
	CALL	CHECK_BIT_STATUS
	BSF	PORTC,SACK
	CALL	WAIT_SCLK_IS_LOW
	BCF	PORTC,SACK
	BTFSS	FLAG,DATA_BIT_STATUS
	GOTO	HANDSHAKE

	;1
	CALL	WAIT_SCLK_IS_HIGH
	CALL	CHECK_BIT_STATUS
	BSF	PORTC,SACK
	CALL	WAIT_SCLK_IS_LOW
	BCF	PORTC,SACK
	BTFSS	FLAG,DATA_BIT_STATUS
	GOTO	HANDSHAKE

	;0
	CALL	WAIT_SCLK_IS_HIGH
	CALL	CHECK_BIT_STATUS
	BSF	PORTC,SACK
	CALL	WAIT_SCLK_IS_LOW
	BCF	PORTC,SACK
	BTFSC	FLAG,DATA_BIT_STATUS
	GOTO	HANDSHAKE_RETRY

	;1
	CALL	WAIT_SCLK_IS_HIGH
	CALL	CHECK_BIT_STATUS
	BSF	PORTC,SACK
	CALL	WAIT_SCLK_IS_LOW
	BCF	PORTC,SACK
	BTFSS	FLAG,DATA_BIT_STATUS
	GOTO	HANDSHAKE

	;0
	CALL	WAIT_SCLK_IS_HIGH
	CALL	CHECK_BIT_STATUS
	BSF	PORTC,SACK
	CALL	WAIT_SCLK_IS_LOW
	BCF	PORTC,SACK
	BTFSC	FLAG,DATA_BIT_STATUS
	GOTO	HANDSHAKE_RETRY

	;1
	CALL	WAIT_SCLK_IS_HIGH
	CALL	CHECK_BIT_STATUS
	BSF	PORTC,SACK
	CALL	WAIT_SCLK_IS_LOW
	BCF	PORTC,SACK
	BTFSS	FLAG,DATA_BIT_STATUS
	GOTO	HANDSHAKE

	;1
	CALL	WAIT_SCLK_IS_HIGH
	CALL	CHECK_BIT_STATUS
	BSF	PORTC,SACK
	CALL	WAIT_SCLK_IS_LOW
	BCF	PORTC,SACK
	BTFSS	FLAG,DATA_BIT_STATUS
	GOTO	HANDSHAKE

	;0
	CALL	WAIT_SCLK_IS_HIGH
	CALL	CHECK_BIT_STATUS
	BSF	PORTC,SACK
	CALL	WAIT_SCLK_IS_LOW
	BCF	PORTC,SACK
	BTFSC	FLAG,DATA_BIT_STATUS
	GOTO	HANDSHAKE_RETRY

	;0
	CALL	WAIT_SCLK_IS_HIGH
	CALL	CHECK_BIT_STATUS
	BSF	PORTC,SACK
	CALL	WAIT_SCLK_IS_LOW
	BCF	PORTC,SACK
	BTFSC	FLAG,DATA_BIT_STATUS
	GOTO	HANDSHAKE_RETRY

	;1
	CALL	WAIT_SCLK_IS_HIGH
	CALL	CHECK_BIT_STATUS
	BSF	PORTC,SACK
	CALL	WAIT_SCLK_IS_LOW
	BCF	PORTC,SACK
	BTFSS	FLAG,DATA_BIT_STATUS
	GOTO	HANDSHAKE

	;0
	CALL	WAIT_SCLK_IS_HIGH
	CALL	CHECK_BIT_STATUS
	BSF	PORTC,SACK
	CALL	WAIT_SCLK_IS_LOW
	BCF	PORTC,SACK
	BTFSC	FLAG,DATA_BIT_STATUS
	GOTO	HANDSHAKE_RETRY

	;0
	CALL	WAIT_SCLK_IS_HIGH
	CALL	CHECK_BIT_STATUS
	BSF	PORTC,SACK
	CALL	WAIT_SCLK_IS_LOW
	BCF	PORTC,SACK
	BTFSC	FLAG,DATA_BIT_STATUS
	GOTO	HANDSHAKE_RETRY

	;0
	CALL	WAIT_SCLK_IS_HIGH
	CALL	CHECK_BIT_STATUS
	BSF	PORTC,SACK
	CALL	WAIT_SCLK_IS_LOW
	BCF	PORTC,SACK
	BTFSC	FLAG,DATA_BIT_STATUS
	GOTO	HANDSHAKE_RETRY

	RETURN
;检查数据位的状态
CHECK_BIT_STATUS:
	BTFSS	PORTC,SDATA
	GOTO	STATUS_LOW
STATUS_HIGH:
	MOVLW	0X32
	MOVWF	TEMP
STATUS_HIGH_LOOP:
	BTFSS	PORTC,SDATA
	GOTO	CHECK_BIT_STATUS
	DECFSZ	TEMP,F
	GOTO	STATUS_HIGH_LOOP
	BSF	FLAG,DATA_BIT_STATUS
	RETURN
STATUS_LOW:
	MOVLW	0X32
	MOVWF	TEMP
STATUS_LOW_LOOP:
	BTFSC	PORTC,SDATA
	GOTO	CHECK_BIT_STATUS
	DECFSZ	TEMP,F
	GOTO	STATUS_LOW_LOOP
	BCF	FLAG,DATA_BIT_STATUS
	RETURN
;检查时钟信号的状态
WAIT_SCLK_IS_HIGH:
	MOVLW	0X32
	MOVWF	TEMP
WAIT_SCLK_LOOP1:
	BTFSS	PORTC,SCLK
	GOTO	WAIT_SCLK_LOOP1
	DECFSZ	TEMP,F
	GOTO	WAIT_SCLK_LOOP1
	RETURN
;检查时钟信号的状态
WAIT_SCLK_IS_LOW:
	MOVLW	0X32
	MOVWF	TEMP
WAIT_SCLK_LOOP2:
	BTFSC	PORTC,SCLK
	GOTO	WAIT_SCLK_LOOP2
	DECFSZ	TEMP,F
	GOTO	WAIT_SCLK_LOOP2
	RETURN
	END

⌨️ 快捷键说明

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