专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
TI
求一个MSPF5529LP的IIC例程
2019-07-15 15:37
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
TI MCU
6314
2
1263
想读一个传感器的数据,但需要用到IIC,有没有哪位大佬,可以分享一下IIC的例程,跪求。。
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
tttt石木
2019-07-15 19:29
//头文件
#ifndef _IIC_H
#define _IIC_H
#include "io430f5529.h"
#include "IOPIN.h"
#include <stdint.h>
#define SCL_HIGH P4OUT|=BIT2
#define SCL_LOW P4OUT&=~BIT2
#define SDA_HIGH P4OUT|=BIT1
#define SDA_LOW P4OUT&=~BIT1
#define SDA_OUT() P4DIR|=BIT1
#define SDA_IN() P4DIR&=~BIT1
#define SCL_OUT() P4DIR|=BIT2
#define SCL_IN() P4DIR&=~BIT2
//#define READ_SDA P_ReadInputDataBit()
void IIC_delayus(unsigned int i);
void IIC_init(void);
void IIC_Start(void);
void IIC_Stop(void);
void IIC_Send_Byte(uint8_t txd);
uint8_t IIC_Wait_Ack(void);
void IIC_Ack(void);
void IIC_NAck(void);
uint8_t IIC_Read_Byte(unsigned char ack);
#endif
//IIC.c文件
#include "io430f5529.h"
#include "IIC.h"
void IIC_delayus(unsigned int i)
{
unsigned int j,k;
for(k=0;k<i;k++)
for(j=0;j<4;j++);
}
void IIC_init()
{
P4DIR|=(BIT1+BIT2); //配置IIC IO口为输出方向
P4SEL|=(BIT1+BIT2);
}
void IIC_Start()
{
SDA_OUT();
SCL_OUT();
SCL_HIGH;
SDA_HIGH;
IIC_delayus(2);
SDA_LOW;
IIC_delayus(2);
SCL_LOW;
}
void IIC_Stop()
{
SDA_OUT();
SCL_OUT();
SCL_LOW;
SDA_LOW;
IIC_delayus(2);
SCL_HIGH;
SDA_HIGH;
IIC_delayus(2);
}
void IIC_Send_Byte(uint8_t txd)
{
uint8_t t;
SDA_OUT();
SCL_LOW;
for(t=0;t<8;t++)
{
if(txd&0x80)
{
SDA_HIGH;
}
else
{
SDA_LOW;
}
txd<<=1;
IIC_delayus(2);
SCL_HIGH;
IIC_delayus(2);
SCL_LOW;
IIC_delayus(2);
}
}
uint8_t IIC_Wait_Ack(void)
{
SDA_IN(); //SDA设置为输入
SDA_HIGH;
IIC_delayus(1);
SCL_HIGH;
IIC_delayus(1);
P4IN&BIT1;
IIC_delayus(5);
SCL_LOW;//时钟输出0
return 0;
}
//产生ACK应答
void IIC_Ack(void)
{
SCL_LOW;
SDA_OUT();
SDA_LOW;
IC_delayus(2);
SCL_HIGH;
IIC_delayus(2);
SCL_LOW;
}
//不产生ACK应答
void IIC_NAck(void)
{
SCL_LOW;
SDA_OUT();
SDA_HIGH;
/IC_delayus(2);
SCL_HIGH;
IIC_delayus(2);
SCL_LOW;
}
uint8_t IIC_Read_Byte(unsigned char ack)
{
unsigned char i,receive=0;
SDA_IN();//SDA设置为输入
for(i=0;i<8;i++ )
{
SCL_LOW;
IIC_delayus(2);
SCL_HIGH;
receive<<=1;
if(P4IN&BIT1)receive++;
IIC_delayus(1);
}
if (!ack)
{
IIC_NAck();//发送nACK
}
else
{
IIC_Ack(); //发送ACK
}
return receive;
}
复制代码
你看看能不能用。
加载中...
查看其它2个回答
一周热门
更多
>
相关问题
CPLD的方波输出
4 个回答
11个版本Quartus II 软件下载,安装包网盘合集,附教程,47G!
20 个回答
请大家帮忙到21IC发展大家谈支持我申请新版面
20 个回答
【通知】21ic中国电子网服务条款 (所有人员必读)
1 个回答
满载而归乙亥年,大展鸿途庚子年---集签赢好礼
20 个回答
相关文章
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
TI
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
- //头文件
- #ifndef _IIC_H
- #define _IIC_H
- #include "io430f5529.h"
- #include "IOPIN.h"
- #include <stdint.h>
- #define SCL_HIGH P4OUT|=BIT2
- #define SCL_LOW P4OUT&=~BIT2
- #define SDA_HIGH P4OUT|=BIT1
- #define SDA_LOW P4OUT&=~BIT1
- #define SDA_OUT() P4DIR|=BIT1
- #define SDA_IN() P4DIR&=~BIT1
- #define SCL_OUT() P4DIR|=BIT2
- #define SCL_IN() P4DIR&=~BIT2
- //#define READ_SDA P_ReadInputDataBit()
- void IIC_delayus(unsigned int i);
- void IIC_init(void);
- void IIC_Start(void);
- void IIC_Stop(void);
- void IIC_Send_Byte(uint8_t txd);
- uint8_t IIC_Wait_Ack(void);
- void IIC_Ack(void);
- void IIC_NAck(void);
- uint8_t IIC_Read_Byte(unsigned char ack);
- #endif
- //IIC.c文件
- #include "io430f5529.h"
- #include "IIC.h"
- void IIC_delayus(unsigned int i)
- {
- unsigned int j,k;
- for(k=0;k<i;k++)
- for(j=0;j<4;j++);
- }
- void IIC_init()
- {
- P4DIR|=(BIT1+BIT2); //配置IIC IO口为输出方向
- P4SEL|=(BIT1+BIT2);
- }
- void IIC_Start()
- {
- SDA_OUT();
- SCL_OUT();
- SCL_HIGH;
- SDA_HIGH;
- IIC_delayus(2);
- SDA_LOW;
- IIC_delayus(2);
- SCL_LOW;
- }
- void IIC_Stop()
- {
- SDA_OUT();
- SCL_OUT();
- SCL_LOW;
- SDA_LOW;
- IIC_delayus(2);
- SCL_HIGH;
- SDA_HIGH;
- IIC_delayus(2);
- }
- void IIC_Send_Byte(uint8_t txd)
- {
- uint8_t t;
- SDA_OUT();
- SCL_LOW;
- for(t=0;t<8;t++)
- {
- if(txd&0x80)
- {
- SDA_HIGH;
- }
- else
- {
- SDA_LOW;
- }
- txd<<=1;
- IIC_delayus(2);
- SCL_HIGH;
- IIC_delayus(2);
- SCL_LOW;
- IIC_delayus(2);
- }
- }
- uint8_t IIC_Wait_Ack(void)
- {
- SDA_IN(); //SDA设置为输入
- SDA_HIGH;
- IIC_delayus(1);
- SCL_HIGH;
- IIC_delayus(1);
- P4IN&BIT1;
- IIC_delayus(5);
- SCL_LOW;//时钟输出0
- return 0;
- }
- //产生ACK应答
- void IIC_Ack(void)
- {
- SCL_LOW;
- SDA_OUT();
- SDA_LOW;
- IC_delayus(2);
- SCL_HIGH;
- IIC_delayus(2);
- SCL_LOW;
- }
- //不产生ACK应答
- void IIC_NAck(void)
- {
- SCL_LOW;
- SDA_OUT();
- SDA_HIGH;
- /IC_delayus(2);
- SCL_HIGH;
- IIC_delayus(2);
- SCL_LOW;
- }
- uint8_t IIC_Read_Byte(unsigned char ack)
- {
- unsigned char i,receive=0;
- SDA_IN();//SDA设置为输入
- for(i=0;i<8;i++ )
- {
- SCL_LOW;
- IIC_delayus(2);
- SCL_HIGH;
- receive<<=1;
- if(P4IN&BIT1)receive++;
- IIC_delayus(1);
- }
- if (!ack)
- {
- IIC_NAck();//发送nACK
- }
- else
- {
- IIC_Ack(); //发送ACK
- }
- return receive;
- }
复制代码你看看能不能用。
一周热门 更多>