此帖出自单片机论坛
最新回复
我做的并口模拟IIC程序。能用的。你参考一下吧!
延时可以自己适当调整。
sbit SCL=P0^1; //IIC
sbit SDA=P0^0; //IIC
//****************************************
//
// IIC 总线
//
//****************************************
//不可调用,程序私有
bit IIC_START(void) //IIC开始
{ SDA=1;
Delay_10us(1);
SCL=1;
if (SDA==1)
{
SDA=0;
Delay_10us(1);
SCL=0;
SDA=1;
return 1;
}
else
return 0;
}
void IIC_STOP(void) //IIC停止
{ SDA=0;
Delay_10us(1);
SCL=1;
Delay_10us(1);
SDA=1;
Delay_10us(1);
}
void IIC_ACK(void) //发送应答
{
SDA=0;
Delay_10us(1);
SCL=1;
Delay_10us(1);
SCL=0;
Delay_10us(1);
SDA=1;
Delay_10us(1);
}
void IIC_NACK(void) //发送无应答
{
SDA=1;
Delay_10us(1);
SCL=1;
Delay_10us(1);
SCL=0;
Delay_10us(1);
SDA=0;
Delay_10us(1);
}
bit IIC_WACK(void) //等待应答信号
{ unsigned char errtime=255;//因故障接收方无ACK,超时值为255。
SDA=1;
Delay_10us(1) ;
SCL=1;
while(SDA)
{ errtime--;
if (!errtime)
{ IIC_STOP();
return 0;
} }
Delay_10us(1) ;
SCL=0;
Delay_10us(1) ;
return 1; }
bit IIC_SEND_BYTE( uchar d)//IIC输出1字节,并口模拟IIC输出
{
uchar i = 8;
while( i-- )
{
Delay_10us(1);
if ( d &0x80 ) SDA =1;
else SDA =0;
Delay_10us(1);
SCL = 1;
Delay_10us(1);
SCL = 0;
d = d
详情
回复
发表于 2008-7-12 00:44
| ||
|
||
参考原文
此帖出自单片机论坛
| ||
|
||
回复 xiaoxif 的帖子
此帖出自单片机论坛
| ||
|
||
|
|
回复 仙猫 的帖子
此帖出自单片机论坛
| ||
|
||
回复 xiaoxif 的帖子—关于"incorporate"这个英文单词
此帖出自单片机论坛
| ||
|
||
此帖出自单片机论坛
| ||
|
||
回复 7楼仙猫 的帖子
此帖出自单片机论坛
| ||
|
||
此帖出自单片机论坛
| ||
|
||
回复 9楼仙猫 的帖子
此帖出自单片机论坛
| ||
|
||
此帖出自单片机论坛
| ||
|
||
回复 6楼 的帖子
此帖出自单片机论坛
| ||
|
||
回复 5楼 的帖子 理解I2C的特征很重要
此帖出自单片机论坛
| ||
|
||
回复 板凳 的帖子
此帖出自单片机论坛
| ||
|
||
回复 10楼 的帖子
此帖出自单片机论坛
| ||
|
||
回复 11楼仙猫 的帖子
此帖出自单片机论坛
| ||
|
||
回复 12楼xiaoxif 的帖子
此帖出自单片机论坛
| ||
|
||
回复 14楼xiaoxif 的帖子
此帖出自单片机论坛
| ||
|
||
写的好!回复 17/18楼 的帖子
此帖出自单片机论坛
| ||
|
||
| |
|
|
EEWorld Datasheet 技术支持