结构推理 将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                    ;
【答案解析】