我现在是在弄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,还是两个都不是, |
|