X
首页
技术
模拟电子
单片机
半导体
电源管理
嵌入式
传感器
最能打国产芯
应用
汽车电子
工业控制
家用电子
手机便携
安防电子
医疗电子
网络通信
测试测量
物联网
最能打国产芯
大学堂
首页
直播
专题
TI 培训
论坛
汽车电子
国产芯片
电机驱动控制
电源技术
单片机
模拟电子
PCB设计
电子竞赛
DIY/开源
嵌入式系统
医疗电子
颁奖专区
【厂商专区】
【电子技术】
【创意与实践】
【行业应用】
【休息一下】
最能打国产芯
活动中心
直播
发现活动
颁奖区
电子头条
参考设计
下载中心
分类资源
文集
排行榜
电路图
Datasheet
最能打国产芯
微控制器 MCU
[资料分享] 最新的MSP430普通IO模拟IIC程序!
空气
2009-10-30 12:02
楼主
#include
#include
#include
#include
//------------------------------------------
#define IicWpDirOut P6DIR |= BIT5
#define IicWpLow P6OUT &=~ BIT5
#define IicWpHig P6OUT |= BIT5
#define IicSclDirOut P6DIR |= BIT6
#define IicSclLow P6OUT &=~ BIT6
#define IicSclHig P6OUT |= BIT6
#define IicSdaDirOut P6OUT &= ~BIT7
#define IicSdaLow P6DIR |= BIT7
#define IicSdaHig P6DIR &=~ BIT7
#define IicSdaInSt P6IN & BIT7
bool AckErr;
//------------------------------ *** - 时间延时 - *** ------------------------------//
void Delay(unsigned int count)
{
unsigned int i;
_NOP();
_NOP();
for(i=count; i>0; i--);
}
void IIcDelay(void)
{
_NOP();
}
//-----***-IIC初始化-***-----//
void IicInit(void)
{
IicWpDirOut;
IicSdaDirOut;
IicSclDirOut;
IicWpHig;
IicSdaHig;
IicSclHig;
}
//-----***-IIC启示-***-----//
void IicStart(void)
{
IicSdaHig;//IicSda=1;
IIcDelay();
IicSclHig;//IicScl=1;
IIcDelay();
IicSdaLow;//IicSda=0;
IIcDelay();
IicSclLow;//IicScl=0;
IIcDelay();
}
//-----***-IIC停止-***-----//
void IicStop(void)
{
IicSdaLow;//IicSda=0;
IIcDelay();
IicSclHig;//IicScl=1;
IIcDelay();
IicSdaHig;//IicSda=1;
IIcDelay();
}
//-----***-IIC应答-***-----//
void SendAcknowledge(bool ack)
{
IicSdaDirOut;
if(ack)//IicSda=ack;
{
IicSdaHig;
}
else
{
IicSdaLow;
}
IIcDelay();
IicSclHig;//IicScl=1;
IIcDelay();
IicSclLow;//IicScl=0;
IIcDelay();
}
//-----***-从slave端读取一个数据-***-----//
unsigned char IicReceiveByte(void)
{
unsigned char i;
unsigned char bytedata=0;
IicSdaDirOut;
IicSdaHig;//IicSda=1;
for(i=0;i<8;i++) { IicSclHig;//IicScl=1; IIcDelay(); bytedata<<=1; if(IicSdaInSt) { bytedata |=0x01; } else { bytedata &=0xfe; } IicSclLow;//IicScl=0; IIcDelay(); } IicSdaDirOut; return bytedata; } //-----***-传送一个 Byte 数据到 slave-***-----// void IicSentByte(unsigned char DataByte) { unsigned char i; for(i=0;i<8;i++) { if(DataByte & 0x80) { IicSdaHig;//IicSda=1; } else { IicSdaLow;//IicSda=0; } DataByte <<=1; IIcDelay(); IicSclHig;//IicScl=1; IIcDelay(); IicSclLow;//IicScl=0; IIcDelay(); } IicSdaHig;//IicSda=1;-----Y------D---IicSdaDirIn IIcDelay(); IicSclHig;//IicScl=1; IIcDelay(); IicSclLow;//IicScl=0; IIcDelay(); } //-----***-无扇区读---多字节-***-----// //读取指定器件无扇区指定地址多字节数据到指定地址 //Device=器件地址---单字节 //DataAdd=字节地址---单字节 void IicMuchByteRead(unsigned char DataAdd,unsigned char *DataDptr,unsigned char DataLend) { unsigned char i; _DINT(); WDT(); IicInit(); IicStart(); IicSentByte(0xa0); IicSentByte(DataAdd); IicStart(); IicSentByte(0xa1); for(i=DataLend-1;i>0;i--)
{
*DataDptr=IicReceiveByte();
DataDptr++;
SendAcknowledge(0);
}
*DataDptr=IicReceiveByte();
SendAcknowledge(1);
IicStop();
WDT();
Delay(500);
_EINT();
}
//-----***-无扇区写---多字节-***-----//
//写入指定器件无扇区指定地址中的多字节数据
//Device=器件地址---单字节
//DataAdd=字节地址---双字节
//DataByte=被存放数据的地址
//DataLend=被存放数据的长度
void IicMuchByteWrite(unsigned char DataAdd,unsigned char *DataDptr,unsigned char DataLend)
{
unsigned char i;
_DINT();
WDT();
IicInit();
IicWpLow;
IicStart();
IicSentByte(0xa0);
IicSentByte(DataAdd);
for(i=DataLend;i>0;i--)
{
IicSentByte(*DataDptr);
DataDptr++;
}
IicStop();
WDT();
Delay(3500);
IicWpHig;
_EINT();
}
//---特别说明
//---利用430芯片来模拟IIC,是不能够把SDA设置为输出模式而是
//---设置为输入,然后利用方向控制器来输出高或者低
//---如下:
#define IicSdaDirOut P6OUT &= ~BIT7
#define IicSdaLow P6DIR |= BIT7
#define IicSdaHig P6DIR &=~ BIT7
#define IicSdaInSt P6IN & BIT7
点赞
回复评论 (17)
沙发
木易873
还没有用到过,先收藏了,谢谢楼主
加油学习,努力提高
点赞
2010-10-18 15:49
板凳
dhlxzz
谢谢楼主分享
谢谢楼主分享,还没有用到过,先收藏了,谢谢楼主
点赞
2011-2-17 20:32
4楼
ybs777
谢谢楼主分享,先收藏了,谢谢楼主
点赞
2011-4-5 00:26
5楼
wstt
现在贴代码好漂亮啊,是新功能吗?
点赞
2011-4-6 15:21
6楼
ddllxxrr
谢了,收下先
http://shop34182318.taobao.com/ https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
点赞
2011-4-7 05:53
7楼
tongdanuo
回复 楼主 空气 的帖子
正好做这块,收藏试试,
点赞
2011-9-23 11:03
8楼
cat3902982
不错,谢谢楼主了!
点赞
2011-9-23 14:23
9楼
zwq2
收藏了,谢谢楼主
点赞
2011-9-23 14:43
10楼
aahellaa
先mark一下,等会慢慢看。。
点赞
2011-9-27 10:34
11楼
feixing593
楼主辛苦,感谢分享……
点赞
2011-11-10 14:50
12楼
随风飘扬付
能用吗?
确定这个程序能用吗?
点赞
2012-12-18 14:34
13楼
ywl050511
这个必须顶,,,
这个必须顶,,,这个必须顶,,,
点赞
2012-12-18 16:29
14楼
随风飘扬付
这么多人MARK了,有人试过能用吗?
点赞
2012-12-18 17:56
15楼
luweihua
写的很工整 啊,这两天试一试。
点赞
2013-5-13 22:27
16楼
在路上的旁观者
好资料
点赞
2013-8-27 09:54
17楼
alandatou
点赞
2013-11-29 19:07
18楼
古语清江水
收藏!谢谢楼主!
点赞
2015-8-2 14:20
最新活动
报名直播赢【双肩包、京东卡、水杯】| 高可靠性IGBT的新选择——安世半导体650V IGBT
30套RV1106 Linux开发板(带摄像头),邀您动手挑战边缘AI~
安世半导体理想二极管与负载开关,保障物联网应用的稳健高效运行
免费申请 | 上百份MPS MIE模块,免费试用还有礼!
PI 电源小课堂|无 DC-DC 变换实现多路高精度输出反激电源
2024 瑞萨电子MCU/MPU工业技术研讨会——深圳、上海站, 火热报名中
随便看看
有没有朋友考研的阿 昨天看到新: 女生考研迟到跪求进场遭拒
基本放大器电路,希望对各位有用
xilinx与altera逻辑单元对比
STM32的SRAM电压低于多少数据会清零
家用电器漏电自动报警器
电源倒灌的道理高手是这么解释的(转)
电感的作用
如何利用专门设计的测量室和分子束沉积(MBD)系统测量高电阻概述
F28377D 供电问题
有关TMS570LS3137中断问题
今天在开发板上移植了dm9000的kitl碰到的奇怪的问题
论坛新版上线时间大预测,看谁更厉害
AD602完整英文资料!!!
645规约读电表的问题,怎么也读不出电表数据,源代码如下:请大大们指点啊,感激不尽,小弟是新人,也不知道在哪看自己的积分,问题解决
掉电时保存数据到EEPROM中的问题
求一个基于s3c2410芯片的最小系统原理图~~~~~请高手帮忙啊
悲剧啊。LM3S811被锁~!
【TI首届低功耗设计大赛】+基于mpu6050的手势遥控器设计(总结)
有没有不基于蓝牙和wifi手机室内定位
哪里能找到CEImageDiff.exe?
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
京公网安备 11010802033920号
回复
写回复
收藏
回复