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

📄 vcg21.asm

📁 DS1307 with PIC16F84A application
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	BTFSS	STATUS,Z
	GOTO	EJUMP8		
				; CURSOR AT 10TH POSITION
	SWAPF	DAY,0		; GET 10'S DAYS
	ANDLW	0x0F
	ADDLW	1		; INCREMENT 10'S DAYS
	MOVWF	TEMP
	SUBLW	4
	BTFSC	STATUS,Z	; IS 10'S DAYS=3 ?
	CLRF	TEMP		; RESET 10'S DAYS
	SWAPF	TEMP,1
	MOVF	DAY,0
	ANDLW	0x0F
	ADDWF	TEMP,0
	MOVWF	DAY		; SET 10'S DAYS	
	GOTO	ENDEDIT
EJUMP8:			;******	ADJUST DAYS
	MOVLW	.11
	SUBWF	CURSOR,0	; CURSOR AT 11TH POSITION
	BTFSS	STATUS,Z
	GOTO	EJUMP9
	MOVF	DAY,0		; GET DAYS
	ANDLW	0x0F
	ADDLW	1		; INCREMENT DAYS
	MOVWF	TEMP
	SUBLW	0x0A
	BTFSC	STATUS,Z	; IS DAYS=10 ?
	CLRF	TEMP		; RESET DAYS
	MOVF	DAY,0
	ANDLW	0xF0
	ADDWF	TEMP,0
	MOVWF	DAY		; SET DAYS	
	GOTO	ENDEDIT
EJUMP9:			;******	ADJUST 10'S MONTHS
	MOVLW	.13
	SUBWF	CURSOR,0
	BTFSS	STATUS,Z
	GOTO	EJUMP10
				; CURSOR AT 13TH POSITION
	SWAPF	MONTH,0		; GET 10'S MONTHS
	ANDLW	0x0F
	ADDLW	1		; INCREMENT 10'S MONTHS
	MOVWF	TEMP
	SUBLW	2
	BTFSC	STATUS,Z	; IS 10'S MONTHS=2 ?
	CLRF	TEMP		; RESET 10'S MONTHS
	SWAPF	TEMP,1
	MOVF	MONTH,0
	ANDLW	0x0F
	ADDWF	TEMP,0
	MOVWF	MONTH		; SET 10'S MONTHS
	GOTO	ENDEDIT
EJUMP10:			;******	ADJUST MONTHS
	MOVLW	.14
	SUBWF	CURSOR,0	; 14TH CURSOR POSITION
	BTFSS	STATUS,Z
	GOTO	EJUMP11
	MOVF	MONTH,0		; GET MONTHS
	ANDLW	0x0F
	ADDLW	1		; INCREMENT MONTHS
	MOVWF	TEMP
	SUBLW	0x0A
	BTFSC	STATUS,Z	; IS MONTHS=10 ?
	CLRF	TEMP		; RESET MONTHS
	MOVF	MONTH,0
	ANDLW	0xF0
	ADDWF	TEMP,0
	MOVWF	MONTH		; SET MONTHS
	GOTO	ENDEDIT
EJUMP11:			;******	ADJUST 10'S YEARS
	MOVLW	.16
	SUBWF	CURSOR,0
	BTFSS	STATUS,Z
	GOTO	EJUMP12
				; CURSOR AT 16TH POSITION
	SWAPF	YEAR,0		; GET 10'S YEARS
	ANDLW	0x0F
	ADDLW	1		; INCREMENT 10'S YEARS
	MOVWF	TEMP
	SUBLW	.10
	BTFSC	STATUS,Z	; IS 10'S YEARS=10 ?
	CLRF	TEMP		; RESET 10'S YEARS
	SWAPF	TEMP,1
	MOVF	YEAR,0
	ANDLW	0x0F
	ADDWF	TEMP,0
	MOVWF	YEAR		; SET 10'S YEARS
	GOTO	ENDEDIT
EJUMP12:		;******	ADJUST YEARS
	MOVLW	.17
	SUBWF	CURSOR,0	; 17TH CURSOR POSITION
	BTFSS	STATUS,Z
	GOTO	EJUMP13
	MOVF	YEAR,0		; GET YEARS
	ANDLW	0x0F
	ADDLW	1		; INCREMENT YEARS
	MOVWF	TEMP
	SUBLW	0x0A
	BTFSC	STATUS,Z	; IS YEARS=10 ?
	CLRF	TEMP		; RESET YEARS
	MOVF	YEAR,0
	ANDLW	0xF0
	ADDWF	TEMP,0
	MOVWF	YEAR		; SET YEARS
