51单片机IIC总线通信

51单片机IIC总线通信,第1张

我把iic通信的代码给你吧

/**************************************

向IIC总线发送一个字节数据

**************************************/

/*******************************/

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吧扒锋山,我的程序是没问题的哦。

在选购加速度传感器的时候,需要考虑什么?

模拟输出

vs

数字输出:

这个是最先需要考虑的。这个逗漏返取决于你系统中和加速度传感器之间的接口。一般模拟输出的电压和加速度是成比例的,比如2.5V对应0g的加速度,2.6V对应于0.5g的加速度。数字输出一般使用脉宽调制(PWM)信号。

如果你使用的微控制器只有数字输入,比如BASIC

Stamp,那你就只能选择数字输出的加速度传感器了,但是问题是你必须占用额外的一个时钟单元用来处理PWM信号,同时对处理器也是一个不小的负担。

如果你使用的微控制器有模拟输入口,比如PIC/AVR/OOPIC,你可以非常简单的使用模拟接口的加速度传感器,所需要的就是在程序里加入一句类似"acceleration=read_adc()"的指令,而且处理此指令的速度只要几微秒。

测量轴数量:

对于多数项目来说,两轴的加速度传感器已经能满足多数应用了。对于某些特殊的应用,比如UAV,ROV控制,三轴的加速度传感器可能会适合一点。

最大测量值:

如果你只要测量机器人相对于地面的倾角,那一个±1.5g加速度传感器就足够了。但是如果你需要测量机器人的动态性能,±2g也应该足够了。要是你的机器人会有比如突然启动或者停止的情况出现,那你需要一个±5g的传感器。

灵敏度

一般来说,越灵敏山饥越好。越灵敏的传感搜余器对一定范围内的加速度变化更敏感,输出电压的变化也越大,这样就比较容易测量,从而获得更精确的测量值。

带宽

这里的带宽实际上指的是刷新率。也就是说每秒钟,传感器会产生多少次读数。对于一般只要测量倾角的应用,50HZ的带宽应该足够了,但是对于需要进行动态性能,比如振动,你会需要一个具有上百HZ带宽的传感器。

电阻/缓存机制

对于有些微控制器来说,要进行A/D转化,其连接的传感器阻值必须小于10kΩ。比如Analog

Devices's

analog

加速度传感器的阻值为32kΩ,在PIC和AVR控制板上无法正常工作,所以建议在购买传感器前,仔细阅读控制器手册,确保传感器能够正常工作


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12345666.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存