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

📄 eeprom24c02.asm

📁 用24L01的2.4Ghz无线控制风扇的源程序
💻 ASM
字号:
;*******************************************************
;below is programmed by Wang WenCheng,modified by Figo
;==========================================
;------------I2C 24C02--------
;*****************************************************************
;Function:Save_AccessCode
;Description:Write Access Code to EEPROM via I2C bus.
;input:local_access_code0,local_access_code1
;output:none
;*****************************************************************
Save_AccessCode:
SaveData:
	bclr	I2Csave
	clr	ErrorCount
SaveData_loop:
	bts0	I2CjoinErrorFlag
	ret
	clrwdt
	call	I2Cstart	;Start
	call	I2Cout1		;Device address
	call	I2Cout0
	call	I2Cout1
	call	I2Cout0
	call	I2Cout0
	call	I2Cout0
	call	I2Cout0
	call	I2Cout0		;R/W

	call	I2CwaitAck	;wait ACK
	bts1	I2CackFlag
	jmp	SaveDataError

	call	I2Cout0		;Word address
	call	I2Cout0
	call	I2Cout0
	call	I2Cout0
	call	I2Cout0
	call	I2Cout0
	call	I2Cout0
	call	I2Cout0

	call	I2CwaitAck	;wait ACK
	bts1	I2CackFlag
	jmp	SaveDataError

	mov	A, local_access_code0			;DigiHigh--by Figo
	mov	DataBuffer,A
	call	I2CwriteBit	;Write Data
	call	I2CwriteBit
	call	I2CwriteBit
	call	I2CwriteBit
	call	I2CwriteBit
	call	I2CwriteBit
	call	I2CwriteBit
	call	I2CwriteBit

	call	I2CwaitAck	;wait ACK
	bts1	I2CackFlag
	jmp	SaveDataError

	mov	A, local_access_code1			;DigiLow--by Figo
	mov	DataBuffer,A
	call	I2CwriteBit	;Write Data
	call	I2CwriteBit
	call	I2CwriteBit
	call	I2CwriteBit
	call	I2CwriteBit
	call	I2CwriteBit
	call	I2CwriteBit
	call	I2CwriteBit

	call	I2CwaitAck	;wait ACK
	bts1	I2CackFlag
	jmp	SaveDataError

	mov	A, local_access_code2			;WorkingState--by Figo
	mov	DataBuffer,A
	call	I2CwriteBit	;Write Data
	call	I2CwriteBit
	call	I2CwriteBit
	call	I2CwriteBit
	call	I2CwriteBit
	call	I2CwriteBit
	call	I2CwriteBit
	call	I2CwriteBit

	call	I2CwaitAck	;wait ACK
	bts1	I2CackFlag
	jmp	SaveDataError

	call	I2Cstop		;Stop
	clrwdt
	ret

SaveDataError:
	incms	ErrorCount
	nop
	mov	A,#10
	sub	A,ErrorCount
	bts1	FC
 	bset	I2CjoinErrorFlag
	jmp	SaveData_loop

;*****************************************************************
;Function:Load_AccessCode
;Description:Read Access Code from EEPROM via I2C bus.
;input:none
;output:local_access_code0,local_access_code1
;*****************************************************************
Load_AccessCode:
ReloadData:
	clr	ErrorCount
