MSP430普通I/0口模拟IIC总线

发布者:zukeq2009最新更新时间:2016-08-17 来源: eefocus关键字:MSP430  普通I0口  模拟IIC总线 手机看文章 扫描二维码
随时随地手机看文章
#include "main.h"

#define SLAVE_ADDRESS           0x04
#define SLAVE_WRITE_ADDRESS     (SLAVE_ADDRESS<<1)|0x00
#define SLAVE_READ_ADDRESS      (SLAVE_ADDRESS<<1)|0x01

#define I2C_SDA     BIT3
#define I2C_SCL     BIT4
#define I2C_PORT_IN    P6IN
#define I2C_PORT_OUT   P6OUT
#define I2C_PORT_DIR   P6DIR

#define SDA_IN     (I2C_PORT_IN & I2C_SDA)
#define SCL_IN     (I2C_PORT_IN & I2C_SCL)
#define S_SDA     I2C_PORT_DIR &= ~I2C_SDA
#define C_SDA     I2C_PORT_DIR |= I2C_SDA;I2C_PORT_OUT &= ~I2C_SDA
#define S_SCL     I2C_PORT_DIR &= ~I2C_SCL
#define C_SCL     I2C_PORT_DIR |= I2C_SCL;I2C_PORT_OUT &= ~I2C_SCL

void I2C_init(void)
{
    I2C_PORT_DIR &= ~(I2C_SDA|I2C_SCL);
 I2C_PORT_OUT |= (I2C_SDA|I2C_SCL);
}

void I2C_DELAY(void)
{
    asm("nop");asm("nop");
 asm("nop");asm("nop");
 asm("nop");asm("nop");
 asm("nop");asm("nop");
}

void I2C_Start(void)
{
 S_SDA;
 S_SCL;
 I2C_DELAY();
 C_SDA;
 I2C_DELAY();
 C_SCL;
}

void I2C_Stop(void)

 C_SDA;
 I2C_DELAY();
 S_SCL;
 I2C_DELAY();
 S_SDA;
 I2C_DELAY();
}

void I2C_Send_Ack(void)
{
 C_SDA;
 I2C_DELAY();
 S_SCL;
 I2C_DELAY();
 C_SCL;
 I2C_DELAY();
}

void I2C_Send_NoAck(void)
{
 S_SDA;
 I2C_DELAY();
 S_SCL;
 I2C_DELAY();
 C_SCL;
 I2C_DELAY();
}


void I2C_Read_Ack(void)
{
    unsigned char i = 0;
 S_SCL;
 S_SDA;
 I2C_DELAY();
 for(i=0; i<100; i++) 
    {
  if(SDA_IN == 0) 
        {
   I2C_DELAY(); break;
  }
  I2C_DELAY();
 }
 C_SCL;
 I2C_DELAY();
}

void I2C_WriteByte(unsigned char one_byte)
{
    unsigned char i = 0;
 S_SDA;
 for (i=0; i<8; i++) 
    {
        if (one_byte&0x80) 
        {
            S_SDA; 
        }
        else 
        {
            C_SDA;
        }
        one_byte<<=1;
        I2C_DELAY();
        S_SCL;
        I2C_DELAY();
        C_SCL;
        I2C_DELAY();
 }
}

unsigned char I2C_ReadByte(void)
{
 unsigned char read_byte=0;
    unsigned char i = 0; 
 S_SDA;
 //C_SCL;
 I2C_DELAY();
 for (i=0; i<8; i++)
    {
  S_SCL;
  I2C_DELAY();
  read_byte<<=1;
  if (SDA_IN != 0)
  {
   read_byte |= 0x01;
  }
  //I2C_DELAY;
  C_SCL;
  I2C_DELAY();
 }
 return read_byte;
}


