MSP430+DS18B20+CC2540

该博客介绍了如何利用MSP430微控制器通过DS18B20采集温度数据,并通过CC2540无线模块进行串口透传到上位机。详细阐述了CC2540的主从配置、DS18B20的工作流程和MSP430的UART通信。源码包含CC2540与MSP430配合DS18B20的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现功能:MSP430通过DS18B20采集到温度信息,并通过串口发送到CC2540,CC2540中写入主从一体程序,另一只CC2540作为主机连接上位机,通过串口将接收到的温度信息透传给上位机。

源码: CC2540主从一体+MSP430DS18B20源码.rar

1.CC2540主从一体串口透传配置

连接流程

  1. 主从机通过数据线连接电脑,打开串口调试助手,波特率设置9600,数据位8,停止位1校验none,选中发送新行
  2. 输入AT,如果应答OK,代表CC2540与上位机连接成功
  3. 刷写程序后,默认都是从机,可通过AT+ROLE?查询,返回结果为OK+Get:其后跟1为主设备,跟0为从设备,通过AT+ROLE2指令配置为从机,应答结果为OK+Set0
  4. 主机可使用AT+ROLE1指令配置为主机,应答结果为OK+Set1
    在这里插入图片描述
  5. 从机端通过AT+ADDR查询从机MAC地址,记录下来
  6. 主机端通过AT+CON后面跟从机的MAC地址,实现主从互连。上位机收到应答OK+CONNA表示连接中,初次连接时间约3s,之后会自动连接,连接速度非常快,时间长度未测量。主从连接后,将实现透传功能,此时AT指令失效。主机记录与从机的连接后,如果需要连接新的从机,需要在主机端用AT+CLEAR指令清除主设备配对信息。
    在这里插入图片描述
    在这里插入图片描述

PS

  • 通过指令AT+BAUD其后跟0~4配置波特率,默认为9600。

  • 通过AT+MODE其后跟0或1设置工作模式,0为开启串口透传,1为关闭串口透传,默认是开启的。

  • 从机端通过AT+IMME?查询工作类型,通过AT+IMME后跟0或1设置工作类型,0表示立即工作,1表示等待AT+CON或AT+CONNL命令,AT+CONNL表示连接最后一次连接的从设备。

  • 主从机端可通过AT+TYPE1指令和AT+PASS其后跟6位密码设置配对密码,如此只有密码配对成功的两个主从机可互连。此功能未测试。
    在这里插入图片描述
    在这里插入图片描述

  • 通过AT+TCON其后跟6位数字设置主机尝试连接时间,该时间是主机上电后进行连接尝试的时间,超时后会进入自动搜索状态。该时间单位为ms,不可设置太小,否则会影响模块正常工作。

  • 其他功能未测试。


2.DS18B20

参考链接:
1.DS18B20视频教程
2.DS18B20教程优快云
3.MSP430L单片机系列入门

总结DS18B20的工作流程:

1.初始化(每次读写操作前都要进行初始化)
2.主机向DS18B20发送ROM指令0xCC,跳过ROM地址,直接发温度变换指令
在这里插入图片描述
3.初始化
4.主机向DS18B20发送存储器指令0x44,启动DS18B20温度转换,注意转换需消耗200ms典型值的时间
在这里插入图片描述
5.初始化
6.主机向DS18B20发送存储器指令0xBE,此时可逐位读取RAM中的温度数据,注意是先读低8位,后读高8位

DS18B20工作阶段细节分析

本实验中将DS18B20单总线输出端接到了MSP430的P1.7脚。

1.初始化

初始化时序:
在这里插入图片描述
主机首先发出一个最少480微秒的低电平脉冲,然后释放总线变为高电平,并在随后的480微秒时间内对总线进行检测,如果有低电平出现说明总线上有器件已做出应答。若无低电平出现一直都是高电平说明总线上无器件应答。

做为从器件的DS18B20在一上电后就一直在检测总线上是否有至少480微秒的低电平出现,如果有,在总线转为高电平后等待15-60微秒后将总线电平拉低60-240微秒做出响应存在脉冲,告诉主机本器件已做好准备。若没有检测到就一直在检测等待。

MSP430源码如下:(Error返回值后面要用到)

unsigned char Init_18B20(void)
{
   
   
    unsigned char Error;
   
    _DINT();
    
    DQ0;//拉低总线
    DelayNus(500);//延迟500us
    DQ1;//释放总线
    DelayNus(55);//延迟55us
    P1DIR &=~ BIT7;//将P1.7设置为输入,
    _NOP();//延迟1us
    
    if(P1IN & BIT7)      //DS18B20未将总线拉低,初始化失败
    {
   
   
        Error = 1;          
        P1DIR |= BIT7;
    }
    else                //DS18B20将总线拉低,初始化成功
    {
   
   
        Error = 0;          
        P1DIR |= BIT7; //将P1.7设置为输出
        DQ1;           //释放总线
    }
    
    _EINT();
    
    DelayNus(400)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值