<b>case 0x28: //已发送I2C数据,并接收到应答<br /> if (0==I2C_suba_en) //无子地址直接发送数据<br /> {if(I2C_num>0)<br /> {<br /> I2DAT = *I2C_buf++;<br /> I2CONCLR = 0xX28;<br /> I2C_num--;<br /> }<br /> else<br /> {;//省略}<br /><br /> }<br />当进入到case 0x28语句后,再进入到下面的if语句,(是条件判断,不是循环)<br /> if(I2C_num>0)<br /> {<br /> I2DAT = *I2C_buf++;<br /> I2CONCLR = 0xX28;<br /> I2C_num--;<br /> }<br />这个if语句的执行过程是这样的吗?<br />如下:<br /> (1)假设要发送的数据有10个字节,即I2C_num=10.<br />则语句I2C_num>0成立,执行if下面的语句.<br /><br /> (2)I2DAT = *I2C_buf++;发送一个字节数据.<br />然后:<br /> (3)I2CONCLR = 0xX28;把起始标志清零,和把I2C中断标志清零<br />(I2C中断标志清零,那么只要有中断主可以再次执行)<br /><br /> (4)I2C_num--;自减一操作(这时I2C_num>0)<br />再次回到if语句判断I2C_num>0是否成立,因为I2C_num=9,所以成立,继续执行<br />if语句.再次回到(2)处,然后往下执行。<br /><br />直到I2C_num的值为0,这10次if语句的执行有接收从机发过来的应答信号吗?有的话,请指教。。。<br /><br /><br />这就是有一个问题:<br />执行一个 if(){;//其它 语句} 的时间,与中断所需要的时间,到底那个时间更短?<br /><br />(A)若是中断时间更短,是可以连接发送数据?<br />(B)若是if(){;//其它 语句} 的时间短,呢??/</b>
|