2037|2

10

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

msp430g2553的软件模拟 老是读出FF请各位大神帮一下忙 [复制链接]

#define CPU_F ((double)1000000)
#define delayus(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) //延时x微秒
#define delayms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) //延时x毫秒
#define uchar    unsigned char
#define uint     unsigned int
#define SDA_OUT  P1DIR|=BIT3
#define SDA_IN   P1DIR&=~BIT3
#define SDA_H    P1OUT|=BIT3
#define SDA_L    P1OUT&=~BIT3
#define SCL_OUT  P1DIR|=BIT4
#define SCL_IN   P1DIR&=~BIT4
#define SCL_H    P1OUT|=BIT4
#define SCL_L    P1OUT&=~BIT4
uint RXdata[1] = { 0x00 };
uint RXdata1[1] = { 0x00 };


/****************************
*初始化管脚
***************************/
void Port_Init() {
        P1DIR |= BIT3 + BIT4;
        SDA_OUT;
        SCL_OUT;
        SCL_H;
        SDA_H;
        SCL_L;
        SDA_L;
}
/******************************
*
* 开始IIC
*
*****************************/

void IIC_Start(void) {
        SCL_H;        //拉高
        SDA_H;        //拉高
        delayus(5);
        //建立起始条件4.7us
        SDA_L;        //产生下降沿发送起始信号
        delayus(5);
        //锁定起始信号
        SCL_L;        //等待数据
        delayus(5);
}
/**************************
*产生一个发送应答信号
*************************/
void IIC_WriteAck() {
        SDA_IN;
        SCL_OUT;
        delayus(1);

        SDA_L;
        delayus(5);
        SCL_H;
        delayus(5);
        SCL_L;
        delayus(5);
        delayus(10);
}
/*************************
* 产生一个接受应答信号
************************/
void IIC_SendNAck() {
        SDA_OUT;
        SCL_OUT;
        delayus(1);

        SDA_H;
        SCL_H;
        delayus(5);
        SCL_L;
        SDA_L;
        delayus(5);
        delayus(10);

}

/*****************************
*
* 停止IIC
*
*****************************/

void IIC_Stop() {
        SDA_OUT;
        SCL_OUT;
        delayus(1);
        SDA_L;
        delayus(5);
        SCL_H;
        delayus(5);
        SDA_H;
        delayus(5);
}
/*****************************
* 发送一个字节
*****************************/
void IIC_Write_One_Byte(uint TxData) {

        uint i = 0;
        for (i = 0; i < 8; i++) {
                if (TxData & 0x80)
                        SDA_H;
                else
                        SDA_L;
                TxData <<= 1;
                SCL_H;                  //时钟上升沿发送数据有效
                delayus(5);
                SCL_L;
                delayus(5);
        }
        SDA_OUT;
}

/**************************
*
* 读取一个字节
*
***************************/

void IIC_Read_One_Byte(uint *Data) {
        uint i = 0, data = 0;
        SDA_IN;
        for (i = 0; i < 8; i++) {
                data <<= 1;
                SCL_H;
                delayus(3);
                if (P1IN & BIT3) {
                        data |= 0x01;
                } else {
                        data &= 0xFE;
                }
                delayus(1);
                SCL_L;
                delayus(5);
        }
        SDA_OUT;                //接收结束的时候还要吧SDA的方向切换过来
        Data[0] = data;
}

此帖出自51单片机论坛

最新回复

过来学习学习~~~~~~~~~~~~~~~~~~~~  详情 回复 发表于 2014-10-10 15:21
点赞 关注
 

回复
举报

1119

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
过来学习学习~~~~~~~~~~~~~~~~~~~~
此帖出自51单片机论坛

点评

终于改好了  详情 回复 发表于 2014-10-15 14:26
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
kemasz 发表于 2014-10-10 15:21
过来学习学习~~~~~~~~~~~~~~~~~~~~

终于改好了
此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表