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 + -
显示快捷键?