找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1879|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机18B20串口发、收源码

[复制链接]
跳转到指定楼层
楼主
基于51单片机的程序,作用是通过串口发送18B20采集的数据到另外个51单片机,并在这个单片机接收数据,通过1602显示温度


单片机源程序如下:

  1. /***************发送***********/
  2. #include <reg51.h>
  3. #include <intrins.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. #define uchar unsigned char                                    
  7. uchar wendu1[]={0,0,0x2e,0};
  8. sbit DQ= P2^5;
  9. void delay1820(uint n)
  10. {
  11.     do
  12.     {
  13.         _nop_ (); //01
  14.         _nop_ (); //02
  15.         _nop_ (); //13
  16.         _nop_ (); //01
  17.         _nop_ (); //02
  18.         _nop_ (); //01
  19.         _nop_ (); //02
  20.         n--;
  21.     }
  22.         while(n);
  23. }

  24. void delay(uint z)        //ms
  25. {
  26.         uint x,y;
  27.         for(x=z;x>0;x--);
  28.             for(y=110;y>0;y--);
  29. }

  30. uchar rst(void)//通知 1820           
  31. {
  32.     uchar present;
  33.     DQ=1;
  34.     delay1820(3);
  35.     DQ = 0;   
  36.     delay1820(32);//480us
  37.     DQ = 1;
  38.     delay1820(1);
  39.     present=DQ;  
  40.     delay1820(20);
  41.     DQ=1;
  42.     return(present);
  43. }

  44. unsigned int read(void)              
  45. {
  46.     int i=0;
  47.     unsigned int u=0;
  48.     for (i=0;i<16;i++)
  49.     {
  50.         u>>=1;                                                                  
  51.         DQ=0;                            
  52.         _nop_();//1us
  53.         DQ=1;
  54.         if(DQ) u|=0x8000;
  55.         delay1820(5);
  56.     }
  57.     return(u);
  58. }

  59. void write(unsigned char dat)         
  60. {  
  61.     int i=0;

  62.     for (i=0;i<8;i++)
  63.     {
  64.         DQ=0;
  65.         _nop_();
  66.             _nop_();
  67.         DQ=dat&0x01;
  68.         delay1820(5);
  69.         DQ=1;
  70.         dat>>=1;
  71.     }
  72.     delay1820(5);
  73. }

  74. void read1820(void)                 
  75. {   
  76.     uint t1, t2;
  77.     char flag;
  78.     uint twendu1;
  79.     long float lsb;
  80.     rst();
  81.     write(0xcc);
  82.     write(0x44);
  83.     rst();
  84.         write(0xcc);
  85.     write(0xBE);
  86.     twendu1=read();            
  87.     if((twendu1&0xf800)==0xf000)
  88.     {
  89.               twendu1=(~twendu1)+1;
  90.         flag=1;
  91.     }
  92.     lsb=(twendu1&0X07FF)*0.0625;
  93.     t1=lsb*10;
  94.     wendu1[0]=0x30+t1%1000/100;
  95.     t2= t1%100;
  96.     wendu1[1]=0x30+t2%100/10;
  97.     wendu1[3]=0x30+t2%10;       
  98. }  
  99.        
  100. /*********串口通讯部分************/
  101. void chuankou_init()
  102. {     
  103.     SCON=0x50;                                    //串口初始化,设置其工作在方式一,为接收状态
  104.         PCON=0x00;                                    //选用11.0592MHZ晶振,波特率为9600bps
  105.     TMOD=0x20;
  106.     TH1=0xfd;
  107.     TR1=1;
  108.     EA=1;                                                     //开中断
  109.     ES=1;
  110. }

  111. void send(uchar ch)
  112. {           
  113.     SBUF=ch;
  114.     while (TI==0);
  115.     TI= 0 ;
  116.     delay(10);
  117. }

  118. char a;
  119. char flag;
  120. uchar wen;
  121. void main()
  122. {  
  123.     rst();
  124.     chuankou_init();
  125.     while(1)
  126.     {         
  127.         read1820();
  128.         if(flag==0x0a)
  129.                 {
  130.                 for(wen=0;wen<4;wen++)
  131.                 {
  132.                     send(wendu1[wen]);
  133.                 }
  134.                 flag=0x0c;  
  135.         }
  136.     }
  137. }

  138. void ser()interrupt 4
  139. {   
  140.     if(RI)
  141.     {
  142.             RI=0;
  143.         flag=SBUF;
  144.         }       
  145. }
复制代码

所有资料51hei提供下载:
基于51的18B20温度串口发、收程序并102显示.zip (42.13 KB, 下载次数: 33)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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