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

📄 stest.lst

📁 我自己写的ds1820b温度测量程序
💻 LST
字号:
C51 COMPILER V6.23a  STEST                                                                 05/05/2004 02:05:28 PAGE 1   


C51 COMPILER V6.23a, COMPILATION OF MODULE STEST
OBJECT MODULE PLACED IN stest.OBJ
COMPILER INVOKED BY: D:\KEIL\C51\BIN\C51.EXE stest.c BROWSE DEBUG OBJECTEXTEND SRC(.\stest.SRC) 

stmt level    source

   1          #include <AT89X51.h>
   2          #include <intrins.h>
   3          
   4          
   5          #define TMPort P1_7
   6          
   7          unsigned char MYWD[7]={0,0,0,0,0,'`','C'},DS1820ERR[]="NO DS1820!",TMCL[]={"TMCL"};
   8          unsigned char disbuf[10]={0};
   9          unsigned char trance=0,recived=0,comno=0,comzf;//发送状态、接受命令字符序号、接收的字符
  10          
  11          unsigned int t;
  12          bit DS1820ON,readtm;//DS1820响应、是否接收测温命令。
  13          
  14          void initUart(void)//波特率9600,24M时钟
  15          {
  16   1       TMOD|=0x20;
  17   1       SCON=0x50;
  18   1       PCON|=0x80;
  19   1       TH1=0xf3;
  20   1       TL1=0xf3;
  21   1       TR1=1;
  22   1       ES=1;
  23   1      }
  24          
  25          
  26          void uart(void) interrupt 4
  27          {
  28   1      unsigned char m=0; 
  29   1      if(RI)
  30   1              {comzf=SBUF;RI=0;recived=1;}
  31   1      else
  32   1          {TI=0;trance=1;}    
  33   1      }
  34          
  35          
  36          void Delay_110(void)    //延时110微秒,24M晶振
  37          {EA=0;
  38   1      #pragma asm
  39   1              MOV R0,#34H
  40   1              MOV R1,#02H
  41   1              TSR2:
  42   1              DJNZ R0,TSR2
  43   1              MOV R0,#34H
  44   1              DJNZ R1,TSR2
  45   1      #pragma endasm
  46   1      EA=1;}
  47          
  48          void Delay_510(void)    //延时510微秒,24M晶振
  49          {EA=0;
  50   1      #pragma asm
  51   1          nop
  52   1              nop
  53   1              MOV R0,#7DH
  54   1              MOV R1,#04H
  55   1              TSR1:
C51 COMPILER V6.23a  STEST                                                                 05/05/2004 02:05:28 PAGE 2   

  56   1              DJNZ R0,TSR1
  57   1              MOV R0,#7DH
  58   1              DJNZ R1,TSR1
  59   1      #pragma endasm
  60   1      EA=1;}
  61          
  62          void InitDS1820(void)           //初始化DS1820
  63          {  EA=0;
  64   1              TMPort = 1;             //拉高TMPort
  65   1              _nop_();//保持一个周期
  66   1          _nop_();
  67   1              TMPort = 0;             //拉低TMPort
  68   1          Delay_510();  //延时  DS1820复位时间要500us的低电平
  69   1          TMPort = 1;   //拉高TMPort
  70   1              Delay_110();  //延时110us 等待DS1820回应
  71   1        if (!TMPort)  //回应信号为低电平
  72   1          {DS1820ON=1;}
  73   1        else
  74   1          {DS1820ON=0;}
  75   1        Delay_110();  //延时
  76   1        Delay_110();
  77   1        TMPort=1;   //拉高TMPort
  78   1      EA=1;
  79   1      }
  80          
  81          
  82          void ds1820command(unsigned char a) //写ds1820命令函数。
  83          {
  84   1      EA=0;
  85   1      #pragma asm
  86   1        MOV A,R7
  87   1        MOV R2,#8
  88   1        CLR C
  89   1        WR1:
  90   1        CLR TMPort
  91   1        MOV R3,#2//延时3us,24M时钟
  92   1        DJNZ R3,$
  93   1        RRC A
  94   1        MOV TMPort,C
  95   1        MOV R3,#68//延时70us
  96   1        DJNZ R3,$
  97   1        SETB TMPort
  98   1        NOP
  99   1        NOP
 100   1        NOP
 101   1        NOP
 102   1        DJNZ R2,WR1
 103   1        SETB TMPort
 104   1      #pragma endasm
 105   1      EA=1;}