EJUMP13:		;******	ADJUST USER CHAR1
	MOVLW	.19
	SUBWF	CURSOR,0
	BTFSS	STATUS,Z
	GOTO	EJUMP14		; DON'T DO IF NOT AT CURSOR POS
	INCF	CHAR1,1		; INCREMENT CHARCATER
	MOVLW	0x26		; MAX CHARACTER NUMBER
	SUBWF	CHAR1,0
	BTFSC	STATUS,Z
	CLRF	CHAR1		;SET CHAR BACK TO 
	GOTO	ENDEDIT
EJUMP14:		;******	ADJUST USER CHAR2
	MOVLW	.20
	SUBWF	CURSOR,0
	BTFSS	STATUS,Z
	GOTO	EJUMP15		; DON'T DO IF NOT AT CURSOR POS
	INCF	CHAR2,1		; INCREMENT CHARCATER
	MOVLW	0x26		; MAX CHARACTER NUMBER
	SUBWF	CHAR2,0
	BTFSC	STATUS,Z
	CLRF	CHAR2		;SET CHAR BACK TO 
	GOTO	ENDEDIT
EJUMP15:		;******	ADJUST USER CHAR3
	MOVLW	.21
	SUBWF	CURSOR,0
	BTFSS	STATUS,Z
	GOTO	EJUMP16		; DON'T DO IF NOT AT CURSOR POS
	INCF	CHAR3,1		; INCREMENT CHARCATER
	MOVLW	0x26		; MAX CHARACTER NUMBER
	SUBWF	CHAR3,0
	BTFSC	STATUS,Z
	CLRF	CHAR3		;SET CHAR BACK TO 
	GOTO	ENDEDIT
EJUMP16:		;******	ADJUST USER CHAR4
	MOVLW	.22
	SUBWF	CURSOR,0
	BTFSS	STATUS,Z
	GOTO	EJUMP17		; DON'T DO IF NOT AT CURSOR POS
	INCF	CHAR4,1		; INCREMENT CHARCATER
	MOVLW	0x26		; MAX CHARACTER NUMBER
	SUBWF	CHAR4,0
	BTFSC	STATUS,Z
	CLRF	CHAR4		;SET CHAR BACK TO 
	GOTO	ENDEDIT
EJUMP17:		;******	ADJUST USER CHAR5
	MOVLW	.23
	SUBWF	CURSOR,0
	BTFSS	STATUS,Z
	GOTO	EJUMP18		; DON'T DO IF NOT AT CURSOR POS
	INCF	CHAR5,1		; INCREMENT CHARCATER
	MOVLW	0x26		; MAX CHARACTER NUMBER
	SUBWF	CHAR5,0
	BTFSC	STATUS,Z
	CLRF	CHAR5		;SET CHAR BACK TO 
	GOTO	ENDEDIT
EJUMP18:		;******	ADJUST USER CHAR6
	MOVLW	.24
	SUBWF	CURSOR,0
	BTFSS	STATUS,Z
	GOTO	EJUMP19		; DON'T DO IF NOT AT CURSOR POS
	INCF	CHAR6,1		; INCREMENT CHARCATER
	MOVLW	0x26		; MAX CHARACTER NUMBER
	SUBWF	CHAR6,0
	BTFSC	STATUS,Z
	CLRF	CHAR6		;SET CHAR BACK TO 
	GOTO	ENDEDIT
EJUMP19:		;******	ADJUST USER CHAR7
	MOVLW	.25
	SUBWF	CURSOR,0
	BTFSS	STATUS,Z
	GOTO	EJUMP20		; DON'T DO IF NOT AT CURSOR POS
	INCF	CHAR7,1		; INCREMENT CHARCATER
	MOVLW	0x26		; MAX CHARACTER NUMBER
	SUBWF	CHAR7,0
	BTFSC	STATUS,Z
	CLRF	CHAR7		;SET CHAR BACK TO 
	GOTO	ENDEDIT
