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

📄 i2c.asm

📁 it consist of PCF8583 assembly driver
💻 ASM
字号:
;------------------------ Subroutines for I2C ------------------------------

.equ	SDA=1			;SDA conn to pin #1
.equ	SCL=0			;SCL conn to pin #0
.equ	PI2C=DDRD		;I2C Bus thrue Port D

;------------------------- Start for I2C -----------------------------------

I2CSTART:	CBI	PI2C,SDA	;1=>SDA
		CBI	PI2C,SCL	;1=>SCL
		rcall	DL3		;Wait 3.5 mkS
		SBI	PI2C,SDA	;0=>SDA
		rcall	DL3		;Wait 3.5 mkS
		SBI	PI2C,SCL	;0=>SCL
		rcall	DL3		;Wait 3.5 mkS
		RET


;-------------- I2C Out byte (data in R16, if ACK>0 all OK)---------------------------

I2COUT:		push	r17
		ldi	r17,9		;9=>counter
I2Cou1:		sbi 	PI2C,SCL	;0=>SCL
		sbi 	PI2C,SDA	;0=>SDA
		sbrc	r16,7		;if bit 7=0 then GO OVER
		cbi 	PI2C,SDA	;Elsie 1=>SDA
		rcall	DL3		;Wait 3.5mkS
		lsl	r16		;Shift left r16
		inc	r16		;1=>bit0/r16
		cbi 	PI2C,SCL	;1=>SCL
		rcall	DL3		;Wait 3.5mkS
	
	;---------- Define ACK ------------------------
		CLR	ACK		;0=>fl ACK
		SBIS	PIND,SDA	;if ack present
		SER	ACK		;1=>fl ACK
	;----------------------------------------------	

		sbi 	PI2C,SCL	;0=>SCL
		rcall	DL3		;Wait 3.5mkS
		dec	r17		;Counter=counter-1
		brne	I2Cou1		;Go to continue
		pop	r17
		RET


;------------------------ I2C IN byte (data => R16)-------------------------

I2CIN:		push	r17

		clr	r16		;Clear I2C Data IN
		ldi	r17,8		;8=>counter
I2Cin1:		sbi 	PI2C,SCL	;0=>SCL
		cbi 	PI2C,SDA	;1=>SDA
		rcall	DL3		;Wait 3.5mkS
		cbi 	PI2C,SCL	;1=>SCL
		rcall	DL3		;Wait 3.5mkS
		LSL	R16		;LSB=>LSB+1 ...
		SBIC	PIND,SDA	;SDA=>LSB R16
		inc	r16		;1=>r16
		sbi 	PI2C,SCL	;0=>SCL
		rcall	DL3		;Wait 3.5mkS
		dec	r17		;Counter=counter-1
		brne	I2Cin1		;Go to continue

	;------------  ACK ---------------------

		dec	ACK			;DEC ACK (Counter)
		brne	I2Cin3
		inc	ACK

		cbi 	PI2C,SCL	;1=>SCL
		rcall	DL3		;Wait 3.5mkS
		sbi 	PI2C,SCL	;0=>SCL
		rcall	DL3	
		rjmp	I2Cin2

I2Cin3:
		inc	ACK
		sbi 	PI2C,SDA	;0=>SDA
		rcall	DL3		;Wait 3.5mkS
		cbi 	PI2C,SCL	;1=>SCL
		rcall	DL3		;Wait 3.5mkS
		sbi 	PI2C,SCL	;0=>SCL
		rcall	DL3		;Wait 3.5mkS

I2Cin2:		pop	r17
		RET






;------------------------- Stop for I2C -----------------------------------

I2CSTOP:	SBI	PI2C,SDA	;0=>SDA
		CBI	PI2C,SCL	;1=>SCL
		rcall	DL3		;Wait 3.5 mkS
		CBI	PI2C,SDA	;1=>SDA
		rcall	DL3		;Wait 3.5 mkS
		RET


;------------------------ Time Delay 3.5 mkS -------------------------------

DL3:		push	r16		
		ldi	r16,5		; Load time constant (7)
DL31:		dec	r16		;R16=R16-1
		brne	dl31
		pop	R16
		RET
;---------------------------------------------------------------------------

⌨️ 快捷键说明

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