#ifndef _I2C_H
#define _I2C_H
#define SDA_1 P4OUT|=0x02 //SDA = 1
#define SDA_0 P4OUT&=~0x02 //SDA = 0
#define SCL_1 P4OUT|=0x01 //SCL = 1
#define SCL_0 P4OUT&=~0x01 //SCL = 0
#define SDA_IN P4DIR&=~0x02; //I/O口为输入
#define SDA_OUT P4DIR|=0x02 //I/0口为输出
#define J_SDA_1_or_0 (P4IN&0x02)==0x02
//--------------------------------------------
//--------以下为24C64读写子函数
//DELAY 函数程序//功能:延时子程序
//==========================================
static void Delay(unsigned int n)
{
while(n!=0)
{n--;}
}
//=========================================
//START 函数程序
//功能:开始闪存操作
//==========================================
void Start(void)
{
SDA_OUT;
SDA_1;
Delay(10);
SCL_1;
Delay(10);
SDA_0;
Delay(10);
SCL_0;
Delay(10);
}
//=========================================
//STOP 函数程序
//功能:停止闪存操作
//==========================================
void Stop(void)
{
SDA_0;
Delay(10);
SCL_1;
Delay(10);
SDA_1;
Delay(10);
}
void TX_Byte(unsigned char WriteData)
{
unsigned char i,j;
j=WriteData;
SDA_OUT;
for (i=0; i<8; i++)
{
if ((j&0x80)==0)
{ SDA_0;}
else
{ SDA_1;}
j <<=1;
Delay(10);
SCL_1;
Delay(10);
SCL_0;
Delay(10);
}
}
unsigned char RX_Byte(void)
{
unsigned char i;
unsigned char TempData = 0;
SDA_IN;
for (i=0; i<8; i++)
{
Delay(10);
SCL_1;
Delay(10);
TempData <<= 1;
if (J_SDA_1_or_0)
{ TempData++; }
SCL_0;
Delay(10);
}
SDA_OUT;
return(TempData);
}
//=========================================
//ACK 函数程序
//功能:挂高电平表示闪存时钟信号
//==========================================
void ReceiveAck(void)
{
SDA_IN;
SCL_1;
Delay(10);
while (J_SDA_1_or_0)
{ }
SCL_0;
SDA_OUT;
Delay(10);
}
unsigned char ReadWord(unsigned long int unit)
{
unsigned char LowAdd = 0;
unsigned char HighAdd = 0;
unsigned char TempData = 0;
LowAdd = (unsigned char)unit;
HighAdd = (unsigned char)(unit >> 8);
SDA_OUT;
Start();
TX_Byte(0xa0);
ReceiveAck();
TX_Byte(HighAdd);
ReceiveAck();
TX_Byte(LowAdd);
ReceiveAck();
Start();
TX_Byte(0xa1);
ReceiveAck();
TempData = RX_Byte();
Stop();
Delay(8000);
return(TempData);
}
void WriteWord(unsigned long int unit, unsigned char WriteData)
{
unsigned char LowAdd = 0;
unsigned char HighAdd = 0;
LowAdd = (unsigned char)unit;
HighAdd = (unsigned char)(unit >> 8);
Start();
TX_Byte(0xa0);
ReceiveAck();
TX_Byte(HighAdd);
ReceiveAck();
TX_Byte(LowAdd);
ReceiveAck();
TX_Byte(WriteData);
ReceiveAck();
Stop();
Delay(8000);
}
#endif
关键字:MSP430 IIC 总线程序
引用地址:
MSP430 IIC总线程序
推荐阅读最新更新时间:2024-03-16 14:44
MSP430单片机的中断优先级
MSP430的中断分为3种:系统复位、不可屏蔽中断、可屏蔽中断。 (1)系统复位的中断向量为0xFFFE。 (2)不可屏蔽中断的中断向量为0xFFFC。响应不可屏蔽中断时,硬件自动将OFIE、NMIE、ACCVIE复位。软件首先判断中断源并复位中断标志,接着执行用户代码。退出中断之前需要置位OFIE、NMIE、ACCVIE,以便能够再次响应中断。需要特别注意点:置位OFIE、NMIE、ACCVIE后,必须立即退出中断相应程序,否则会再次触发中断,导致中断嵌套,从而导致堆栈溢出,致使程序执行结果的无法预料。 (3)可屏蔽中断的中断来源于具有中断能力的外围模块,包括看门狗定时器工作在定时器模式时溢出产生的中断。每一个中断都
[单片机]
基于MSP430的无线传感器节点动态功率管理研究
0 引言 无线 传感器 网络 是由多个带有传感器、数据处理单元和通信模块的节点组织而成的网络,因为在军事、工业、医疗、农业等领域的巨大应用前景而成为近年来的研究热点。由于无线传感器节点通常工作在人们难以触及的环境中,并且节点能量有限,难以补充,所以降低功耗、延长使用寿命成为无线传感器网络设计的核心问题。因此,传感器网络的体系结构、通信协议、算法、电路和感知都必须满足能量有效性。就降低单个无线传感器节点功耗而言,除在硬件设计时采用低功耗元件外,动态功率管理(Dynamic Power Management,DPM)和动态电压调节(Dynamic Voltage Supply,DVS)都能有效地降低系统功耗。DPM的基本原理是传感
[单片机]
具有远程开启功能的指纹应用系统设计
摘要:设计了一个能用于门锁和保险箱的指纹识别与控制系统。系统以MSP430F149为主控芯片,FSC7002为指纹处理芯片,兼具密码和指纹两种开启方式。还设计了一个可选的远程开启和报警模块。模块采用MG323作为通信芯片,通过GSM网络实现了远程信息的传输。开发了基于Android系统的远程开启软件,软件采用DES对传输信息进行加密,提高了信息传输的安全性。 引言 指纹识别是一种有效的身份识别技术。随着光电技术和半导体技术的发展,自动指纹识别技术越来越多地被应用到人们的日常生活之中。指纹锁和指纹保险箱是指纹识别应用中比较重要的产品。与指纹门禁不同,应用于锁具中的指纹系统一般采用电池供电,具有功耗低、体积小等特点。本文设计和实现
[单片机]
msp430软件安装破解过程
ew430-ev-320a 安装破解过程 第一步: 把安装文件放到一个目录下(不要用中文、目录尽量短) 第二步: 开始 运行 cmd 第三步: 进入安装文件目录下 第四步: 查找机器代码: iarid.exe 第五步: 生成密钥 iarkg.exe machine code /0x26386 code.txt 第六步: 进入到 code 记事本中 查找 关于 msp430的 key Ctrl + F -- 430 第七步: 开始安装 操作如下: Microsoft Windows XP (C) 版权所有 1985-2001 Microsoft Corp. C:
[单片机]
MSP430程序能下载进去却无法运行
现象: 在程序中定义了较大的全局数组,导致程序能下载进去却无法正常运行。将数组减小又可以恢复正常。 原因是: 在main函数(关闭看门狗)之前,含有编译器添加的启动程序,程序启动后先初始化数组,结果超过了看门狗默认的间隔时间32ms,导致每次程序都无法正常运行。 解决办法: 方法一 将一些变量(主要是大全局数组)定义成 no init类型 方法二 修改IAR的cstartup.s43程序,具体方法如下:(iar310a为例) 1 将cstartup.s43程序加载到用户自己的项目中,cstartup.s43在iar310a的路径如下$TOOLKIT_DIR$srcLIB 2 修改cstartup.s43中的__progra
[单片机]
基于TI MSP430的倒车雷达设计
随着人们对汽车辅助驾驶系统智能化要求的提高和汽车电子系统的网络化发展,新型的倒车雷达应能够连续测距并显示障碍物距离,并具有通信功能,能够把数据发送到汽车总线上去。 以往的倒车雷达设计使用的元器件较多,功能也较简单。本文介绍的基于新型高性能超低功耗单片机MSP430F2274的倒车雷达可以弥补以往产品的不足。 系统总体设计 系统采用超声波测距原理。超声波测距仪器一般由发射器、接收器和信号处理器三部分组成。工作时,超声波发射器发出超声波脉冲,超声波接收器接收遇到障碍物反射回来的反射波,准确测量超声波从发射到遇到障碍物反射返回的时间,根据超声波的传播速度,可以计算出障碍物距离。作为一种非接触式的检测方式,超声波具有空气传
[单片机]
基于MSP430FW427的无磁水表设计方案精编
1 MSP430FW42x单片机介绍
MSP430FW42x系列单片机是TI公司针对电子式流量与旋转运动检测最新开发的专用MCU芯片,它将超低功耗MCU、旋转扫描接口(SCAN IF)和液晶显示LCD驱动模块完美地结合在一起。该器件的超低功耗结构和流量检测模块不仅延长了电池的寿命,同时还提高了仪表的精度与性能。MSP430FW42x的典型应用包括热量仪表、热水和冷水仪表、气体仪表和工业流量计、风力计以及其他旋转检测应用。
2 流量测量的原理
2.1 基本原理
一个由叶轮或螺旋齿轮构成的机械装置把流体流动转换为转动,这种转换能够实现对流体流量的测量。
把一个谐振回路中的电感置于叶轮的上方可
[单片机]
基于MSP43O和Zigbee的无线抄表终端设计
1 引言
随着客户数量的增多,特别是一户一表的推广,供电部门抄录客户用电数据的工作量成倍增加。传统的手工抄表不但费时、费力,准确性和及时性得不到可靠的保证,而且存在安全隐患、管理费用过高等缺点,已不适应现代电力企业管理的需要。近年来提出了多种远程自动抄表方式,但是远程抄表系统对通信技术的数据可靠性要求很高,对功耗的要求也很苛刻,各种远程抄表方式受技术或成本制约,推广速度缓慢。本文给出了一种基于MSP430F149和Zigbee技术的无线自动抄表终端,通信质量好、工作可靠、经济实用,可以准确及时地将用户电能表数据抄取上传,是一种理想的自动抄表解决方案。
在诸多的无线方案中,我们选用了近几年来一种新兴的
[网络通信]