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

📄 temp_1.lst

📁 绝对原创
💻 LST
字号:
C51 COMPILER V7.07   TEMP_1                                                                06/15/2005 10:44:55 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE TEMP_1
OBJECT MODULE PLACED IN TEMP_1.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE TEMP_1.C BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*****************************************************************************************/
   2          /*****************************************************************************************/
   3               /* 接于SST51单片机89E564RD */
   4               /* SO-P1.6 ; CS-P1.5 ; SCK-P1.7 */
   5               /* MAX6675测四路K型热电偶 */
   6               /* MAX6675测温转换时间一般0.17S,最大0.22S */
   7               /* 用继电器选通各路热电偶 */
   8               /* 通信协议:不发送小数点位,用四舍五入取小数位.共10位温度数据 */
   9               /* 先发送告知是哪段温度,F0为第一段,F1为第二段,F2,F3 */
  10               /* 送温度数据为BCD码,先送高位,后送低位,共送2个字节,连续发两次 */
  11               /* 连续发两次温度数据,最后以FF结束(共发六个字节)波特率9600(11.0592M) */
  12               /* E0,E1,E2,E3为加热信息,00为不加热,11为加热,22为断线标志,连续发两次标志位数据 */
  13               /* 修改平均温度*/
  14               /* 2005.6.14 */
  15          
  16          /*****************************************************************************************/
  17               
  18               #include<stdio.h>
  19               #include <SST89x5x4.H>
  20               #include<intrins.h>
  21              
  22               #define  time_s  (65536 - 57000)     /* 定时转换时间为55MSx4=0.20S */      
  23               #define  address_15c  0x00
  24               #define  address_5s   0x01
  25               #define  address_temp 0x02   
  26               #define  uchar  unsigned char        //
  27               #define  uint   unsigned int         //
  28          
  29               sbit SO  = P1^6 ;                    /* 数据输入 */
  30               sbit CS  = P1^5 ;                    /* 从机选择 */
  31               sbit SCK = P1^7 ;                    /* 时钟输出 */
  32          
  33               sbit temp_heat1 = P2^4 ;             /* 第一路加温输出,LED灯指示 */
  34               sbit temp_heat2 = P2^3 ;
  35               sbit temp_heat3 = P2^2 ;
  36               sbit temp_heat4 = P2^1 ;
  37          
  38               sbit work_led   = P2^0 ;             /* 程序运行指示灯,大约1S一次 */
  39          
  40               sbit HC_A = P3^2 ;                   /* 第一路热电藕继电器控制口 */
  41               sbit HC_B = P3^3 ;
  42               sbit HC_C = P3^4 ;
  43               sbit HC_D = P3^5 ;
  44          
  45               bit heat1_open,heat2_open,heat3_open,heat4_open ;                  /* 热电偶断开标志 */
  46               bit send_flag ;                                                    /* 正在发送,接受标志 */
  47               bit little15_flag1,little15_flag2,little15_flag3,little15_flag4 ;  /* 相差15度标志 */
  48          
  49               uint xdata road1_tempdat=0,road2_tempdat=0,road3_tempdat=0,road4_tempdat=0 ;  /* 四路平均温度存储器 *
             -/
  50               uint xdata site_temp1=0,site_temp2=0,site_temp3=0,site_temp4=0 ;              /* 设置温度 */
  51               uint xdata new_temp1=0,new_temp2=0,new_temp3=0,new_temp4=0 ;                  /* 每次读取的瞬间温度 *
             -/
  52          
  53               uchar xdata temp1_5s=0,road1_time=0,temp2_5s=0,road2_time=0,temp3_5s=0,road3_time=0,temp4_5s=0,road4_
C51 COMPILER V7.07   TEMP_1                                                                06/15/2005 10:44:55 PAGE 2   

             -time=0; /* 差15度时,5S计数器和每路加热时间 */
  54          
  55               uchar xdata read_time=0 ;   /* 读温度数据时* */
  56          
  57               uchar code road_15c_dat _at_ 0xff00 ;   /* 存储第一路温度在与设置温度差15时,开始控制加温 */
  58               uchar code road_5s_dat _at_ 0xff01;     /* 存储第一路温度以5S一个周期控制温度 */
  59               uchar code road_temp_dat _at_ 0xff02 ;  /* 第一路温差 */
  60                   uchar code road_temp_minus _at_ 0xff03 ;    /* 温差加减 */
  61          
  62               
  63          
  64          
  65          /*****************************************************************************************/
  66          /************************** 测温函数定义 ***************************************************/
  67          /*****************************************************************************************/
  68          
  69          /************************ 字节编程 ********************************************************/
  70              void UnlockMcu(uint SFA,uchar wirte_data)
  71          {               
  72   1              SFCF|=0x40 ;            //启动IAP  
  73   1              SFAH=(uchar)(SFA>>8) ;   //高8位地址 
  74   1              SFAL=(uchar)SFA ;          //低8位地址
  75   1              SFDT=wirte_data ;               //数据0x55
  76   1              SFCM=0x0e ;             //写                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
  77   1              while(SFST&0x04) ;              //等待操作完
  78   1      } 
  79          
  80          /************************* 扇区擦除 ********************************************************/
  81              void sector_erase(uint SFA)
  82          {
  83   1              SFCF|=0x40;             //启动IAP
  84   1              SFAH=(uchar)(SFA>>8);           //高8位地址
  85   1              SFAL=(uchar)SFA;     //低8位地址
  86   1              SFCM=0x0b;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
  87   1              while(SFST&0x04);               //等待操作完
  88   1      }        
  89          
  90          /************************ 载入中断0初值 **************************************************/
  91               void initial_value_0()
  92                 {
  93   1               TH0 = (time_s/256) ;             /* 载入H初值 */
  94   1               TL0 = (time_s%256) ;             /* 载入L初值 */
  95   1             }
  96          
  97          /********************** 5S计时 ***********************************************************/
  98              uchar time5s(bit little15_flag,uchar time_5s)
  99              {
 100   1            if(little15_flag == 1)              /* 进入差值在15度内 */
 101   1               time_5s++ ;                      /* 控温15度5s累加 */
 102   1               else
 103   1                 time_5s = 0 ;
 104   1            return(time_5s) ;
 105   1          }
 106          
 107          /********************* 加热时间秒计数器 **************************************************/
 108              uchar heat_time_s(uchar road_second,uchar road_time)
 109              {
 110   1            if(road_time > 0)
 111   1              road_second++ ;
 112   1              else
 113   1                road_second = 0 ;
 114   1            return(road_second) ;
C51 COMPILER V7.07   TEMP_1                                                                06/15/2005 10:44:55 PAGE 3   

 115   1          }
 116          
 117          /********************** 到1S时减加热时间 *************************************************/
 118              uchar heat_time(uchar road_second,uchar road_time)
 119              {
 120   1             if(road_time > 0)
 121   1             {
 122   2               if(road_second >= 20)                   /* ROAD_SECOND  秒计时器 */
 123   2                 road_time-- ;
 124   2             }
 125   1      
 126   1             return(road_time) ;
 127   1         }
 128          
 129          /*********************** 加温时间1s时间到 ********************************************************/
 130             uchar heat_time_ss(uchar road_second)
 131             {
 132   1           if(road_second >= 20 )
 133   1             road_second = 0 ;
 134   1           return(road_second) ;
 135   1         }
 136          
 137          /********************** 在差15度(根据是否有加热时间)判断是否加热 *************************/
 138              bit temp_little15(uchar road_time,bit heat_open)
 139              {
 140   1             bit temp_heat ;
 141   1      
 142   1             if((road_time > 0)&&(heat_open == 0))
 143   1               temp_heat = 0 ;               /* j加热 */
 144   1               else
 145   1                 temp_heat = 1 ;
 146   1             return(temp_heat) ;
 147   1          }
 148          
 149          /*************************** 发送温度数据子程序 ******************************************/
 150                void send_temp(uint temp_data,uchar road_data)     /* temp_data为温度数据,road_data为路数数据 */
 151                {
 152   1              uchar a,send_dat ;
 153   1      
 154   1              SBUF = road_data ;                               /* 先发送段数据F0,F1,F2,F3 */
 155   1              while(send_flag == 0) ;                          /* 等待发送完毕,在串行中断里置位 */
 156   1              send_flag = 0 ;                                  /* 发送标志位 */
 157   1      
 158   1              for(a = 0;a < 2;a++)                             /* 连续发送两次温度数据 */
 159   1              {
 160   2                send_dat = ((temp_data/1000)%10) ;             /* 取温度千位数 */
 161   2                send_dat <<= 4 ;                               /* 放在高位 */
 162   2                send_dat = (send_dat |((temp_data/100)%10)&0x0f) ;  /* 取温度千位和百位数 */
 163   2                SBUF = send_dat ;                              /* 发送数据 */
 164   2                while(send_flag == 0) ;
 165   2                send_flag = 0 ;
 166   2      
 167   2                send_dat = ((temp_data/10)%10) ;               /* 取温度十位数 */
 168   2                send_dat <<= 4 ;
 169   2                send_dat = (send_dat |((temp_data%10)&0x0f)) ; /* 取温度十位数和个位数 */
 170   2                SBUF = send_dat ;
 171   2                while(send_flag == 0) ;
 172   2                send_flag = 0 ;
 173   2              }
 174   1                                                               /* 发送结束标志位 */
 175   1              SBUF = 0xff ;
 176   1              while(send_flag == 0) ;
C51 COMPILER V7.07   TEMP_1                                                                06/15/2005 10:44:55 PAGE 4   

 177   1              send_flag = 0 ;
 178   1            }
 179          
 180          /**************************** 发送控温数

⌨️ 快捷键说明

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