ReloadData_Loop:
	bts0	I2CjoinErrorFlag
	ret
	clrwdt
	call	I2Cstart	;Start
	call	I2Cout1		;Device address
	call	I2Cout0
	call	I2Cout1
	call	I2Cout0
	call	I2Cout0
	call	I2Cout0
	call	I2Cout0
	call	I2Cout0		;R/W

	call	I2CwaitAck	;wait ACK
	bts1	I2CackFlag
	jmp	ReloadDataError
	clr	ErrorCount

	call	I2Cout0		;Word address
	call	I2Cout0
	call	I2Cout0
	call	I2Cout0
	call	I2Cout0
	call	I2Cout0
	call	I2Cout0
	call	I2Cout0

	call	I2CwaitAck	;wait ACK
	bts1	I2CackFlag
	jmp	ReloadDataError
	clr	ErrorCount

	call	I2Cstart
	call	I2Cout1		;Device address
	call	I2Cout0
	call	I2Cout1
	call	I2Cout0
	call	I2Cout0
	call	I2Cout0
	call	I2Cout0
	call	I2Cout1		;R/W

	call	I2CwaitAck	;wait ACK
	bts1	I2CackFlag
	jmp	ReloadDataError
	clr	ErrorCount

	call	I2CreadBit	;Read Data
	call	I2CreadBit
	call	I2CreadBit
	call	I2CreadBit
	call	I2CreadBit
	call	I2CreadBit
	call	I2CreadBit
	call	I2CreadBit

	mov	A,DataBuffer
	mov	local_access_code0,A			;DigiHigh--by Figo
	call	I2Cout0		;out ACK

	call	I2CreadBit	;Read Data
	call	I2CreadBit
	call	I2CreadBit
	call	I2CreadBit
	call	I2CreadBit
	call	I2CreadBit
	call	I2CreadBit
	call	I2CreadBit

	mov	A,DataBuffer
	mov	local_access_code1,A			;DigiLow--by Figo
	call	I2Cout0		;out ACK

	call	I2CreadBit	;Read Data
	call	I2CreadBit
	call	I2CreadBit
	call	I2CreadBit
	call	I2CreadBit
	call	I2CreadBit
	call	I2CreadBit
	call	I2CreadBit
	mov	A,DataBuffer
	mov	local_access_code2,A				;WorkingState--by Figo
	call	I2Cout1		;out NACK

	call	I2Cstop		;Stop
	clrwdt
	ret

ReloadDataError:
	incms	ErrorCount
	nop
	mov	A,#10
	sub	A,ErrorCount
	bts1	FC
 	bset	I2CjoinErrorFlag
	jmp	ReloadData_Loop
;==========================================================	
I2Cstart:
	bset	SDA_IoSet	;set IO_SDA is Output port
	bset	SDA
	bset	SCL_IoSet	;set IO_SCL is Output port
	bset	SCL
	call	Delay5us
	call	Delay5us
	bclr	SDA
	call	Delay5us
	call	Delay5us
	bclr	SCL
	call	Delay5us
	ret

I2Cstop:
	bset	SDA_IoSet	;set IO_SDA is Output port
	bclr	SCL
	bclr	SDA
	call	Delay5us
	bset	SCL
	call	Delay5us
	call	Delay5us
	bset	SDA
	call	Delay5us
	call	Delay5us
	ret

I2CoutNAck:
I2Cout1:
	bset	SDA_IoSet	;set IO_SDA is Output port
	bset	SDA
	call	Delay5us
	bset	SCL
	call	Delay5us
	call	Delay5us
	bclr	SCL
	call	Delay5us
	bclr	SDA
	call	Delay5us
	ret

I2CoutAck:
I2Cout0:
	bset	SDA_IoSet	;set IO_SDA is Output port
	bclr	SDA
	call	Delay5us
	bset	SCL
	call	Delay5us
	call	Delay5us
	bclr	SCL
	call	Delay5us
	bclr	SDA
	call	Delay5us
	ret

I2CwaitAck:
	bclr	SDA_IoSet	;set IO_SDA is Input port
	call	Delay5us
	bset	SCL
	call	Delay5us
	call	Delay5us
	bclr	I2CackFlag
	bts1	SDA
	bset	I2CackFlag
	bset	SDA_IoSet	;set IO_SDA is Output port
	bclr	SCL
	call	Delay5us
	ret


;======================
I2CwriteBit:
	bset	SDA_IoSet	;set IO_SDA is Output port
	rlcm	DataBuffer
	bts0	FC
	bset	SDA
	bts1	FC
	bclr	SDA
	nop
	nop
;	call	Delay5us
	bset	SCL
	call	Delay5us
	call	Delay5us
	bclr	SCL
	call	Delay5us
	ret
;-----------------------------------------------	

I2CreadBit:
	bclr	SDA_IoSet	;set IO_SDA is Input port
	call	Delay5us
	bset	SCL
	call	Delay5us
	call	Delay5us
	bclr	FC
	bts0	SDA
	bset	FC
	bclr	SCL
	rlcm	DataBuffer
	call	Delay5us
	ret

 I2Cunjoined:
 	bset	I2CjoinErrorFlag
	call	I2Cstop		;Stop

 	ret

 ;---------------------------
 Delay5us:
;	nop
	nop
	ret
;=========================================================

Save_TestCode:
SaveTestData:
	bclr	I2Csave
	clr	ErrorCount