EJUMP20:		;******	ADJUST USER CHAR8
	MOVLW	.26
	SUBWF	CURSOR,0
	BTFSS	STATUS,Z
	GOTO	EJUMP21		; DON'T DO IF NOT AT CURSOR POS
	INCF	CHAR8,1		; INCREMENT CHARCATER
	MOVLW	0x26		; MAX CHARACTER NUMBER
	SUBWF	CHAR8,0
	BTFSC	STATUS,Z
	CLRF	CHAR8		;SET CHAR BACK TO 
	GOTO	ENDEDIT
EJUMP21:		;******	ADJUST USER CHAR9
	MOVLW	.27
	SUBWF	CURSOR,0
	BTFSS	STATUS,Z
	GOTO	EJUMP22		; DON'T DO IF NOT AT CURSOR POS
	INCF	CHAR9,1		; INCREMENT CHARCATER
	MOVLW	0x26		; MAX CHARACTER NUMBER
	SUBWF	CHAR9,0
	BTFSC	STATUS,Z
	CLRF	CHAR9		;SET CHAR BACK TO 
	GOTO	ENDEDIT
EJUMP22:		;******	ADJUST USER CHAR10
	MOVLW	.28
	SUBWF	CURSOR,0
	BTFSS	STATUS,Z
	GOTO	EJUMP23		; DON'T DO IF NOT AT CURSOR POS
	INCF	CHAR10,1	; INCREMENT CHARCATER
	MOVLW	0x26		; MAX CHARACTER NUMBER
	SUBWF	CHAR10,0
	BTFSC	STATUS,Z
	CLRF	CHAR10		;SET CHAR BACK TO 
	GOTO	ENDEDIT
EJUMP23:
ENDEDIT:
	GOTO	DISPLAY

WRITEDATA:
	CALL	START
	MOVLW	C1307W		; WRITE TO 1307
	MOVWF	SENDBUF
	CALL	SENDBYTE
	MOVLW	0		; ADDRESS reg 0
	MOVWF	SENDBUF
	CALL	SENDBYTE

	MOVF	SEC,0
	MOVWF	SENDBUF
	CALL 	SENDBYTE	

	MOVF	MIN,0
	MOVWF	SENDBUF
	CALL 	SENDBYTE	

	MOVF	HOUR,0
	MOVWF	SENDBUF
	CALL 	SENDBYTE	

	CLRF	SENDBUF		; DUMMY DATA FOR DAY OF WEEK
	CALL 	SENDBYTE	
	
	MOVF	DAY,0
	MOVWF	SENDBUF
	CALL 	SENDBYTE	
	
	MOVF	MONTH,0
	MOVWF	SENDBUF
	CALL 	SENDBYTE	
	
	MOVF	YEAR,0
	MOVWF	SENDBUF
	CALL 	SENDBYTE	
	
	CLRF	SENDBUF		; DUMMY DTAA FOR CONTROL REG
	CALL 	SENDBYTE	
	
	MOVF	CHAR1,0		; START CHAR DATA AT RAM ADDRESS 8
	MOVWF	SENDBUF
	CALL 	SENDBYTE	
	
	MOVF	CHAR2,0
	MOVWF	SENDBUF
	CALL 	SENDBYTE	
	
	MOVF	CHAR3,0
	MOVWF	SENDBUF
	CALL 	SENDBYTE	
	
	MOVF	CHAR4,0
	MOVWF	SENDBUF
	CALL 	SENDBYTE	
	
	MOVF	CHAR5,0
	MOVWF	SENDBUF
	CALL 	SENDBYTE	
	
	MOVF	CHAR6,0
	MOVWF	SENDBUF
	CALL 	SENDBYTE	
	
	MOVF	CHAR7,0
	MOVWF	SENDBUF
	CALL 	SENDBYTE	

	MOVF	CHAR8,0
	MOVWF	SENDBUF
	CALL 	SENDBYTE	
	
	MOVF	CHAR9,0
	MOVWF	SENDBUF
	CALL 	SENDBYTE	
	
	MOVF	CHAR10,0
	MOVWF	SENDBUF
	CALL 	SENDBYTE	
	
	CALL	STOP
	
	GOTO	BEGIN		; RETURN TO NORMAL DISPLAY MODE	


;*******************************************************************
; I2C ROUTINES

