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

📄 main.lst

📁 mcp3221 ad转换。通过iic串口读取ad转换数值
💻 LST
字号:
C51 COMPILER V8.02   MAIN                                                                  03/30/2009 08:19:11 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include  "main.h"
   2          
   3          
   4          /***************************************///
   5          void delay_ms(unsigned int count)
   6          {
   7   1              uint i,j;
   8   1              for(j=0;j<count;j++)
   9   1              {
  10   2              
  11   2                      for(i=0;i<350;i++)
  12   2                      ;
  13   2               }
  14   1      }
  15          
  16          void init_port(void)
  17          {
  18   1          P0=0xFF;
  19   1              P1=0xFF;
  20   1              P2=0xFF;
  21   1              P3=0xFF;
  22   1      }
  23          
  24          /**********************************///开机准备时间
  25          void minute(uchar a)
  26          {
  27   1       uchar a1,a2,a3;
  28   1       TMOD=0x01;       /*定时器为模式为1*/
  29   1       TH0=(65536-50000)/256;        /*设定定时器值为50毫秒*/
  30   1       TL0=(65536-50000)%256;
  31   1       TR0=1;           /*启动定时器*/
  32   1       for(a3=0;a3<a;a3++)
  33   1        {
  34   2              for(a2=0;a2<60;a2++)                      /*定时1分钟*/
  35   2              {
  36   3                      for(a1=0;a1<20;a1++)              /*定时1s*/
  37   3                      {
  38   4                      do{}while(!TF0);
  39   4                      TF0=0;
  40   4                      TH0=(65536-50000)/256;        /*重新装载*/
  41   4                      TL0=(65536-50000)%256;
  42   4                      }
  43   3               }      
  44   2         }
  45   1       }
  46          /*************************************/
  47          
  48          /***********************串口收发程序********************************/
  49          void b9600(void)
  50          {
  51   1        SCON = 0x50;   //串口工作方式设置字节,1个起始位,8个数据位,1个停止位组成10位帧
  52   1        PCON = 0x80;  //波特率加倍模式
  53   1        TMOD |= 0x20; //0010,  //COM2:自动重置初值的8位定时/计数器
  54   1        TH1 = 0xfa;TL1=0xfa;
  55   1        //串行口波特率发生器,=f=12M
C51 COMPILER V8.02   MAIN                                                                  03/30/2009 08:19:11 PAGE 2   

  56   1        TR1 = 1;
  57   1        //启动T1
  58   1      }
  59          
  60          
  61          //串口发送字符程序
  62          void SendByte(uchar SSD)
  63          {
  64   1        TI = 0;
  65   1        RI = 0;
  66   1        SBUF = SSD;
  67   1        while (!TI){}
  68   1        ;
  69   1        TI = 0;
  70   1      }
  71          
  72          //串口接收字符程序
  73          unsigned char RxByte(void)
  74          {
  75   1       unsigned char a;
  76   1      
  77   1        while (RI == 0){}
  78   1        ; //为低是一直停止
  79   1        RI = 0;
  80   1        a = SBUF;
  81   1        return (a);
  82   1      }
  83          
  84          //向串口发送一个字符串,strlen为该字符串长度 
  85          void SendStr(unsigned char *str, unsigned int strlen)
  86          {
  87   1        unsigned int k = 0;
  88   1        do
  89   1        {
  90   2          SendByte(*(str + k));
  91   2          k++;
  92   2        }
  93   1        while (k < strlen);
  94   1      }
  95          /***********************************************************/
  96          
  97          
  98          /***********得到温度值转换成十进制***********/
  99          uchar receive_temperature(void)
 100          {         
 101   1                unsigned char tempL=0,tempH=0,temperature=0;
 102   1                uchar buffer[8]={0,0,0,0,0,0,0,0};
 103   1            receive_string(0x9B,buffer,8);//iic读取转换结果,放入buffer中 
 104   1                delay_ms(10);
 105   1                tempH=buffer[0];tempL=buffer[1];
 106   1                // SendByte(buffer[0]);
 107   1                //SendByte(buffer[1]);
 108   1                temperature=((tempH*256)+tempL)*0.01;          //数据处理 
 109   1                return(temperature);
 110   1                }
 111                    
 112                          
 113          /**********数值转换ANSII码*********/
 114           void adc_str(uint Val,uchar *Data)//对应标准ANSII码表,代码48刚好对应ANSII中的'0',其他的如是类推
 115          {
 116   1        Data[0]=Val/10+48;//Data[3]=48+5=  '5'
 117   1        Data[1]=Val%10+48;//Data[4]=48+0  '0'
C51 COMPILER V8.02   MAIN                                                                  03/30/2009 08:19:11 PAGE 3   

 118   1      }
 119          /*************************************************************************///
 120          
 121          /******************************主函数**************************************/
 122          void main()
 123          {
 124   1              uchar temperature1,temperature2,temperature0;
 125   1              uchar set,cool,min;
 126   1              uchar Data[]={"12 "};
 127   1              uchar Work[]={"work  "};
 128   1      
 129   1      
 130   1      
 131   1              init_port();
 132   1              b9600();
 133   1              //delay_ms(10);
 134   1              while(1)
 135   1              {
 136   2                if(P0^0!=0)
 137   2                { 
 138   3                 P1=0xee; // 循环风机启动,制冷系统关闭,风阀A打开,风阀B关闭
 139   3                
 140   3                 min=RxByte();//得到定时运行准备时间
 141   3                 //SendByte(min);
 142   3                 minute(min);
 143   3                 b9600();
 144   3                 SendStr(Work,6);
 145   3               
 146   3               
 147   3                while(P0^0!=0)
 148   3                {      
 149   4                   b9600();
 150   4                       set=RxByte();  // 得到设定温度值
 151   4                   //SendByte(set);
 152   4                   cool=RxByte();  // 得到冷源温度值
 153   4                   //SendByte(cool);
 154   4                       P2=0x80; //通道1选通
 155   4                   temperature1=receive_temperature();   //得到室内温度值
 156   4                       adc_str(temperature1,Data);
 157   4                       SendStr("i=",2);
 158   4                   SendStr(Data, 3);
 159   4                       P2=0x00; //通道0选通
 160   4                   temperature0=receive_temperature();   //得到室外温度值
 161   4                       adc_str(temperature0,Data);
 162   4                       SendStr("o=",2);
 163   4                   SendStr(Data, 3);
 164   4                   //SendByte(temperature0);
 165   4                       P2=0x40; //通道2选通
 166   4                   temperature2=receive_temperature();   //得到回风管温度值
 167   4                       adc_str(temperature2,Data);
 168   4                       SendStr("p=",2);
 169   4                   SendStr(Data,3);
 170   4      
 171   4                   //SendByte(temperature2);
 172   4      
 173   4                      if(temperature1<=(set-3))                       //               检查室内温度是否达到设定温度
 174   4                      {
 175   5                      P1=0xed;         //制冷系统关闭,风阀A关闭,风阀B打开
 176   5                              //temperature1=receive_temperature();   //得到温度值
 177   5                      //SendByte(temperature1);
 178   5                              SendStr("S1/ ",4);
 179   5                              //delay_ms(500);
C51 COMPILER V8.02   MAIN                                                                  03/30/2009 08:19:11 PAGE 4   

 180   5                              }
 181   4                              else if(temperature1>=(set+3))    // 室内温度达到(设定温度+3)度
 182   4                              {
 183   5                                if(temperature0<=cool)                // 室外温度达到冷源温度
 184   5                                { 
 185   6                                  P1=0xee;
 186   6                                SendStr("S2/ ",4);
 187   6                                  //delay_ms(500); 
 188   6                                      }
 189   5                                   if(temperature0>=(cool+3))   // 室外温度达到(冷源温度+3)
 190   5                                    {
 191   6                                         if(temperature2>=temperature0) // 回风管温度高于室外温度
 192   6                                          {
 193   7                                           P1=0xe6;
 194   7                                               SendStr("S3/ ",4);
 195   7                                               //SendByte(3);
 196   7                                       //delay_ms(500);
 197   7                                          }
 198   6                                          else                          //回风管温度不高于室外温度
 199   6                                         {
 200   7                                          P1=0xe5;
 201   7                                              SendStr("S4/ ",4);
 202   7                                          //SendByte(4);
 203   7                                              //delay_ms(500);
 204   7                                         }
 205   6                                        }
 206   5                                }
 207   4                              
 208   4                //delay_ms(500);
 209   4              }
 210   3                 }
 211   2                 else P1=0xff;
 212   2               }
 213   1      }
 214          /**********************************主函数结束*************************//////


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    619    ----
   CONSTANT SIZE    =     48    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      34
   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 + -