A-A+

将AT24C02 10H~17H中的8个数据读出 存入AT24C02 24H~2BH中。设V

2022-08-13 22:11:38 问答库 阅读 199 次

问题详情

将AT24C02 10H~17H中的8个数据读出,存入AT24C02 24H~2BH中。设VⅡC软件包已装入ROM,VSDA、VSCL、SLA、NUMB、MTD、MRD均已按8.3.2软件包小结中协议定义。

参考答案

本题读出时可一次读出,写入时须分二次写入,每次4个,编程如下:
RDAT:MOV MTD,#10H ;置AT24C02读出数据区首址SADR
MOV SLA,#10100000B ;置写AT24C02寻址字节
MOV NUMB,#1 ;置写入数据字节数
LCALL WRNB ;启动并发送AT24C02读出单元子地址SADR
MOV SLA,#10100001B ;置读AT24C02寻址字节
MOV NUMB,#8 ;置读出字节数
LCALL RDNB ;读8个数据[按协议存放在40H(首址MRD)~47H中]
WRAT41:MOV SLA,#10100000B ;置写AT24C02寻址字节
MOV NUMB,#5 ;置第1次写入字节数N+1(多一个片内子地址)
MOV MTD,#24H ;置第1次写AT24C02片内首址SADR[(30H)=24H]
MOV R0,#40H ;置4个数据原存放区首址
MOV R1,#31H ;置4个数据串行发送时存放区首址
MOV R2,#4 ;置数据个数
MOVL41:MOV A,@R0 ;将第1次写4个数据依次移入发送区31H~34H
MOV @R1,A ;
INC R0 ;
INC R1 ;
DJNZ R2,MOVL41 ;
LCALL WRNB ;第1次写4个数据
LCALL DLY10ms ;调用延时10ms子程序(略)
WRAT42:MOV NUMB,#5 ;置第2次写入字节数N+1(多一个片内子地址)
MOV MTD,#28H ;置第2次写AT24C02片内首址SADR[(30H)=28H]
MOV R0,#44H ;置4个数据原存放区首址
MOV R1,#31H ;置4个数据串行发送时存放区首址
MOV R2,#4 ;置数据个数
MOVM2:MOV A,@R0 ;将第2次写4个数据依次移入发送区31H~34H
MOV @R1,A ;
INC R0 ;
INC R1 ;
DJNZ R2,MOVL42 ;
LCALL WRNB ;第2次写4个数据
RET ;

考点:数据