实现功能:MSP430通过DS18B20采集到温度信息,并通过串口发送到CC2540,CC2540中写入主从一体程序,另一只CC2540作为主机连接上位机,通过串口将接收到的温度信息透传给上位机。
源码: CC2540主从一体+MSP430DS18B20源码.rar
1.CC2540主从一体串口透传配置
连接流程
- 主从机通过数据线连接电脑,打开串口调试助手,波特率设置9600,数据位8,停止位1校验none,选中发送新行
- 输入AT,如果应答OK,代表CC2540与上位机连接成功
- 刷写程序后,默认都是从机,可通过AT+ROLE?查询,返回结果为OK+Get:其后跟1为主设备,跟0为从设备,通过AT+ROLE2指令配置为从机,应答结果为OK+Set0
- 主机可使用AT+ROLE1指令配置为主机,应答结果为OK+Set1
- 从机端通过AT+ADDR查询从机MAC地址,记录下来
- 主机端通过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)