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

📄 tmp86ch29mg.asm

📁 东芝单片机读取E2存储器AT24C02汇编源程序
💻 ASM
字号:
;FM2402W_PROCESE
		
FM2402W:
        		           		;D=要写的存储单元号	这是要往24CXX里写的位置
        		           		;E=要写入的数据		这是往24CXX里写的数据
        	SET 	(P6CR).7 
        	SET 	(P6CR).6	           			
		SET 	(P6DR).7                ;置SCL=1
		SET 	(P6DR).6	        ;置SDA=1
        	CALL 	FMSTART                	;写开始状态字
        	LD 	H,0Y10100000           	;SET 2402=写
        	CALL 	FMSEND                 	;送
        	LD 	H,D	                ;30H指向2402数据的起始地址,将要写2402的起始地址送到H
        	CALL 	FMSEND
        	LD 	H,E			;取一个数据传递到H
        	CALL 	FMSEND 	                ;写具体数据
        	CALL 	FMSTOP  	        ;停止
        	CALL 	DELAY_1MS            	;等待一定时间使24C02内部写完成
        	RET               		;返回

FMSEND: 	PUSH 	A	                ;保存A
        	LD 	A,H	                ;将H中的数发送出去
        	LD 	L,0X08			;往2401发送数据
FMSLO0P1:	ROLC 	A                       ;将A中的数据移到数据线上
        	LD 	(P6DR).7,CF        	;送出数据
        	CALL 	DELAY_XuS
        	SET 	(P6DR).6		;发送串行时钟进行写操作
        	CALL 	DELAY_XuS
        	CLR 	(P6DR).6
        	DEC	L
        	JR 	NE,FMSLO0P1             ;串行发送8 BIT
        	
FMACK:        	CLR 	(P6CR).7       		;准备接收ACK:input
        	CALL 	DELAY_XuS
        	SET 	(P6DR).6          	;接收ACK的时钟
        	CALL 	DELAY_XuS        	
RFMACK:		LD 	CF,(P6DR).7      	;写完后等待确认信号 ACK
        	JR 	CS,RFMACK
        	SET 	(P6CR).7		;output
        	NOP
        	CLR 	(P6DR).6         	;为下一步其它操作做准备
        	NOP
        	CLR 	(P6DR).7
        	POP 	A			;还原ACC
       	 	CALL 	DELAY_1MS              	;等待内部写完
        	RET

FM2402R:					;D=要读的存储单元号	这是要从24CXX里读出的位置
        		           		;E=读出的数据		这是从24CXX里读出的数据
		SET 	(P6CR).7 
        	SET 	(P6CR).6
		SET 	(P6DR).7
        	SET 	(P6DR).6          	;保证SDA/SCL起始=1
		CALL 	FMSTART                	;写状态字
        	LD	H,0Y10100000          	;SET 2402=WRI
        	CALL 	FMSEND                 	;送出状态字
        	LD 	H,D                	;上程序传来的读取地址;H=地址数据
		CALL 	FMSEND                 	;送出数据
        	SET 	(P6DR).6
        	SET 	(P6DR).7          	;保证SDA/SCL起始=1
        	CALL 	FMSTART
        	LD 	H,0Y10100001          	;读状态
        	CALL 	FMSEND
        	CALL 	R2READ                 	;读所需的数
        	CALL 	FMSTOP
        	RET

FMSTART: 	CALL 	DELAY_XuS              	;对2402操作开始
        	CLR 	(P6DR).7             	;在SCL=1时,SDA由1变为0表示开始
        	CALL 	DELAY_XuS
        	CLR 	(P6DR).6
        	CALL 	DELAY_XuS
        	RET

R2READ: 	PUSH 	A
        	LD 	L,0X08
FMRLO0P1:	CLR 	(P6CR).7           	;置数据线=1
        	SET	(P6DR).7
        	CALL 	DELAY_XuS
        	SET 	(P6DR).6          	;输出一个串行时钟
        	CALL 	DELAY_XuS
        	LD 	CF,(P6DR).7		;读数据线上的数据到 CF
        	ROLC 	A                       ;移到 A
        	CALL 	DELAY_XuS
        	CLR 	(P6DR).6
        	DEC	L
        	JR 	NE,FMRLO0P1             ;读 8 BIT 数据
        	CALL 	DELAY_XuS
        	SET 	(P6CR).7
        	CLR 	(P6DR).7
        	LD 	E,A                  	;将接收到的数据保存到H
        	POP 	A                     	;还原A
        	RET

FMSTOP: 	CALL 	DELAY_XuS             	;对2401操作结束
        	SET 	(P6DR).6
       		CALL 	DELAY_XuS
        	SET 	(P6DR).7		;在SCL=1时,SDA由0变为1表示结束
        	CALL 	DELAY_XuS
        	RET
       	
DELAY_XuS:	PUSH	B	
             	LD	B,0XF0
EEDELAY_LOOP:	NOP
		NOP
        	NOP
        	DEC	B              	
         	JRS	F,EEDELAY_LOOP 	
               	POP	B
               	RET

DELAY_1MS:	LD	B,0X64			;延时1mS
LOOP4:		LD	C,0X03
		NOP		
LOOP5:		DEC	C
 		JR	NZ,LOOP5
		DEC	B
		JR	NZ,LOOP4
		RET

⌨️ 快捷键说明

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