单片机入门学习单片通信协议学习笔记....更新中

单片机各类通信协议

——来自于bilbil金善愚老

一、1-wire单总线

概述: 采用单根信号线既传输时钟又传输数据且数据传输是双向的。(单总线器件芯片有编制唯一的序列号(芯片通信地址))

适用范围 :单个主机系统,能够控制一个或多个从机设备。当只有一个从机设备位于总线上时,系统可按照单节点系统操作;而当多个从机位于总线上时,系统按照多节点系统操作。通信时序要求严格,看情况需不需要关闭中断,传输模式通常16.3kb/s,超速达142kb/s,传输速度较慢只能用于传输速度要求不高的场合,一般用于100kb/s以下速率的系统。

多个单总线芯片通信区分哪个芯片:

芯片家族码可去查固定的。

单总线的基本操作:

DS18b20为例)其他芯片单总线底层都一样

 

单总线时序:

   1.复位

      

程序:

 ( !DS18b20含义为当DS10B20 == 0时成立)ack为0时说明有单总线芯片,1时没有

 2.写一位操作

        一般来说程序会直接写8位,也就是一个字节

 程序:

     DS18b20传输数据时,低位在前,高位在后.循环tmp用0x01(左移1位);若是高位在前,低位在后,用0x80(右移1位).

   按照时序图,需判断数据的每一位是写1 还是写0,间隙为2us。If判断就是写1还是写0

 3.读一位操作

主机拉低2us,后可以主动释放总线(也可以不释放,安全起见释放),从机的数据若是0则会拉低,若是1则会拉高。 从机会把数据放在总线上让主机读取.

程序:

 Unsigned char ReadOneWire()

{             unsigned char dat;

}

——以上代码均为单总线底层通信协议

以下以DS18b20温度传感器芯片为例,通信读取温度

一般对单总线的器件进行读写操作时,一般分为3步:

  1. 初始化 总线,判断有无单总线器件,返回0 有 /1 无
  2. 发Rom指令 (区分与哪个芯片通信,若只有一个器件,可发跳过Rom命令)(若总线上有多个芯片,则匹配Rom指令法,搜索寻找法)
  3. 发送控制字节命令(读或写操作)

注意 :每次执行读或写操作,都要进行以上3步!!!不遵守则无法通信

 程序基于蓝桥杯stc15单片机和2023年官方提供的单总线底层驱动代码

float rd_temperature_f(void)
{
    unsigned int temp=0;
    float temperature=0;
    unsigned char low,high;
  
   init_ds18b20();
   Write_DS18B20(0xCC);
   Write_DS18B20(0x44); //
   Delay_OneWire(200);
	
   init_ds18b20();
   Write_DS18B20(0xCC);
   Write_DS18B20(0xBE); //

   low = Read_DS18B20(); //
   high = Read_DS18B20(); //

  temp = (high&0x0f);
  temp <<= 8;
  temp |= low;
  temperature = temp*0.0625;
  
   return temperature;
}


 

  

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

满目学习.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值