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

📄 at24c.asm

📁 IIC 24读写的源码 有详尽的口线控制,用EMC 61000IC 和其开发环境,具体不明白可MAIL 本人讨论
💻 ASM
字号:
;===============---------------=============================-----------
;at24cxx device
;at24c01(1k)  24c02(2k bits)  24c04(4k bits) 24c08(8k bit) 24c16(16k bit)
;address    1010a3a2a1  b7xxxxxxx
;24c01   using xxxxxxx
;24c02   using b7xxxxxxx
;24c04   using a1 b7xxxxxxx
;24c08   using a2a1  b7xxxxxxx
;24c16   using a3a2a1 b7xxxxxxx
;================--------------======================------------========
Device24	EQU	PORTE
atslk		equ	3
atsda		equ	2
;;SCONF.2=1	SET PORTE.2 I/O
;;SCONF.3=1	SET PORTE.3 I/O
;;INPUT PORTE.2  PECONL.5-4 =00
;;OUTPUT                    =11
READCONST	EQU	11001111B
WRITECONST	EQU	00110000B
;if	reat data from at24cxx then using
;	movlw	READCONST
;	andwf	PECONL,F
;if	write data to at24cxx	them using
;	movlw	WRITECONST
;	iorwf	PECONL,F
;===========------------=============------------===================----
DelaySame:
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop	
	return
SetAt24c:
	bcf	SCONF,atslk		;set porte.2-3 is i/o
	bcf	SCONF,atsda
	movlw	11110000b
        iorwf	PECONL,F  		;set porte.2-3 is output
        bsf	PEPUEN,atslk
        bsf	PEPUEN,atsda		;set porte.2-3 pull-up enable
        bcf	PEPDEN,atslk    	
        bcf	PEPDEN,atsda		;set porte.2-3 pull-down disable
        call	DelaySame
        
        return
;===========------------=============------------===================---- 
Start24:
	bsf	Device24,atsda
	call	DelaySame		
	bsf	Device24,atslk 
	call	DelaySame	
	bcf	Device24,atsda
	call	DelaySame	
	bcf	Device24,atslk 
	return 
;===========------------=============------------===================---- 	
Stop24:
	bcf	Device24,atslk 
	call	DelaySame		
	bcf	Device24,atsda
	call	DelaySame		
	bsf	Device24,atslk  
	call	DelaySame		
	bsf	Device24,atsda   
	call	DelaySame		
	bcf	Device24,atslk 
	return
;===========------------=============------------===================----
;sendout data in WREG
;using TmepTemp
;===========------------=============------------===================---- 
SendOutByte:	
	clrf	TempTemp,F		
	bsf	TempTemp,3		;set temptemp<-8
SendOutLop:
	rlcf	WREG,W
	bcf	Device24,atsda 
	btfsc	ALUSTA,C	
	bsf	Device24,atsda
	call	DelaySame		
	bsf	Device24,atslk  
	call	DelaySame	
	bcf	Device24,atslk 
	decfsz	TempTemp,F
	goto	SendOutLop
	return
;===========------------=============------------===================----
;get data in WREG
;using TmepTemp
;===========------------=============------------===================----  
GetByte:
	clrf	TempTemp,F		
	bsf	TempTemp,3		;set temptemp<-8
	movlw	0
GetLop:	
	call	DelaySame	
	bsf	Device24,atslk
	call	DelaySame		
	bcf	ALUSTA,C
	btfsc	Device24,atsda
	bsf	ALUSTA,C
	rlcf	WREG,W	
	
	bcf	Device24,atslk 

	decfsz	TempTemp,F
	goto	GetLop
	return 
;===========------------=============------------===================----
GetAck24:    
	movlw	WRITECONST  
        iorwf	PECONL,F  	
	call	DelaySame
	bcf	Device24,atsda
	call	DelaySame	
	bsf	Device24,atslk
	call	DelaySame	
	bcf	Device24,atslk  
	movlw	READCONST     
	andwf	PECONL,F      
	return
;===========------------=============------------===================----	
NoGetAck24:	
	bsf	Device24,atsda
	call	DelaySame	
	bsf	Device24,atslk
	call	DelaySame	
	bcf	Device24,atslk  
	call	DelaySame		 
	return	
;===========------------=============------------===================----
SendAck24:
	movlw	READCONST     
	andwf	PECONL,F 
	call	DelaySame	
	bsf	Device24,atslk
	call	DelaySame
	bsf	Device24,atsda
	nop
	nop	
	clrf	TempTemp,F
	movlw	0
loplop1:
	nop
	nop
	btfss	Device24,atsda
	goto	AcceptAckOk
	decfsz	WREG,W
	goto	loplop1
	decfsz	TempTemp,F
	goto	loplop1	
	bsf	ALUSTA,C
	goto	AcceptNoAck
AcceptAckOk:
	bcf	ALUSTA,C
AcceptNoAck:	
	bcf	Device24,atslk
	call	DelaySame
		
	movlw	WRITECONST  
        iorwf	PECONL,F        
	return
;;===========------------=============------------===================---------	
;wite (Data24x1_BK2,Data24x2_BK2) to address(HighAddr24X_BK2,LowAddr24x_BK2)
;;===========------------=============------------===================---------
WriteTwoByte:
	IF	0
	call	Start24
	BANK	2
	movlw	0a0h
	rrcf	WREG,W	
	iorwf	HighAddr24X_BK2,W
	bcf	ALUSTA,C
	rlcf	WREG,W
	BANK	0
	call	SendOutByte		
	call	SendAck24
	BANK	2
	movfp	LowAddr24x_BK2,WREG	
	BANK	0
	call	SendOutByte
	call	SendAck24
	BANK	2
	movfp	Data24x1_BK2,WREG
	BANK	0	
	call	SendOutByte
	call	SendAck24
	
	BANK	2
	movfp	Data24x2_BK2,WREG
	BANK	0	
	call	SendOutByte
	call	SendAck24
	call	Stop24
	ENDIF
	return
;;===========------------=============------------===================---------	
;write (Data24x1_BK2,Data24x2_BK2) to address(HighAddr24X_BK2,LowAddr24x_BK2)
;and write two 0xff
;;===========------------=============------------===================---------	
WriteOneByte:
	
	call	WriteDelay
	call	Start24
	BANK	2
	movlw	0a0h
	rrcf	WREG,W	
	iorwf	HighAddr24X_BK2,W
	bcf	ALUSTA,C
	rlcf	WREG,W	
	BANK	0
	call	SendOutByte		
	call	SendAck24
	BANK	2
	movfp	LowAddr24x_BK2,WREG	
	BANK	0
	call	SendOutByte
	call	SendAck24
	BANK	2
	movfp	Data24x1_BK2,WREG
	BANK	0	
	call	SendOutByte
	call	SendAck24	
	call	Stop24
	BANK	2
	incf	LowAddr24x_BK2,F
	movlw	0
	addwfc	HighAddr24X_BK2,F
	BANK	0	
	return	
;;===========------------=============------------===================---------	
;wite Data24x1_BK2 to address(HighAddr24X_BK2,LowAddr24x_BK2)
;;===========------------=============------------===================---------
Write16Byte24:
	btfss	Task2Flag,HaveDataIn
	return		
	call	Write16ByteDelay
	btfsc	ALUSTA,C
	return			;delay un
	
	BANK	3
	tstfsz	RecordCount_BK3
	goto	HaveDataWriteIn
	BANK	0
	goto	ThisTimeOver
HaveDataWriteIn:			;

⌨️ 快捷键说明

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