*** WARNING C280 IN LINE 82 OF STEST.C: 'a': unreferenced local variable
 106          
 107          void ds1820rd(unsigned char *pt)//读ds1820数据
 108          {
 109   1      EA=0;
 110   1      #pragma asm
 111   1      MOV R4,#9
 112   1      MOV A,R1
 113   1      MOV R0,A
 114   1      RD18201:
 115   1        MOV R2,#8
 116   1           RD18202:
C51 COMPILER V6.23a  STEST                                                                 05/05/2004 02:05:28 PAGE 3   

 117   1              SETB TMPort
 118   1                      NOP//延时2us,24M时钟
 119   1                      NOP
 120   1                      NOP
 121   1                      NOP
 122   1                      CLR TMPort//写时间片开始
 123   1                      NOP//延时2us,24M时钟
 124   1                      NOP
 125   1                      NOP
 126   1                      NOP
 127   1                      SETB TMPort//置为高电平,准备输入数据
 128   1                      MOV R3,#10//延时11us,24M时钟
 129   1                      DJNZ R3,$
 130   1                      MOV C,TMPort
 131   1                      RRC A
 132   1                      MOV R3,#48//延时50us,24M时钟
 133   1                      DJNZ R3,$
 134   1                      DJNZ R2,RD18202
 135   1              MOV @R0,A
 136   1              INC R0
 137   1              DJNZ R4,RD18201
 138   1      #pragma endasm
 139   1      EA=1;}
*** WARNING C280 IN LINE 107 OF STEST.C: 'pt': unreferenced local variable
 140          
 141          void tmtoc (void)
 142          {
 143   1      unsigned char sign;//符号、实际温度的10倍整数
 144   1      int tm; //实际温度的10倍
 145   1      sign=disbuf[1]&0x20;
 146   1      if (sign)//disbuf[1]高五位为符号位,判断符号根据补码存储方式,得出真实温度
 147   1              {disbuf[0]=~disbuf[0];//精确到0.1度,四舍五入
 148   2               disbuf[1]=~disbuf[1];
 149   2               tm=((int)disbuf[1]*256+(int)disbuf[0]+1)*0.625+0.5;}
 150   1      else tm=((int)disbuf[1]*256+(int)disbuf[0])*0.625+0.5;
 151   1      //tmof10=(int)tm;//输出温度各位的ASCii码
 152   1      
 153   1      if (tm>=1000) MYWD[0]='1';       
 154   1               else if (sign) MYWD[0]='-';
 155   1                        else MYWD[0]='+';
 156   1      
 157   1      MYWD[1]=tm/100%10+'0';
 158   1      if (MYWD[0]=='0'&&MYWD[1]=='0')MYWD[1]='\0';
 159   1      MYWD[2]=tm/10%10+'0';
 160   1      MYWD[3]='.';
 161   1      MYWD[4]=tm%10+'0';
 162   1      }
 163          
 164          void disp(char *p,unsigned char m) //输出一个字符数组,p为数组名,m为字符个数
 165          {
 166   1      unsigned char i;
 167   1          i=EA;
 168   1              EA=1;
 169   1              for(;*p!=0&&m!=0;p++,m--)
 170   1              {
 171   2                      SBUF=*p;
 172   2                      while(trance==0);
 173   2                      trance=0;
 174   2              }
 175   1              EA=i;
 176   1      }
 177          
C51 COMPILER V6.23a  STEST                                                                 05/05/2004 02:05:28 PAGE 4   

 178          
 179          void TMCLSHOW(void)
 180          {
 181   1      InitDS1820();//发出启动转化温度指令:初始化、skiprom、启动转化
 182   1      if (!DS1820ON) {disp(DS1820ERR,12);}
 183   1      ds1820command(0xCC);
 184   1      ds1820command(0x44);
 185   1      TMPort=1; 
 186   1      
 187   1      for (t=0;t<1500;t++) Delay_510();//等待转化过程完成
 188   1      InitDS1820();//读RAM中数据:初始化、skiprom、读命令、保存数据
 189   1      ds1820command(0xcc);
 190   1      ds1820command(0xbe);
 191   1      ds1820rd(disbuf);
 192   1      //disp(disbuf,9);
 193   1      tmtoc();
 194   1      disp("NOW,temperature is:",20);
 195   1      disp(MYWD,7);
 196   1      disp("\n",1);
 197   1      }
 198          
 199          void main(void)
 200          {
 201   1      DS1820ON=0;          //DS1820是否存在             
 202   1      initUart();
 203   1      InitDS1820();//发出启动转化温度指令:初始化、skiprom、启动转化
 204   1      if (!DS1820ON) {disp(DS1820ERR,12);}
 205   1      P1=0x55;
 206   1      TMCLSHOW();
 207   1      P1=0x33;
 208   1      EA=1;
 209   1      while (1)
 210   1       if (recived==1)//判断是否为温度测量命令
 211   1          {if(comzf==TMCL[comno])
 212   2                {comno++;
 213   3                if (comno>3)
 214   3                  {comno=0;
 215   4                      TMCLSHOW();
 216   4                      }
 217   3                }
 218   2              else comno=0; 
 219   2              recived=0;
 220   2              }
 221   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    681    ----
   CONSTANT SIZE    =     22    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     39       8
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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