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

📄 spiproc.h

📁 EM78P153源代码,含24C02,I2C,以及1418FM发射模块控制部分!
💻 H
字号:
;===============================================
;	Function:SpiSendHalf(A = SpiData) SendHalfByte()
;===============================================
SpiSendHalf:
		MOV		A_buff,A
		MOV		A,@4
		MOV		N1,A

SpiSendHLoop:
		BC		SpiPort,WR
		CALL	SpiDelay

		JBS		A_buff,3
		JMP		SpiSendHDat0

SpiSendHDat1:
		BS		SpiPort,DAT
		JMP		SpiSendHClk

SpiSendHDat0:
		BC		SpiPort,DAT

SpiSendHClk:
		CALL	SpiDelay

		BS		SpiPort,WR
		CALL	SpiDelay
		CALL	SpiDelay

SpiSendHNext:
		RLC		A_buff
		DJZ		N1
		JMP		SpiSendHLoop

		;		最后要低下来表示数据传完!
		BC		SpiPort,WR
		CALL	SpiDelay

		RET

;===============================================
;	Function:SpiSendByte(A = SpiData) L->H Send
;===============================================
SpiSendByte:
		MOV		A_buff,A
		MOV		A,@8
		MOV		N1,A

SpiSendLoop:
		BC		SpiPort,WR
		CALL	SpiDelay

		JBS		A_buff,7
		JMP		SpiSendDat0

SpiSendDat1:
		BS		SpiPort,DAT
		JMP		SpiSendClk

SpiSendDat0:
		BC		SpiPort,DAT

SpiSendClk:
		CALL	SpiDelay

		BS		SpiPort,WR
		CALL	SpiDelay
		CALL	SpiDelay

SpiSendNext:
		RLC		A_buff
		DJZ		N1
		JMP		SpiSendLoop

		BC		SpiPort,WR
		CALL	SpiDelay

		RET

;===============================================
;	Function:SpiReadByte()= A
;===============================================	
SpiReadByte:
		IOR		SpiPort
		OR		A,@OSPI_DAT
		IOW		SpiPort

		;	循环 8 次
		MOV		A,@8
		MOV		N1,A
		
		;	缓冲清除
		CLR		A_buff

SpiReadLoop:
		;	RD 由高到低
		BS		SpiPort,RD
		CALL	SpiDelay
		CALL	SpiDelay
		BC		SpiPort,RD
		CALL	SpiDelay

		;	清进位标志
		BC		STATU,C

		;	左移数据
		RLC		A_buff

		;	数据是否高
		JBS		SpiPort,DAT
		JMP		SpiReadNext

		;	低位置1
		BS		A_buff,0

SpiReadNext:
		DJZ		N1
		JMP		SpiReadLoop

		;	数据置为输出
		IOR		SpiPort
		AND		A,@ASPI_DAT
		IOW		SpiPort

		MOV		A,A_buff
		RET

;===============================================
;	Function:SpiVSendByte(A = SpiData) 先发低位
;===============================================
SpiVSendByte:
		MOV		A_buff,A
		MOV		A,@8
		MOV		N1,A

SpiVSendLoop:
		BC		SpiPort,WR
		CALL	SpiDelay

		JBS		A_buff,0
		JMP		SpiVSendDat0

SpiVSendDat1:
		BS		SpiPort,DAT
		JMP		SpiVSendClk

SpiVSendDat0:
		BC		SpiPort,DAT

SpiVSendClk:
		CALL	SpiDelay

		BS		SpiPort,WR
		CALL	SpiDelay
		CALL	SpiDelay

SpiVSendNext:
		RRC		A_buff
		DJZ		N1
		JMP		SpiVSendLoop

		BC		SpiPort,WR
		CALL	SpiDelay

		RET

;===============================================
;	Function:SpiFmWrite(A = FmMode)
;===============================================
SpiFmWrite:
		BS		SpiPort,ENA
		CALL	SpiDelay

		;(436B + A)=(0875 + A)
		ADD		A,@MIN_FM_LO

		JBC		STATU,C
		JMP		FmLarge
FmSmall:
		CALL 	SpiVSendByte
		MOV		A,@MIN_FM_HI
		ADD		A,@0x40
		JMP		FmHiByte

FmLarge:
		CALL 	SpiVSendByte
		MOV		A,@MIN_FM_HI
		ADD		A,@0x41

FmHiByte:
		CALL 	SpiVSendByte

		BC		SpiPort,ENA
		CALL	SpiDelay

		RET
;===============================================
;		END OF SPI
;===============================================		

⌨️ 快捷键说明

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