void main()
{
init()
while(1) {
AD()
P1 = ~AD_DATA[1]
ES=1//允许串口中断--允许它中断,却没有它的处理函数!
SBUF=AD_DATA[1]
while(!TI) //--等待TI=1,但是,一旦TI=1,程序就跑飞了
TI=0
ES=0
}
}
把:ES=1 //允许串口中断
删除试试。
你这个是iic的时序图你要明白数据是如何沟通的。。。大部分通讯都分为主机和从机。
主机控制电压的高低来发送数据,从机通过侦测电压的高低来接受数据
至于电压何时高何时低,那就是通讯协议的构成了。
你上图sda用来发送数据,scl用来作为判断数据的时间轴。
将模拟量(一般为电压值)转换为数字量,串行A/D输出的是串行数据,并行A/D直接输出相应的字节位并行数据.如假设AD转换精度是8位,即并行转换直接有8个数据位(一个字节)芯片本身有一地址码,发出读数据数直接将转换数据放在总线上.串行总线引脚少,但CPU无法直接读取,需要通过相应的接口芯片转换.并行总线编程比较简单,CPU直接寻址就可读取.但受引脚限制,位数一般有限,一般为2个字节(16位转换精度).串行总线不存在这个问题,但读取占用CPU时间较多欢迎分享,转载请注明来源:内存溢出
评论列表(0条)