;*****************************	SET SDA BIT HIGH (TRI-STATE)
SET_SDA:
	BSF	STATUS, RP0	; select bank 1
	BSF	TRISB,P_SDA	; SET P_SDA BIT IN TRISB=1
	BCF	STATUS, RP0	; SELECT BANK 0
	RETURN

;*****************************	SET SCL BIT HIGH (TRI-STATE)
SET_SCL:
	BSF	STATUS, RP0	; select bank 1
	BSF	TRISB,P_SCL	; SET P_SCL BIT IN TRISB=1
	BCF	STATUS, RP0	; SELECT BANK 0
	RETURN

;*****************************	SET SDA BIT LOW
CLR_SDA:
	BCF	PORTB,P_SDA
	BSF	STATUS, RP0	; select bank 1
	BCF	TRISB,P_SDA	; CLEAR P_SDA BIT IN TRISB=0
	BCF	STATUS, RP0	; SELECT BANK 0
	RETURN

;*****************************	SET SCL BIT LOW	
CLR_SCL:
	BCF	PORTB,P_SCL
	BSF	STATUS, RP0	; select bank 1
	BCF	TRISB,P_SCL	; CLEAR P_SCL BIT IN TRISB=0
	BCF	STATUS, RP0	; SELECT BANK 0
	RETURN

;******************************* I2C STABLE BUS CONDITION
STABLE:	
	CALL	SET_SDA
	CALL	SET_SCL
	RETURN

;******************************* I2C START CONDITION
START:
	CALL	SET_SCL
	CALL	SET_SDA
	CALL	CLR_SDA
	CALL	CLR_SCL
	RETURN

;******************************* I2C STOP CONDITION
STOP:
	CALL	CLR_SDA
	CALL	SET_SCL
	CALL	SET_SDA
	CALL	SET_SCL
	RETURN

;******************************* I2C SEND BYTE
;				PASS BYTE TO SEND IN SENDBUF REG
SENDBYTE:
	CLRWDT			;CLEAR WATCHDOG

	CALL	CLR_SCL

	BTFSC	SENDBUF,7	; SET OR CLEAR BIT7 :
	CALL	SET_SDA
	BTFSS	SENDBUF,7
	CALL	CLR_SDA
	CALL	SET_SCL		; TOGGLE SCL :
	CALL	CLR_SCL

	BTFSC	SENDBUF,6	; SET OR CLEAR BIT6 :
	CALL	SET_SDA
	BTFSS	SENDBUF,6
	CALL	CLR_SDA
	CALL	SET_SCL		; TOGGLE SCL :
	CALL	CLR_SCL

	BTFSC	SENDBUF,5	; SET OR CLEAR BIT5 :
	CALL	SET_SDA
	BTFSS	SENDBUF,5
	CALL	CLR_SDA
	CALL	SET_SCL		; TOGGLE SCL :
	CALL	CLR_SCL

	BTFSC	SENDBUF,4	; SET OR CLEAR BIT4 :
	CALL	SET_SDA
	BTFSS	SENDBUF,4
	CALL	CLR_SDA
	CALL	SET_SCL		; TOGGLE SCL :
	CALL	CLR_SCL

	BTFSC	SENDBUF,3	; SET OR CLEAR BIT3 :
	CALL	SET_SDA
	BTFSS	SENDBUF,3
	CALL	CLR_SDA
	CALL	SET_SCL		; TOGGLE SCL :
	CALL	CLR_SCL

	BTFSC	SENDBUF,2	; SET OR CLEAR BIT2 :
	CALL	SET_SDA
	BTFSS	SENDBUF,2
	CALL	CLR_SDA
	CALL	SET_SCL		; TOGGLE SCL :
	CALL	CLR_SCL

	BTFSC	SENDBUF,1	; SET OR CLEAR BIT1 :
	CALL	SET_SDA
	BTFSS	SENDBUF,1
	CALL	CLR_SDA
	CALL	SET_SCL		; TOGGLE SCL :
	CALL	CLR_SCL

	BTFSC	SENDBUF,0	; SET OR CLEAR BIT0 :
	CALL	SET_SDA
	BTFSS	SENDBUF,0
	CALL	CLR_SDA
	CALL	SET_SCL		; TOGGLE SCL :
	CALL	CLR_SCL

	CALL	SET_SDA		; ALLOW SLAVE TO RETURN ACK
	CALL	SET_SCL		; BUT JUST IGNORE IT.
	CALL	CLR_SCL

	RETURN		