void I2C_write_Nbyte(unsigned char *pbuf, unsigned char cnt)
{
    unsigned char i = 0;
 I2C_Start();
 I2C_WriteByte(SLAVE_WRITE_ADDRESS);
 I2C_Read_Ack();
 for (i=0; i     {
  I2C_DELAY();I2C_DELAY();
  I2C_WriteByte(*pbuf);
  pbuf++;
  I2C_Read_Ack();
 }
 I2C_Stop();
}

void I2C_read_Nbyte(unsigned char *pbuf, unsigned char cnt)
{
    unsigned char i = 0;
 I2C_Start();
 I2C_WriteByte(SLAVE_READ_ADDRESS);
 I2C_Read_Ack();
 for (i=1; i     {
  I2C_DELAY();I2C_DELAY();
  *pbuf = I2C_ReadByte();
  pbuf++;
  I2C_Send_Ack();
 }
 *pbuf = I2C_ReadByte();
 I2C_Stop();
}

关键字:MSP430  普通I0口  模拟IIC总线 引用地址:MSP430普通I/0口模拟IIC总线

上一篇:STC不断电的下载方法
下一篇:Msp430时钟设计与寄存器说明

推荐阅读最新更新时间:2024-03-16 15:05

MSP430第十六章:看门狗
1. 介绍 看门狗定时器模块WDT_A的作用是在软件发生死机或跑飞后控制程序重启。当超过设定的时间而没有喂狗时,就会产生复位中断。如果不需要看门狗功能,可配置为普通定时器或者关闭。 8个可选定时时间 看门狗工作模式 定时器模式 带密码保护的控制寄存器 可选时钟源 允许关闭降低功耗 时钟故障保护 2. 看门狗操作 看门狗定时器模块可以配置为看门狗或普通定时器。WDTCTL是一个16位密码保护的读写寄存器。任何读或写访问都必须使用word指令,并且写访问必须使用密码05Ah。任何对WDTCTL的写操作,只要高字节的值不是05Ah,就会违反密码,并触发PUC系统重置。对WDTCTL的任何读取都是在高字节读取069h。字节读取WD
[单片机]
<font color='red'>MSP430</font>第十六章:看门狗
MSP430F149的IO
1 概述 MSP430F149共有6组IO口,每组8bit, IO口的设置包括设置IO功能、方向、输入输出寄存器初值。对IO口不做设置,默认情况下为第一功能,输入模式。 2 常用寄存器 PxDIR 0 输入,1 输出; PxSEL 0 I/O口,1 第二功能; PxOUT,PxIN; PxIES 设置中断触发方式 0上升沿,1下降沿; PxIE 设置中断触发允许0禁止,1允许; PxIFG 中断标志寄存器,需要软件清零。 3 用法 IO口中断: P1,P2口总共有16个IO口均能引发中断,相关寄存器为PXIE(中断允许):0不允许,1允许。PXIES(中断触发岩选择)0上升沿、1下降沿。PXIFG(中断标志寄存器),I0口
[单片机]
MSP430学习的第一个模拟I2C程序
#include msp430.h unsigned char I2CBUF; unsigned char checkbit; #define SCL_H (P10OUT |= BIT2) // P10.2为SCL #define SCL_L (P10OUT &= ~BIT2) #define SDA_H (P10OUT |= BIT1) //p10.1为SDA #define SDA_L (P10OUT &= ~BIT1) #define SDA_OUT (P10DIR |= BIT1) #define SDA_IN (P10DIR &= ~ BIT1) void I2C_Start(void) //I2C开
[单片机]
CAN智能节点的设计
摘要:CAN总线是一种流行的实时性现场总线,文中提出了一种基于MSP430单片机,并以MCP2510为CAN控制器的智能节点设计方案,该方案利用MSP430通过标准SPI接口可实现对MCP2510的控制,并能够完全实现CAN总线规范。 1 引言 CAN总线是控制器局域网(Controller Area Net-work)总线的简称,它属于现场总线范畴,是一种能有效支持分布式控制或实时控制的串行通信网络,它可将挂接在现场总线上作为网络节点的智能设备连接成网络系统,并进一步构成自动化系统,从而实现基本的控制、补偿、计算、参数修改、报警、显示、监控、优化及控管一体化的综合自动化功能。 CAN总线智能节点在分布式控制系统中起着承上
[单片机]
CAN智能节点的设计
MSP430系列单片机-读RAM数据烧写到Flash中
题目一 从RAM地址0x0200中读取一个long数据,并烧写至地址为0x1800的Flash中。 代码: #include io430.h void main(void) { //初始化RAM信息段的指针 unsigned long * RAM_ptr = (unsigned long *) 0x0200; //初始化Flash信息段的指针 unsigned long * Flash_ptr = (unsigned long *) 0x1800; //存放数据的变量 unsigned long value; WDTCTL = WDTPW + WDTHOLD; //关闭看
[单片机]
基于MSP430F149和nRF905的无线血氧指夹的设计
0 引言 血氧饱和度可以反映病人的呼吸功能,并在一定程度上反映动脉血氧的变化,故在临床监护和家庭监护中都具有重要意义。用常规多参数监护仪监护血氧饱和度时,通常用一个血氧指夹夹在手指端或者脚趾端来采集光电脉搏波信号,并通过一条线缆将信号传到监护设备进行处理和计算。由于线缆的影响,病人往往不便翻身,而且线缆容易脱落,造成测量结果错误,严重危害病人的及时抢救。单模块的血氧饱和度测量设备虽然便于携带,但由于其功耗较高,采用电池供电限制了监护的持续时间:一般此类设备只能将监护信息存储在设备内部,而无法把监护信息及时发送出去,耽误病人的抢救时间。为此,本文提出了一种基于射频芯片nRF905和超低功耗单片机MSP430F149的血氧饱和度指夹
[单片机]
基于<font color='red'>MSP430</font>F149和nRF905的无线血氧指夹的设计
MSP430停车位感应装置设计
硬件:MSP430f5529,光电传感器,数码管(共阴极) #include msp430f5529.h /*********************************************************************** 红外光电传感器输入信号到P2.0,模拟车的信号,当用手遮挡时输入高电平, 系统检测到上升沿,进入寄存器中断,P1.0灯亮,接着在寄存器中断中使能定时器的 捕获/比较寄存器(TA0CCTL0),定时器开始计时,数码管开始滚动数字,当把手挪开后, 传感器输入低电平,系统检测到下降沿,再次进入寄存器中断,P1.0取反,灯灭,接着 禁止定时器的捕获/比较寄存器(TA0CCTL0),定时
[单片机]
<font color='red'>MSP430</font>停车位感应装置设计
基于MSP430单片机的电子汽车限速器的研究
我国每年有数十万起交通事故发生,如果汽车限速器能够普及,将会降低交通事故发生率,从而挽回不必要的财产和生命损失。  与近期在市场上热销的电子狗产品相比,汽车限速器更具有主动规避事故的优势,电子狗只是在接近超速测试探头时才提醒驾驶者控制车速。汽车限速器通常分为两大类:一种是在车辆超速时发出语音警报,提醒驾驶者减速;另一种是在车辆超过限定速度后,通过车载电脑发出指令,强制控制车辆行驶速度。第1种限速器只起到警示作用,而第2种汽车限速器将更为有效地降低交通事故。因此,本文着重介绍了第2种限速器的实现原理及设计方法。 1 限速器实现原理 由于早期的汽车是没有限速功能的,所以在设计时要同时考虑到汽车出厂前安装与售出后安装两个不
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved