我现在是在弄I2C,现在有一点不懂,程序是I2C软件包里的:;进行无子地址多字节读 ;入口参数:器件从地址SLA 接收数据区MRD 读入字节数NUMBYTE ;出口参数:ACK 为1时操作正确。 ;占用R0,R1,ACC IRDNBYTEEXT: CLR ACK MOV R0,#MRD MOV R1,NUMBYTE ACALL GETBUS MOV A,SLA INC A ACALL SENDBYTE ;器件寻址 MOV A,I2STAT CJNE A,#40H,IRDNEEND IRDNE_L1:DJNZ R1,IRDNE_L2 MOV I2CON,#40H ;取最后一个数据后发送非应答位 JNB SI,$ MOV A,I2STAT CJNE A,#58H,IRDNEEND MOV A,I2DAT MOV @R0,A ;数据存入MRD区中(R0指针指向MRD区) SETB ACK IRDNEEND:MOV I2CON,#54H RET IRDNE_L2:MOV I2CON,#44H ;接收数据并发送应答位 JNB SI,$ MOV A,I2STAT CJNE A,#50H,IRDNEEND ;总线出错即退出 MOV A,I2DAT ;取数据 MOV @R0,A ;数据存入MRD区 INC R0 SJMP IRDNE_L1 用兰色的程序是指多字节读出来对吗,如果有三个数据,那么这三个数据应该在以下程序读完了吧 :IRDNE_L2:MOV I2CON,#44H ;接收数据并发送应答位 JNB SI,$ MOV A,I2STAT CJNE A,#50H,IRDNEEND ;总线出错即退出 MOV A,I2DAT ;取数据 MOV @R0,A ;数据存入MRD区 INC R0 SJMP IRDNE_L1 我的问题是:这里数据已经读完了,为什么上面红色字体的还出现读数据,着个数据读出来的是什么数据,假如我要读的数据是01H,02H,03H这个三个数据,那么在在红色字体的程序读出来的是01H,还是03H,还是两个都不是, |