找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2827|回复: 1
收起左侧

获取DS18B20序列号的单片机源代码

[复制链接]
ID:237586 发表于 2017-10-7 18:11 | 显示全部楼层 |阅读模式
1、获取DS18B20序列号,接多个DS18B20必用。
2、获取后,通过串口发送给串口助手。
3、接线图见附件。

接线图

接线图



单片机源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>

  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. sbit DS=P3^7;           //定义DS18B20接口
  6.    
  7. uchar SN[8];  //获取8组序列号,每组为2位16进制数

  8. void delay();//延时子函数,5个空指令
  9. void tmpwritebyte(uchar dat);
  10. uchar tmpread(void);
  11. bit tmpreadbit(void);
  12. void dsreset(void);
  13. void delayb(uint count);
  14. void readrom();

  15. void main()               //主函数
  16. {
  17.         uchar i;
  18.         TMOD=0x20;
  19.         TH1=0xE8;
  20.         TL1=0xE8;   //1200波特
  21.         PCON=0x00;
  22.         SCON=0x50;        //串口的工作方式,设置为方式1
  23.         TR1=1;
  24.         EA=1;       
  25.         ES=1;                //打开串口中断
  26.         readrom();
  27.         for(i=0;i<8;i++) //向PC发送得到的8组序列号,PC可采用串口软件接受
  28.         {       
  29.                 SBUF=SN[i];
  30.                 while(!TI){}
  31.                 TI=0;
  32.         }
  33.         while(1){}
  34. }

  35. void delay(void)                                                                //空5个指令
  36. {
  37.         _nop_();_nop_();_nop_();_nop_();_nop_();
  38. }

  39. void delayb(uint count)      //delay
  40. {
  41.   uint i;
  42.   while(count)
  43.   {
  44.     i=200;
  45.     while(i>0)
  46.     i--;
  47.     count--;
  48.   }
  49. }


  50. void dsreset(void)       //DS18B20初始化
  51. {
  52.   uint i;               
  53.   DS=0;
  54.   i=103;
  55.   while(i>0)i--;
  56.   DS=1;
  57.   i=4;
  58.   while(i>0)i--;
  59. }


  60. bit tmpreadbit(void)       // 读一位
  61. {
  62.    uint i;
  63.    bit dat;
  64.    DS=0;i++;          //小延时一下
  65.    DS=1;i++;i++;
  66.    dat=DS;
  67.    i=8;while(i>0)i--;
  68.    return (dat);
  69. }


  70. uchar tmpread(void)   //读一个字节
  71. {
  72.   uchar i,j,dat;
  73.   dat=0;
  74.   for(i=1;i<=8;i++)
  75.   {
  76.     j=tmpreadbit();
  77.     dat=(j<<7)|(dat>>1);   //读出的数据最低位在最前面,这样刚好//一个字节在DAT里
  78.   }
  79.   return(dat);             //将一个字节数据返回
  80. }


  81. void tmpwritebyte(uchar dat)   
  82. {                           //写一个字节到DS18B20里
  83.   uint i;
  84.   uchar j;
  85.   bit testb;
  86.   for(j=1;j<=8;j++)
  87.   {
  88.     testb=dat&0x01;
  89.     dat=dat>>1;
  90.     if(testb)     // 写1部分
  91.     {
  92.       DS=0;
  93.       i++;i++;
  94.       DS=1;
  95.       i=8;while(i>0)i--;
  96.     }
  97.     else
  98.     {
  99.       DS=0;       //写0部分
  100.       i=8;while(i>0)i--;
  101.       DS=1;
  102.       i++;i++;
  103.     }
  104. ……………………

  105. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
DS18B20_SN.rar (20.65 KB, 下载次数: 58)
回复

使用道具 举报

ID:481163 发表于 2020-5-11 16:23 | 显示全部楼层
楼主我测验这个程序为什么不行呢,请教一下
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表