完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本帖最后由 Stark扬 于 2018-10-11 15:30 编辑
/****************************************************************************************************** 文件名:iic.c 编写者:czhang 描述:iic总线的子程序。 版本:2003年10月11日 1.0 *****************************************************************************************************/ #include #include "BH1750.h" #include "iic.h" #include "general.h" /*************************************************************************** 初始化IIC ***************************************************************************/ void InitIIC() { IIC_DIR |= IIC_SCL; //SCL管脚为输出 IIC_DIR &= ~IIC_SDA; //SDA管脚为输入 C_SCL; Stop(); } /*************************************************************************** 进行短暂的延时,原因是MSP430的速度比较快。使用者可以根据时钟频率自行调节延时长短 ***************************************************************************/ void delay() { unsigned char q0; for(q0=0;q0<20;q0++) { _NOP(); } } /*************************************************************************** 启动IIC总线 ***************************************************************************/ void Start() { SDA_OUT; S_SDA; delay(); S_SCL; delay(); C_SDA; delay(); C_SCL; delay(); } /*************************************************************************** 停止操作,释放IIC总线 ***************************************************************************/ void Stop() { SDA_OUT; C_SCL; delay(); C_SDA; delay(); S_SCL; delay(); S_SDA; delay(); } /*************************************************************************** IIC总线应答 ***************************************************************************/ void Ack() { SDA_OUT; C_SDA; delay(); S_SCL; delay(); C_SCL; delay(); S_SDA; } /*************************************************************************** IIC总线无应答 ***************************************************************************/ void NoAck() { SDA_OUT; S_SDA; delay(); S_SCL; delay(); C_SCL; delay(); } /*************************************************************************** IIC总线检验应答 返回值:IIC应答位的值0:应答 1:无应答 ***************************************************************************/ unsigned char TestAck() { unsigned char ack; S_SCL; delay(); SDA_IN; delay(); ack=READ_SDA; delay(); C_SCL; delay(); return(ack); } /*************************************************************************** IIC总线写8位数据 input:要写的8位数据 ***************************************************************************/ void Write8Bit(unsigned int input) { unsigned char temp,q0; SDA_OUT; for(temp=8;temp!=0;temp--) { q0=input&0x80; if(q0==0x80) S_SDA; else C_SDA; delay(); S_SCL; delay(); C_SCL; delay(); input=input<<1; } } /*************************************************************************** IIC总线读8位数据 返回值:读出的8位数据 ***************************************************************************/ unsigned char Read8Bit() { unsigned char temp,q0,rbyte=0; SDA_IN; for(temp=8;temp!=0;temp--) { S_SCL; delay(); rbyte=rbyte<<1; SDA_IN; q0=READ_SDA; if(q0==IIC_SDA) rbyte=rbyte|0x1; delay(); C_SCL; delay(); } return(rbyte); } 以前用过的,感受一下~? |
|
|
|
只有小组成员才能发言,加入小组>>
3029个成员聚集在这个小组
加入小组2919 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3582 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2338 浏览 1 评论
4798 浏览 1 评论
2572 浏览 1 评论
1321浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3586浏览 2评论
2920浏览 1评论
1497浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 17:14 , Processed in 1.210556 second(s), Total 50, Slave 43 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号