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

📄 shiyan4.lst

📁 各种基本的小程序,用到了实验板中的各个功能,很有用哦!
💻 LST
字号:
C51 COMPILER V6.12  SHIYAN4                                                                03/31/2008 20:54:33 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE SHIYAN4
OBJECT MODULE PLACED IN .\shiyan4.OBJ
COMPILER INVOKED BY: D:\keil\C51\BIN\C51.EXE .\shiyan4.c DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg51.h>
   2          #include <intrins.h>
   3          unsigned char code displaybit[]={0xfe,0xfd,0xfb,0xf7, 
   4                                           0xef,0xdf,0xbf,0x7f}; 
   5          unsigned char code displaycode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
   6          0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0x40}; 
   7          unsigned char code dotcode[32]={0,3,6,9,12,16,19,22, 
   8                                          25,28,31,34,38,41,44,48, 
   9                                          50,53,56,59,63,66,69,72, 
  10                                          75,78,81,84,88,91,94,97}; 
  11          unsigned char displaycount; 
  12          unsigned char displaybuf[8]={16,16,16,16,16,16,16,16}; 
  13          unsigned char timecount; 
  14          unsigned char readdata[8]; 
  15          sbit DQ=P0^1; 
  16          bit sflag; 
  17          bit resetpulse(void)  //复位子程序
  18          { 
  19   1        unsigned char i; 
  20   1        DQ=0; 
  21   1        for(i=255;i>0;i--); 
  22   1        DQ=1; 
  23   1        for(i=60;i>0;i--); 
  24   1        return(DQ); 
  25   1        for(i=200;i>0;i--); 
  26   1      } 
  27          void writecommandtods18b20(unsigned char command) //写ds18b20的命令控制字
  28          { 
  29   1        unsigned char i; 
  30   1        unsigned char j; 
  31   1        for(i=0;i<8;i++) 
  32   1          { 
  33   2            if((command & 0x01)==0) 
  34   2              { 
  35   3                DQ=0;                   //写0
  36   3                for(j=35;j>0;j--); 
  37   3                DQ=1; 
  38   3              } 
  39   2              else 
  40   2                { 
  41   3                  DQ=0;              
  42   3                  for(j=2;j>0;j--); //写1
  43   3                  DQ=1; 
  44   3                  for(j=33;j>0;j--); 
  45   3                } 
  46   2            command=_cror_(command,1);  //command的值循环右移一位    
  47   2          } 
  48   1      }
  49          
  50          
  51          unsigned char readdatafromds18b20(void) 
  52          { 
  53   1        unsigned char i; 
  54   1        unsigned char j; 
  55   1        unsigned char temp; 
C51 COMPILER V6.12  SHIYAN4                                                                03/31/2008 20:54:33 PAGE 2   

  56   1        temp=0; 
  57   1        for(i=0;i<8;i++) 
  58   1          { 
  59   2            temp=_cror_(temp,1); //将读入的一位值右移一位;因为ds18b20传数值时是低位在前
  60   2            DQ=0; 
  61   2            _nop_(); 
  62   2            _nop_(); 
  63   2            DQ=1; 
  64   2            for(j=10;j>0;j--); 
  65   2            if(DQ==1) 
  66   2              {
  67   3                temp=temp | 0x80; //读入1
  68   3              } 
  69   2              else 
  70   2                { 
  71   3                  temp=temp | 0x00; //读入0
  72   3                } 
  73   2            for(j=200;j>0;j--); 
  74   2          } 
  75   1        return(temp); 
  76   1      } 
  77          
  78          
  79          void main(void) 
  80          { 
  81   1        TMOD=0x01; 
  82   1        TH0=(65536-4000)/256; //定时4ms
  83   1        TL0=(65536-4000)%256; 
  84   1        ET0=1; 
  85   1        EA=1; 
  86   1        while(resetpulse()); 
  87   1        writecommandtods18b20(0xcc); //跳跃ROM命令,同时访问总路线上所有的从机设备
  88   1        writecommandtods18b20(0x44); //启动温度转换命令
  89   1        TR0=1; 
  90   1        while(1) 
  91   1          { 
  92   2            ;
  93   2          } 
  94   1      } 
  95          
  96          
  97          void t0(void) interrupt 1 using 0 
  98          { 
  99   1        unsigned char x; 
 100   1        unsigned int result; 
 101   1        TH0=(65536-4000)/256; 
 102   1        TL0=(65536-4000)%256; 
 103   1        if(displaycount==2) 
 104   1          { 
 105   2            P2=displaycode[displaybuf[displaycount]] | 0x80; 
 106   2          } 
 107   1          else 
 108   1            { 
 109   2              P2=displaycode[displaybuf[displaycount]]; 
 110   2            } 
 111   1        P0=displaybit[displaycount]; 
 112   1        displaycount++; 
 113   1        if(displaycount==8) 
 114   1          { 
 115   2            displaycount=0; 
 116   2          } 
 117   1        
C51 COMPILER V6.12  SHIYAN4                                                                03/31/2008 20:54:33 PAGE 3   

 118   1        timecount++; 
 119   1        if(timecount==150) 
 120   1          { 
 121   2            timecount=0; 
 122   2            while(resetpulse()); 
 123   2            writecommandtods18b20(0xcc); 
 124   2            writecommandtods18b20(0xbe); //写CCH后写BEH应用于单节点系统
 125   2            readdata[0]=readdatafromds18b20(); 
 126   2            readdata[1]=readdatafromds18b20(); 
 127   2            for(x=0;x<8;x++)
 128   2              { 
 129   3                displaybuf[x]=16; 
 130   3              } 
 131   2            sflag=0; 
 132   2            if((readdata[1] & 0xf8)!=0x00) 
 133   2              { 
 134   3                sflag=1; 
 135   3                readdata[1]=~readdata[1]; 
 136   3                readdata[0]=~readdata[0]; 
 137   3                result=readdata[0]+1; 
 138   3                readdata[0]=result; 
 139   3                if(result>255) 
 140   3                  { 
 141   4                    readdata[1]++; 
 142   4                  } 
 143   3              } 
 144   2            readdata[1]=readdata[1]<<4; 
 145   2            readdata[1]=readdata[1] & 0x70; 
 146   2            x=readdata[0]; 
 147   2            x=x>>4; 
 148   2            x=x & 0x0f; 
 149   2            readdata[1]=readdata[1] | x; 
 150   2            x=2; 
 151   2            result=readdata[1]; 
 152   2            while(result/10) 
 153   2              { 
 154   3                displaybuf[x]=result; 
 155   3                result=result/10; 
 156   3                x++; 
 157   3              } 
 158   2            displaybuf[x]=result; 
 159   2            if(sflag==1) 
 160   2              { 
 161   3                displaybuf[x+1]=17; 
 162   3              } 
 163   2            x=readdata[0] & 0x0f; 
 164   2            x=x<<1; 
 165   2            displaybuf[0]=(dotcode[x]); 
 166   2            displaybuf[1]=(dotcode[x])/10; 
 167   2            while(resetpulse()); 
 168   2            writecommandtods18b20(0xcc); 
 169   2            writecommandtods18b20(0x44); 
 170   2          } 
 171   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    423    ----
   CONSTANT SIZE    =     58    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     18       2
C51 COMPILER V6.12  SHIYAN4                                                                03/31/2008 20:54:33 PAGE 4   

   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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