SaveTestData_loop:
	bts0	I2CjoinErrorFlag
	ret
	clrwdt
	call	I2Cstart	;Start
	call	I2Cout1		;Device address
	call	I2Cout0
	call	I2Cout1
	call	I2Cout0
	call	I2Cout0
	call	I2Cout0
	call	I2Cout0
	call	I2Cout0		;R/W

	call	I2CwaitAck	;wait ACK
	bts1	I2CackFlag
	jmp	SaveTestDataError

	call	I2Cout0		;Word address
	call	I2Cout0
	call	I2Cout0
	call	I2Cout1
	call	I2Cout0
	call	I2Cout0
	call	I2Cout0
	call	I2Cout0

	call	I2CwaitAck	;wait ACK
	bts1	I2CackFlag
	jmp	SaveTestDataError

	mov	A, test_data0
	mov	DataBuffer,A
	call	I2CwriteBit	;Write Data
	call	I2CwriteBit
	call	I2CwriteBit
	call	I2CwriteBit
	call	I2CwriteBit
	call	I2CwriteBit
	call	I2CwriteBit
	call	I2CwriteBit

	call	I2CwaitAck	;wait ACK
	bts1	I2CackFlag
	jmp	SaveTestDataError

	mov	A, test_data1
	mov	DataBuffer,A
	call	I2CwriteBit	;Write Data
	call	I2CwriteBit
	call	I2CwriteBit
	call	I2CwriteBit
	call	I2CwriteBit
	call	I2CwriteBit
	call	I2CwriteBit
	call	I2CwriteBit

	call	I2CwaitAck	;wait ACK
	bts1	I2CackFlag
	jmp	SaveTestDataError

	call	I2Cstop		;Stop
	clrwdt
	ret

SaveTestDataError:
	incms	ErrorCount
	nop
	mov	A,#10
	sub	A,ErrorCount
	bts1	FC
 	bset	I2CjoinErrorFlag
	jmp	SaveTestData_loop

;*****************************************************************
;Function:Load_AccessCode
;Description:Read Access Code from EEPROM via I2C bus.
;input:none
;output:local_access_code0,local_access_code1
;*****************************************************************
Load_TestCode:
ReloadTestData:
	clr	ErrorCount
ReloadTestData_Loop:
	bts0	I2CjoinErrorFlag
	ret
	clrwdt
	call	I2Cstart	;Start
	call	I2Cout1		;Device address
	call	I2Cout0
	call	I2Cout1
	call	I2Cout0
	call	I2Cout0
	call	I2Cout0
	call	I2Cout0
	call	I2Cout0		;R/W

	call	I2CwaitAck	;wait ACK
	bts1	I2CackFlag
	jmp	ReloadTestDataError
	clr	ErrorCount

	call	I2Cout0		;Word address
	call	I2Cout0
	call	I2Cout0
	call	I2Cout1
	call	I2Cout0
	call	I2Cout0
	call	I2Cout0
	call	I2Cout0

	call	I2CwaitAck	;wait ACK
	bts1	I2CackFlag
	jmp	ReloadTestDataError
	clr	ErrorCount

	call	I2Cstart
	call	I2Cout1		;Device address
	call	I2Cout0
	call	I2Cout1
	call	I2Cout0
	call	I2Cout0
	call	I2Cout0
	call	I2Cout0
	call	I2Cout1		;R/W

	call	I2CwaitAck	;wait ACK
	bts1	I2CackFlag
	jmp	ReloadTestDataError
	clr	ErrorCount

	call	I2CreadBit	;Read Data
	call	I2CreadBit
	call	I2CreadBit
	call	I2CreadBit
	call	I2CreadBit
	call	I2CreadBit
	call	I2CreadBit
	call	I2CreadBit

	mov	A,DataBuffer
	mov	test_data0,A			
	call	I2Cout0		;out ACK

	call	I2CreadBit	;Read Data
	call	I2CreadBit
	call	I2CreadBit
	call	I2CreadBit
	call	I2CreadBit
	call	I2CreadBit
	call	I2CreadBit
	call	I2CreadBit
	mov	A,DataBuffer
	mov	test_data1,A				
	call	I2Cout1		;out NACK

	call	I2Cstop		;Stop
	clrwdt
	ret

ReloadTestDataError:
	incms	ErrorCount
	nop
	mov	A,#10
	sub	A,ErrorCount
	bts1	FC
 	bset	I2CjoinErrorFlag
	jmp	ReloadTestData_Loop

⌨️ 快捷键说明

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