⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 send.lst

📁 温度遥测系统程序,半双工的,已经调试成功了
💻 LST
字号:
C51 COMPILER V8.02   SEND                                                                  08/23/2007 13:37:02 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE SEND
OBJECT MODULE PLACED IN send.OBJ
COMPILER INVOKED BY: D:\SOFTWARE\uv3\C51\BIN\C51.EXE send.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include   <reg51.h>
   2          #include   <intrins.h>
   3          #define uint unsigned int
   4          #define uchar unsigned char
   5          uchar  xstemp;
   6          uchar  tll=0;
   7          uchar  thh=50;
   8          uchar inte,dec;
   9          
  10          
  11          sbit DQ =P2^0;     //定义通信端口
  12          sbit  rt=P1^0;          //收发选择端口
  13          sbit  busy=P1^1;                //收发忙标志
  14          sbit  enable=P1^7; //定义模块使能端
  15          sbit beep=P1^3;
  16          bit send_flag;
  17          
  18          
  19          void delay1(unsigned int i)
  20          {
  21   1       while(i--);
  22   1      }
  23          
  24          
  25          reset(void)
  26          {
  27   1         unsigned char x=0;
  28   1         DQ = 1;    //DQ复位
  29   1         delay1(8);  //稍做延时
  30   1         DQ = 0;    //单片机将DQ拉低
  31   1         delay1(80); //精确延时 大于 480us
  32   1         DQ = 1;    //拉高总线
  33   1         delay1(14);
  34   1         x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
  35   1         delay1(20);
  36   1      }
  37          
  38          
  39          
  40          //读一个字节
  41          unsigned char read_byte(void)
  42          {
  43   1        unsigned char i=0;
  44   1        unsigned char dat = 0;
  45   1        for (i=8;i>0;i--)
  46   1        {
  47   2           DQ = 0; // 给脉冲信号
  48   2           dat>>=1;
  49   2           DQ = 1; // 给脉冲信号
  50   2           if(DQ)
  51   2              dat|=0x80;        /*LSB to MSB*/
  52   2           delay1(4);
  53   2         }
  54   1         return(dat);
  55   1      }
C51 COMPILER V8.02   SEND                                                                  08/23/2007 13:37:02 PAGE 2   

  56          
  57          
  58          
  59          //写一个字节
  60          write_byte(unsigned char dat)
  61          {
  62   1         unsigned char i=0;
  63   1         for (i=8; i>0; i--)
  64   1         {
  65   2            DQ = 0;
  66   2            DQ = dat&0x01;
  67   2            delay1(5);
  68   2            DQ = 1;
  69   2            dat>>=1;
  70   2         }
  71   1      }
  72          
  73          
  74          
  75          
  76          
  77          //读取温度
  78          unsigned char read_temperature(void)
  79          {
  80   1         unsigned char a=0;
  81   1         unsigned char b=0;
  82   1      
  83   1         reset();
  84   1         write_byte(0xCC); // 跳过读序号列号的操作
  85   1         write_byte(0x44); // 启动温度转换
  86   1         reset();
  87   1         write_byte(0xCC); //跳过读序号列号的操作
  88   1         write_byte(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
  89   1         a=read_byte();
  90   1         b=read_byte();
  91   1         xstemp=a&0x0f;
  92   1         b=b<<4;
  93   1         a=a>>4;
  94   1      
  95   1      return(a|b);
  96   1      }
  97          
  98          unsigned char read_temperature_dec(void)  //读入小数
  99          {
 100   1         return(xstemp);
 101   1      }
 102          
 103          
 104          senddata(unsigned char dat)     //串口发送数据
 105          {SBUF=dat;
 106   1       while(TI==0);
 107   1       TI=0;
 108   1      }
 109          
 110          
 111          
 112          
 113          send_temperature()    //发送温度
 114          {
 115   1              
 116   1        inte = read_temperature();     //整数部分温度
 117   1        dec = read_temperature_dec();  //小数部分温度
C51 COMPILER V8.02   SEND                                                                  08/23/2007 13:37:02 PAGE 3   

 118   1       
 119   1        senddata(0xfe);
 120   1        senddata(dec);
 121   1        senddata(0xff);                   //发送标志,0xff表示后面是整数,0xfe表示后面是小数
 122   1        senddata(inte);
 123   1        send_flag=0;
 124   1        delay1(100);
 125   1       }
 126          
 127          
 128           serial_init()             //串口初始化
 129          {
 130   1       SCON=0X50;         /* SCON: 串口方式1, 8位异步通信,接收使能*/ 
 131   1       TMOD=0x20;        /*波特率发生需用定时器1:TMOD: 定时器1, 8位自动重装 */
 132   1       PCON=0x80;        //双倍时钟
 133   1       TH1=0xfd;         /* TH1:自动重装值,19200baud ,晶振11.0592MHz */ 
 134   1       TL1=0xfd; 
 135   1       TR1=1;           /* TR1:启动定时器1 */ 
 136   1       EA=1;
 137   1       ES=1;
 138   1       
 139   1      }
 140          
 141          void receivedata()  interrupt 4  using 1//接收中断
 142          {  uchar temp;     
 143   1         static bit flag_thh=0,flag_tll=0; //整数部分和小数部分的标志
 144   1         temp=SBUF;
 145   1                if(flag_thh==1)
 146   1           {
 147   2                thh=temp;              //接收温度上限部分
 148   2            flag_thh=0;           //  清除温度上限标志
 149   2                 
 150   2           }
 151   1           if(flag_tll==1)
 152   1           {
 153   2                tll=temp;              //接收温度下限部分
 154   2            flag_tll=0;           //  清除温度下限标志
 155   2                 
 156   2           }
 157   1           
 158   1         if(temp==0xfd) flag_thh=1; //表示下面发送的是温度上限部分
 159   1               
 160   1               
 161   1         if(temp==0xfc) flag_tll=1;  //表示下面发送的是温度下限部分
 162   1         
 163   1        
 164   1         RI=0;                  //清除中断标志          
 165   1        
 166   1         
 167   1      }
 168          
 169          
 170          main() 
 171          { 
 172   1        
 173   1      serial_init();             //串口初始化
 174   1      enable=0;           //使模块工作
 175   1      //rt=0; 
 176   1                         //发送使能 0发送,1接收
 177   1      while(1)
 178   1         {
 179   2          
C51 COMPILER V8.02   SEND                                                                  08/23/2007 13:37:02 PAGE 4   

 180   2                      
 181   2                     if(inte<tll||inte>=thh)
 182   2                      beep=0;
 183   2                     else if(inte>=tll&&inte<thh)
 184   2                           beep=1;
 185   2                               
 186   2                              if(send_flag==1)
 187   2                               send_temperature();   //发送温度 
 188   2                               delay1(20000);  //适当延时,使其进入串口中断
 189   2                               send_flag=1;
 190   2                      
 191   2                               
 192   2         }
 193   1      }
 194          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    319    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      5    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      3    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -