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

📄 hehe.lst

📁 该程序解决了单片机c语言中时序要求严格的问题,已经调试通过
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   HEHE                                                                  01/10/2006 11:16:02 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE HEHE
OBJECT MODULE PLACED IN hehe.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\Bin\c51.exe hehe.c DB SB OE ROM(LARGE) SMALL OT(6,SPEED) WL(2) RB(0)

line level    source

   1          #include<reg52.h>
   2          #include<absacc.h>
   3          #include<intrins.h>
   4          
   5          #define unit unsigned int
   6          #define uchar unsigned char
   7          #define FALSE 0
   8          #define TRUE 1
   9          #define DS18B20MAX 10
  10          
  11          sbit LED=P1^6;
  12          sbit DQ=P1^7;
  13          
  14          uchar ROMID[8]={0x28,0xCB,0x81,0xC2,0x00,0x00,0x00,0x41};     
  15                                                                          // 该DS18B20的ROMID是 28 CB 81 C2 00 00 00 41
  16          uchar scratchPad[9];
  17          uchar TH=0x64;                                  // 温度监测系统设定的温度报警上限值
  18                                                                          // 0 1100100 设为100摄氏度
  19          uchar TL=0xd8;                                  // 温度监测系统设定的温度报警下限值
  20                                                                          // 1 1011000 设为零下40摄氏度
  21          uchar confgReg=0x3f;                    // 温度监测系统设定的配置寄存器数据值
  22                                                                          // 0 01 111111 分辨率为10位,最大转换时间187.5秒
  23          void initial(void)
  24          {
  25   1              IE=0x00;
  26   1          TMOD=0x20;
  27   1          PCON=0x00;
  28   1          SCON=0x40;
  29   1          TH1=0xfd;
  30   1          TL1=0xfd;
  31   1          LED=1;
  32   1         
  33   1          
  34   1      }
  35          
  36              
  37          void delay_1s(void)
  38          {
  39   1              unsigned char i;
  40   1              unsigned int j;
  41   1              for(i=0;i<250;i++)
  42   1                for(j=0;j<672;j++);
  43   1      }  
  44          
  45          
  46          void delay(int time)                    // 延时子程序
  47          {                                                               // 系统采用的是11.059MHz的晶振,所以该延时程序产生16*time+24μs 的延时
  48   1              int     i;
  49   1              for(i=0;i<time;i++);
  50   1      }
  51          
  52          
  53          bit bus_reset(void)             // 产生单总线系统的总线复位信号,并返回总线上是否存在单总线器件信息
  54          {                                                               // 若返回0表明总线上存在单总线器件,若返回1表明总线上不存在单总线器件
  55   1              bit presence;
C51 COMPILER V7.50   HEHE                                                                  01/10/2006 11:16:02 PAGE 2   

  56   1              DQ=0;                                           // 拉低DQ总线开始复位
  57   1              delay(28);                                      // 保持DQ低480μs
  58   1              DQ=1;                                           // 释放DQ
  59   1              delay(5);                       // 等待大于60us,等待从设备将总线拉低,如果有从设备就拉低,否则就是高电平
  60   1              presence=DQ;                            // 获取应答信号
  61   1              delay(25);                                      // 等待总线初始化过程结束
  62   1              return(presence);                       // 返回应答信号,有芯片应答presence=0
  63   1                                              // 无芯片应答presence=1
  64   1      }
  65          
  66          
  67          bit read_bit(void)                              // 从总线上读取一个数据位
  68          {
  69   1              DQ=0;                                           // 将总线DQ拉低启动读时隙                                       
  70   1              DQ=1;                                           // 释放DQ信号线,等待从机返回数据位
  71   1              _nop_();                    // 延时4μs再读数据
  72   1              _nop_();
  73   1              _nop_();
  74   1              _nop_();
  75   1              return DQ;  
  76   1              
  77   1      }
  78          
  79          
  80          uchar read_byte(void)           // 从单总线上读取一个字节
  81          {
  82   1              uchar i;
  83   1              uchar value=0;                          // 将返回值初始化为0
  84   1              for(i=0;i<8;i++)
  85   1              {
  86   2                      if(read_bit())
  87   2                              value|=0x01<<i;         // 读一字节数据,一个读时序中读一位,并做移位处理
  88   2                              
  89   2                      delay(3);                               // 延时60μs以完成此次读时序,之后再读下一位数据
  90   2              }
  91   1              return(value);
  92   1      }
  93          
  94          
  95          void write_bit(uchar bitval)    // 向单总线上写一个数据位
  96          {
  97   1              DQ=0;                                           // 拉低DQ以开始一个写时序
  98   1              if(bitval==1)
  99   1                      DQ=1;                                   // 如要写"1"则将总线置高
 100   1              delay(3);                                       // 延时60μs供DS18B20采样
 101   1              DQ=1;                                           // 释放DQ总线
 102   1              
 103   1      }
 104          
 105          
 106          void write_byte(uchar val)              // 向单总线上写一个数据字节
 107          {
 108   1              uchar i;
 109   1              uchar temp=0;                           // 将返回值初始化为0
 110   1              for(i=0;i<8;i++)                        // 写一字节数据,一次写一位
 111   1              {
 112   2                      temp=val>>i;                    // 移位操作,将本次要写的位移到最低位
 113   2                      temp&=0x01;
 114   2                      write_bit(temp);                // 向总线写该位
 115   2              }
 116   1              delay(5);                       // 等待时隙结束
 117   1      }
C51 COMPILER V7.50   HEHE                                                                  01/10/2006 11:16:02 PAGE 3   

 118          
 119          /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  * * * * * * */
 120          
 121          uchar send_matchRom()                                           // 系统主机向总线发出匹配ROM命令
 122          {                                                                                       // ROM ID是编号为DS18B20No的温度传感器的ROM序列号
 123   1              uchar i;
 124   1              write_byte(0x55);                                               // 向总线写匹配命令0x55
 125   1              for(i=0;i<8;i--)                                                // 连续写入8个字节的ROMID
 126   1              {
 127   2                      write_byte(ROMID[i]);                           // 向总线写ROMID的第i个字节
 128   2              }
 129   1              return TRUE;    
 130   1      }       
 131                  
 132          
 133          /*void read_scratchPad(uchar DTNo)              // 系统主机从指定的DS18B20中读取便笺存储器的所有字节
 134          {                                                                               // 读取的结果放到全局变量scratchPad[9]中
 135                  uchar i;
 136                  send_matchRom(DTNo);                            // 向总线发出匹配ROM命令,使编号为DTNo的器件处于选中状态
 137                  write_byte(0xBE);                                       // 向总线发出读便笺存储器命令
 138                  for(i=0;i<9;i++)                                        // 连续读入9个字节的便笺存储器单元
 139                  {
 140                          scratchPad[i]=read_byte();              // 从总线读取1个字节存入scratchPad[i]
 141                  }
 142                  
 143          }*/
 144          
 145          
 146          void write_scratchPad()         // 系统主机向指定的DS18B20中写入TH、TL及配置寄存器数据
 147          {
 148   1              send_matchRom();                                // 向总线发出匹配ROM命令,使编号为DTNo的器件处于选中状态
 149   1              write_byte(0x4E);                                       // 向总线发出写便笺存储器命令
 150   1                      

⌨️ 快捷键说明

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