avr-i2c.txt

来自「关于AVR的一个I/O仿真I2C的源程序」· 文本 代码 · 共 101 行

TXT
101
字号
//I2C通讯子程序
//初始化
I2C_init:
 			ldi		Temp,$ff
			out		ddrb,Temp
			out		portb,Temp
			ret

//发送数据
I2C_communication:
			rcall 	I2C_start
			ldi		Temp1,$60
			rcall 	I2C_send	
			mov		Temp1,Senddata
			rcall	I2C_send
			rcall	I2C_stop
			ret	

//发送起始位
I2C_start:

 			sbi		SDA,1
			nop
			;nop
			sbi		SCL,0
			ldi		I2CTime,TimeCoin
			rcall	delay_us
			cbi		SDA,1
			ldi		I2CTime,TimeCoin
			rcall	delay_us
 			cbi		SCL,0
			ldi		I2CTime,TimeCoin
			rcall	delay_us
			ret


//I2C发送结束信号
I2C_stop:
			ldi		I2CTime,TimeCoin2
			rcall	delay_us
			cbi		SDA,1
			nop
			;nop
			sbi		SCL,0
			ldi		I2CTime,TimeCoin
			rcall	delay_us
			sbi		SDA,1
			ldi		I2CTime,TimeCoin
			rcall	delay_us
			ret

//发送一个数据 rol		Temp
I2C_send:
			ldi		Time1,$08		
I2C_send_loop:
			mov		Temp,Temp1
			andi	Temp,0x80
			brne	Send_one
			cbi		SDA,1
			nop
			;nop
			sbi		SCL,0
			ldi		I2CTime,TimeCoin
			rcall	delay_us
			cbi		SCL,0
			ldi		I2CTime,TimeCoin2
			rcall	delay_us
			rjmp	Check_loop			
Send_one:
			sbi		SDA,1
			nop
			;nop
			sbi		SCL,0
			ldi		I2CTime,TimeCoin
			rcall	delay_us
			cbi		SCL,0
			ldi		I2CTime,TimeCoin2
			rcall	delay_us
Check_loop:
			rol		Temp1
			dec		Time1
			brne	I2C_send_loop
			ldi		I2CTime,TimeCoin3
			rcall	delay_us
;Check_ACK:
			sbi		SDA,1
			nop
			;nop
			sbi		SCL,0
			ldi		I2CTime,TimeCoin
			rcall	delay_us
			cbi		SCL,0
			ldi		I2CTime,TimeCoin2
			rcall	delay_us					                                 			
			ret


delay_us:
			dec		I2CTime	
			brne	delay_us		
			ret

⌨️ 快捷键说明

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