;*****************************	READ SINGLE BYTE 
;				RETURN BYTE IN GETBUF VARIABLE
READBYTE:
	CLRWDT			;CLEAR WATCHDOG

	CALL	CLR_SCL
	CALL	SET_SDA

	CALL	SET_SCL
	BTFSC	PORTB,P_SDA
	BSF	GETBUF,7
	BTFSS	PORTB,P_SDA
	BCF	GETBUF,7
	CALL	CLR_SCL

	CALL	SET_SCL
	BTFSC	PORTB,P_SDA
	BSF	GETBUF,6
	BTFSS	PORTB,P_SDA
	BCF	GETBUF,6
	CALL	CLR_SCL

	CALL	SET_SCL
	BTFSC	PORTB,P_SDA
	BSF	GETBUF,5
	BTFSS	PORTB,P_SDA
	BCF	GETBUF,5
	CALL	CLR_SCL

	CALL	SET_SCL
	BTFSC	PORTB,P_SDA
	BSF	GETBUF,4
	BTFSS	PORTB,P_SDA
	BCF	GETBUF,4
	CALL	CLR_SCL

	CALL	SET_SCL
	BTFSC	PORTB,P_SDA
	BSF	GETBUF,3
	BTFSS	PORTB,P_SDA
	BCF	GETBUF,3
	CALL	CLR_SCL

	CALL	SET_SCL
	BTFSC	PORTB,P_SDA
	BSF	GETBUF,2
	BTFSS	PORTB,P_SDA
	BCF	GETBUF,2
	CALL	CLR_SCL

	CALL	SET_SCL
	BTFSC	PORTB,P_SDA
	BSF	GETBUF,1
	BTFSS	PORTB,P_SDA
	BCF	GETBUF,1
	CALL	CLR_SCL

	CALL	SET_SCL
	BTFSC	PORTB,P_SDA
	BSF	GETBUF,0
	BTFSS	PORTB,P_SDA
	BCF	GETBUF,0
	CALL	CLR_SCL

	RETURN

;******************************** SEND ACK
SEND_ACK:
	CALL	CLR_SCL
	CALL	CLR_SDA		; SEND ACK TO SLAVE
	CALL	SET_SCL		; WHICH ENDS READ PROCESS
	CALL	CLR_SCL

	RETURN

;******************************** SEND NEG ACK
SEND_NOTACK:
	CALL	CLR_SCL
	CALL	SET_SDA		; SEND NEG ACK TO SLAVE
	CALL	SET_SCL		; WHICH ENDS READ PROCESS
	CALL	CLR_SCL

	RETURN





;***************************************** STV5730 BUS ROUTINES
SET_DATA_HIGH:			; SET DATA LINE HIGH
	BSF	PORTB,P_DATA
	RETURN	

SET_DATA_LOW:			; SET DATA LINE LOW
	BCF	PORTB,P_DATA
	RETURN

SET_CSN_HIGH:			; SET CSN LINE HIGH
	BSF	PORTB,P_CSN
	RETURN

SET_CSN_LOW:			; SET CSN LINE LOW
	BCF	PORTB,P_CSN
	RETURN

SET_CLK_HIGH:			; SET CLK LINE HIGH
	BSF	PORTB,P_CLK
	RETURN

SET_CLK_LOW:			; SET CLK LINE LOW
	BCF	PORTB,P_CLK
	RETURN

