/**************************************
**************************************/
/*******************************/
void delay(unsigned int k)
{
unsigned int i,j
for(i=0i<ki++)
{
for(j=0j<121j++)
{}}
}
/**************************************
延时5微秒(STC90C52RC@12M)
不同的工作环境,需要基滑调整此函数,注意时钟过快时需要修改
当改用1T的MCU时,请调整此延时函数
**************************************/
void Delay5us()
{
_nop_()_nop_()_nop_()_nop_()
_nop_()/*_nop_()_nop_()_nop_()
_nop_()_nop_()_nop_()_nop_()*/
}
/**************************************
延时5毫秒(STC90C52RC@12M)
不同的工作环境,需要调整此函数
当改用1T的MCU时,请调整此延时函数
**************************************/
void Delay5ms()
{
WORD n = 1000
while (n--)
{
_nop_()_nop_()_nop_()_nop_()
}
}
void MMA8452_SendByte(BYTE dat)
{
BYTE i
for (i=0i<8i++) /春中/8位计数器
{
dat <<= 1 //移出数据的最高位
SDA = CY //送数据口
SCL = 1 //拉高时钟线
Delay5us()//延时
SCL = 0 //拉低时钟线
Delay5us()//延时
}
MMA8452_RecvACK()
}
/**************************************
从IIC总线接收一个字节数据
**************************************/
BYTE MMA8452_RecvByte()
{
BYTE i
BYTE dat = 0
SDA = 1 //使能内部上拉,准备读取数据,
for (i=0i<8i++) //8位计数器
{
dat <<= 1
SCL = 1 //拉高时钟线
Delay5us()//延时
dat |= SDA//读数据
SCL = 0 //拉低时钟线
Delay5us()//延时
}
return dat
}
这是我以前读取传感器信息时候用的。正好是iic通信的那部分,你自己学一下iic吧扒锋山,我的程序是没问题的哦。
IIC协议有讲的,橘租每一次传输都有起始
应答
错误
总线忙
非圆猜兆应答
等信号格式
NoACK就是非应答,兆侍他告诉iic传输的是最后一个数据,TestAck()
是发送一个字后等待从机应答
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)