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