SEND16BYTE:			; SEND A 16 BIT WORD TO 5730
	CLRWDT			; CLEAR WATCHDOG
	
	;********* DATA IS PASSED IN "BYTE1" & "BYTE2"
	CALL	SET_DATA_HIGH
	CALL	SET_CLK_HIGH
	CALL	SET_CSN_HIGH
	
	CALL	SET_CSN_LOW
	CALL	SET_CLK_LOW

	CALL	SET_DATA_LOW	; ASSUME DATA IS LOW
	BTFSC	BYTE1,7		; IF BIT7 IS HIGH THEN DO
	CALL	SET_DATA_HIGH
	CALL	SET_CLK_HIGH
	CALL	SET_CLK_LOW

	CALL	SET_DATA_LOW	; ASSUME DATA IS LOW
	BTFSC	BYTE1,6		; IF BIT6 IS HIGH THEN DO
	CALL	SET_DATA_HIGH
	CALL	SET_CLK_HIGH
	CALL	SET_CLK_LOW

	CALL	SET_DATA_LOW	; ASSUME DATA IS LOW
	BTFSC	BYTE1,5		; IF BIT5 IS HIGH THEN DO
	CALL	SET_DATA_HIGH
	CALL	SET_CLK_HIGH
	CALL	SET_CLK_LOW

	CALL	SET_DATA_LOW	; ASSUME DATA IS LOW
	BTFSC	BYTE1,4		; IF BIT4 IS HIGH THEN DO
	CALL	SET_DATA_HIGH
	CALL	SET_CLK_HIGH
	CALL	SET_CLK_LOW

	CALL	SET_DATA_LOW	; ASSUME DATA IS LOW
	BTFSC	BYTE1,3		; IF BIT3 IS HIGH THEN DO
	CALL	SET_DATA_HIGH
	CALL	SET_CLK_HIGH
	CALL	SET_CLK_LOW

	CALL	SET_DATA_LOW	; ASSUME DATA IS LOW
	BTFSC	BYTE1,2		; IF BIT2 IS HIGH THEN DO
	CALL	SET_DATA_HIGH
	CALL	SET_CLK_HIGH
	CALL	SET_CLK_LOW

	CALL	SET_DATA_LOW	; ASSUME DATA IS LOW
	BTFSC	BYTE1,1		; IF BIT1 IS HIGH THEN DO
	CALL	SET_DATA_HIGH
	CALL	SET_CLK_HIGH
	CALL	SET_CLK_LOW

	CALL	SET_DATA_LOW	; ASSUME DATA IS LOW
	BTFSC	BYTE1,0		; IF BIT0 IS HIGH THEN DO
	CALL	SET_DATA_HIGH
	CALL	SET_CLK_HIGH
	CALL	SET_CLK_LOW

	CALL	SET_DATA_LOW	; ASSUME DATA IS LOW
	BTFSC	BYTE2,7		; IF BIT7 IS HIGH THEN DO
	CALL	SET_DATA_HIGH
	CALL	SET_CLK_HIGH
	CALL	SET_CLK_LOW

	CALL	SET_DATA_LOW	; ASSUME DATA IS LOW
	BTFSC	BYTE2,6		; IF BIT6 IS HIGH THEN DO
	CALL	SET_DATA_HIGH
	CALL	SET_CLK_HIGH
	CALL	SET_CLK_LOW

	CALL	SET_DATA_LOW	; ASSUME DATA IS LOW
	BTFSC	BYTE2,5		; IF BIT5 IS HIGH THEN DO
	CALL	SET_DATA_HIGH
	CALL	SET_CLK_HIGH
	CALL	SET_CLK_LOW

	CALL	SET_DATA_LOW	; ASSUME DATA IS LOW
	BTFSC	BYTE2,4		; IF BIT4 IS HIGH THEN DO
	CALL	SET_DATA_HIGH
	CALL	SET_CLK_HIGH
	CALL	SET_CLK_LOW

	CALL	SET_DATA_LOW	; ASSUME DATA IS LOW
	BTFSC	BYTE2,3		; IF BIT3 IS HIGH THEN DO
	CALL	SET_DATA_HIGH
	CALL	SET_CLK_HIGH
	CALL	SET_CLK_LOW

	CALL	SET_DATA_LOW	; ASSUME DATA IS LOW
	BTFSC	BYTE2,2		; IF BIT2 IS HIGH THEN DO
	CALL	SET_DATA_HIGH
	CALL	SET_CLK_HIGH
	CALL	SET_CLK_LOW

	CALL	SET_DATA_LOW	; ASSUME DATA IS LOW
	BTFSC	BYTE2,1		; IF BIT1 IS HIGH THEN DO
	CALL	SET_DATA_HIGH
	CALL	SET_CLK_HIGH
	CALL	SET_CLK_LOW

	CALL	SET_DATA_LOW	; ASSUME DATA IS LOW
	BTFSC	BYTE2,0		; IF BIT0 IS HIGH THEN DO
	CALL	SET_DATA_HIGH
	CALL	SET_CLK_HIGH

	CALL	SET_CSN_HIGH	; END OF DATA

	RETURN

	END			; END OF PROGRAM

⌨️ 快捷键说明

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