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

📄 send.lst

📁 个人单片机入门程序集合 。很适合刚学单片机的人。用的是keil proteus
💻 LST
字号:
C51 COMPILER V8.02   SEND                                                                  08/18/2007 07:17:33 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          
   7          sbit DQ =P2^0;   //定义通信端口
   8          sbit  rt=P1^0;          //收发选择端口
   9          sbit  enable=P1^7; //定义模块使能端
  10          void delay1(unsigned int i)
  11          {
  12   1       while(i--);
  13   1      }
  14          
  15          
  16          reset(void)
  17          {
  18   1         unsigned char x=0;
  19   1         DQ = 1;    //DQ复位
  20   1         delay1(8);  //稍做延时
  21   1         DQ = 0;    //单片机将DQ拉低
  22   1         delay1(80); //精确延时 大于 480us
  23   1         DQ = 1;    //拉高总线
  24   1         delay1(14);
  25   1         x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
  26   1         delay1(20);
  27   1      }
  28          
  29          
  30          
  31          //读一个字节
  32          unsigned char read_byte(void)
  33          {
  34   1        unsigned char i=0;
  35   1        unsigned char dat = 0;
  36   1        for (i=8;i>0;i--)
  37   1        {
  38   2           DQ = 0; // 给脉冲信号
  39   2           dat>>=1;
  40   2           DQ = 1; // 给脉冲信号
  41   2           if(DQ)
  42   2              dat|=0x80;        /*LSB to MSB*/
  43   2           delay1(4);
  44   2         }
  45   1         return(dat);
  46   1      }
  47          
  48          
  49          
  50          //写一个字节
  51          write_byte(unsigned char dat)
  52          {
  53   1         unsigned char i=0;
  54   1         for (i=8; i>0; i--)
  55   1         {
C51 COMPILER V8.02   SEND                                                                  08/18/2007 07:17:33 PAGE 2   

  56   2            DQ = 0;
  57   2            DQ = dat&0x01;
  58   2            delay1(5);
  59   2            DQ = 1;
  60   2            dat>>=1;
  61   2         }
  62   1      }
  63          
  64          
  65          
  66          
  67          
  68          //读取温度
  69          unsigned char read_temperature(void)
  70          {
  71   1         unsigned char a=0;
  72   1         unsigned char b=0;
  73   1      
  74   1         reset();
  75   1         write_byte(0xCC); // 跳过读序号列号的操作
  76   1         write_byte(0x44); // 启动温度转换
  77   1         reset();
  78   1         write_byte(0xCC); //跳过读序号列号的操作
  79   1         write_byte(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
  80   1         a=read_byte();
  81   1         b=read_byte();
  82   1         xstemp=a&0x0f;
  83   1         b=b<<4;
  84   1         a=a>>4;
  85   1      
  86   1      return(a|b);
  87   1      }
  88          
  89          unsigned char read_temperature_dec(void)  //读入小数
  90          {
  91   1         unsigned char a=0;
  92   1         reset();
  93   1         write_byte(0xCC); // 跳过读序号列号的操作
  94   1         write_byte(0x44); // 启动温度转换
  95   1         reset();
  96   1         write_byte(0xCC); //跳过读序号列号的操作
  97   1         write_byte(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
  98   1         a=read_byte();
  99   1         xstemp=a&0x0f;
 100   1        return(xstemp);
 101   1      }
 102          senddata(unsigned char dat)     //串口发送数据
 103          {SBUF=dat;
 104   1       while(TI==0);
 105   1       TI=0;
 106   1      }
 107          
 108          serial_init()             //串口初始化
 109          {
 110   1       SCON=0X50;         /* SCON: 串口方式1, 8位异步通信,接收使能*/ 
 111   1       TMOD=0x20;        /*波特率发生需用定时器1:TMOD: 定时器1, 8位自动重装 */
 112   1       PCON=0x80;        //双倍时钟
 113   1       TH1=0xfd;         /* TH1:自动重装值,19200baud ,晶振11.0592MHz */ 
 114   1       TL1=0xfd; 
 115   1       TR1=1;           /* TR1:启动定时器1 */ 
 116   1       //ES=1;
 117   1       //EA=1;
C51 COMPILER V8.02   SEND                                                                  08/18/2007 07:17:33 PAGE 3   

 118   1      }
 119          
 120          send_temperature()    //发送温度
 121          {
 122   1        uchar inte,dec;        
 123   1        inte = read_temperature();     //整数部分温度
 124   1        dec = read_temperature_dec();  //小数部分温度
 125   1       
 126   1        senddata(1);
 127   1        senddata(dec);
 128   1        senddata(0);                   //发送标志,0表示后面是整数,1表示后面是小数
 129   1        senddata(inte);
 130   1        
 131   1        delay1(100);
 132   1       }
 133          main() 
 134          { 
 135   1        
 136   1      serial_init();             //串口初始化
 137   1      enable=0;           //使模块工作
 138   1      rt=0; 
 139   1                         //发送使能 0发送,1接收
 140   1      while(1)
 141   1         {
 142   2           send_temperature() ;   //发送温度
 143   2           
 144   2          }
 145   1      }
 146          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    250    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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