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

📄 main.lst

📁 利用NTC电阻实现温度测试,带详细文档和C语言代码,测试温度误差在0.5度.
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.02a   MAIN                                                                 07/10/2006 12:05:33 PAGE 1   


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

stmt level    source

   1          
   2          /*==============================================================================================
   3            Copyright (C), 2005, RegalCyber Tech. Co., Ltd.
   4            File name:   main.C
   5            Author: Zhangui Duan   Version: v1.3   Date: 2005-3-30
   6          
   7            Description:
   8               此程序文件主要是完成接收读卡器的寻卡信号,再发送四字节的卡号
   9                          1,主程序 
  10                          2,初始化CPU,I/O口,串口,RTC,SPI等
  11            Other Description:
  12                           由 Keil C51 V7.05 编译通过
  13          
  14            Function List:  
  15              1.  主程序
  16                          void main(void);
  17                  2,     初始化程序
  18                          void Init(void);
  19                          
  20            History:          
  21              1. Date:  2005-6-12
  22                 Author:Zhangui Duan
  23                 Modification: 由于卡号要与普通的IC卡兼容,将卡号设置为4个字节,所以发送的有效数据宽度
  24                     由原来的40位改为48位(1字节前置码+4字节卡号+1字节校验字节),同时发送缓冲区直接设置
  25                     为数组,字节长度为6字节
  26          
  27          ==============================================================================================*/
  28          #include "main.h"
  29          //#include "adc.h"
  30          #include <stdio.h>
  31          //#define DEBUG 1
  32          
  33          unsigned char code R_T1[61] = {254,241,230,219,209,199,190,181,172,165,157,150,143,137,130,125,119,114,
  34                                                                     109,104,100,96,92,88,84,81,77,74,71,68,65,63,60,58,55,53,51,49,47,45,43,
  35                                                                     42,40,39,37,36,35,33,32,31,30,29,28,27,26,25,24,23,22,21,20};
  36          //unsigned char code R_T2[25] = {242,228,215,203,192,182,172,162,154,146,138,131,124,117,111,106,100,95,90
             -,
  37                          //                                         86,82,78,73,70,67};   /4
  38          unsigned char code R_T2[45] = {240,224,210,197,184,173,162,152,143,134,126,118,111,105,98,93,87,82,78,73,
  39                                                                     69,65,62,58,55,52,49,46,44,42,39,37,35,34,32,30,29,27,26,25,23,22,21,20,19};         //   /14
  40          
  41          
  42          void Temperature_test(void)
  43          {
  44   1              unsigned char i,j;
  45   1              char Tempteratrue   = 0;
  46   1              unsigned char Rntc  = 0;    //热敏电阻的阻值
  47   1              unsigned long Time1 = 0;   //标准电阻充放电时间
  48   1              unsigned long Time2 = 0;   //热敏电阻充放电时间
  49   1              P0_DIR = 0x00;             //R RT C端都设为输出
  50   1              P_Rsta  = 0;               //放电
  51   1              P_Rntc  = 0;
  52   1              P_Ctest = 0;
  53   1              Delay100us(100);
  54   1              P0_DIR = 0x28;    //RT C端设为输入,R端设为输出
C51 COMPILER V7.02a   MAIN                                                                 07/10/2006 12:05:33 PAGE 2   

  55   1              P_Rsta  = 1;      //通过电阻R对C充电
  56   1              while(P_Ctest != 1)
  57   1              {
  58   2                      Time1++ ;
  59   2              }               
  60   1              P0_DIR = 0x00;    //R RT C端都设为输出  
  61   1              P_Rsta  = 0;      //放电
  62   1              P_Rntc  = 0;
  63   1              P_Ctest = 0;
  64   1              Delay100us(100);
  65   1              P0_DIR = 0x18;    //R C端设为输入,RT端设为输出
  66   1              P_Rntc  = 1;      //通过热敏电阻RT对C充电
  67   1              while(P_Ctest != 1)
  68   1              {
  69   2                      Time2++;
  70   2              }
  71   1              Rntc = (unsigned char)((0x64*Time2)/Time1);             //计算出热敏电阻值
  72   1              for(i = 0;i<62;i++)
  73   1              {
  74   2                      if((Rntc <= R_T1[i] )&& (Rntc > R_T1[i+1])) Tempteratrue = 5+i; 
  75   2                      if(Rntc >254)
  76   2                      {
  77   3                              for(j = 0; j<46 ;j++)
  78   3                              {
  79   4                                      if(((Rntc/14) <= R_T2[j])&& ((Rntc/14) > R_T2[j+1]))Tempteratrue = (-40)+i;             
  80   4                              }       
  81   3                      }        
  82   2              }
  83   1              PutChar(Tempteratrue);  
  84   1      }
  85          
  86          
  87          
  88          /**********************************************************************************************
  89            Function:        main
  90            Description:     定时休眠,通过RTC唤醒,
  91                                             判断收到寻卡信号,发送卡号,并判断是否出了此区域,
  92            Calls:           
  93                                                  Init();
  94                                          Init_Receiver();
  95                                                  Transmitter();
  96                                                  Delayms();
  97                                                  Receiver();
  98            Called By:                             
  99            Input:     
 100            Output:    
 101            Return:    
 102            Others:    
 103          **********************************************************************************************/
 104           void main(void)
 105           {
 106   1        //  unsigned char _set_card;
 107   1              unsigned char temp= 0;
 108   1         // _set_card=Config();//接收配置读卡器发送过来的卡号,并返回卡号
 109   1        //  RW_Flash(_set_card);//存储或者是从eeprom中取出卡号和配置参数
 110   1              Init();
 111   1      //      InitADC();
 112   1      //      TxBuf[0]=TransmitCardNo;//前置码
 113   1      //      TxBuf[13]=TxBuf[1]^TxBuf[2]^TxBuf[3]^TxBuf[4]^TxBuf[5]^TxBuf[6]^TxBuf[7]
 114   1      //      ^TxBuf[8]^TxBuf[9]^TxBuf[10]^TxBuf[11]^TxBuf[12]; //校验字节
 115   1        //  WriteRTC(TIME/TICK); //设置唤醒定时器
 116   1          while(1)
C51 COMPILER V7.02a   MAIN                                                                 07/10/2006 12:05:33 PAGE 3   

 117   1          { 
 118   2                      Temperature_test();
 119   2              //      Delay100us(4000);
 120   2          //----------------------------------------------
 121   2                //发送卡号
 122   2          //----------------------------------------------;
 123   2                //REGX_CTRL = 0x0b;                                    //关闭唤醒定时器
 124   2                //while(REGX_CTRL & 0x10)             // Wait for the interface to be ready
 125   2          //  
 126   2              /*      ;
 127   2                        #ifdef DEBUG
 128   2                        LED4=0;
 129   2                        PutChar(0x55);
 130   2                Delayms(1);  
 131   2                LED4=1;
 132   2                        #else 
 133   2                        Temperature_test();
 134   2      
 135   2                        //temp = Temperature_test();
 136   2                       // PutChar(temp);
 137   2                        //PutChar(0x77); //test
 138   2                       // Transmitter(&TxBuf[0]);//发送卡号
 139   2                        #endif
 140   2                        Delay100us(1);                  
 141   2                        CK_CTRL=0x03;//省电模式         
 142   2                       */                             
 143   2                } 
 144   1        }
 145          
 146           /*************************************************
 147            Function:        RW_Flash
 148            Description:     参数配置
 149                                                  1,将配置参数存入FLASH中
 150                                                  2,从FLASH中读出配置参数
 151            Calls:                void EEInit(void);
 152                                                  unsigned char EERead(unsigned int addr);
 153                                                  void EEWrite(unsigned int addr, unsigned char b);
 154            Called By:        void main(void)                      
 155            Input:            set_card
 156                              根据此输入值判断是否有进行参数配置
 157            Output:    
 158            Return:    
 159            Others:    
 160          *************************************************/ 
 161          void RW_Flash(unsigned char set_card)
 162          {
 163   1              unsigned char m;
 164   1              unsigned int addr_card,config_addr;
 165   1              EEInit();     //eeprom 初始化
 166   1              config_addr=Addr_Cardno+12;//初始化配置参数存放地址     
 167   1        //--------------------------------------------//
 168   1         //如果需要配置,则将卡号和配置参数写到FLASH中
 169   1              if(set_card)
 170   1              {
 171   2                  if(!((RxBuf[1]==0)&&(RxBuf[2]==0)&&(RxBuf[3]==0)&&(RxBuf[4]==0)&&(RxBuf[5]==0)&&(RxBuf[6]==0)
 172   2                      &&(RxBuf[7]==0)&&(RxBuf[8]==0)&&(RxBuf[9]==0)&&(RxBuf[10]==0)&&(RxBuf[11]==0)&&(RxBuf[12]==0)))
 173   2                      {
 174   3                         //如果12字节卡号数据全部为0,则发送过来的卡号数据就不需要存储到FLASH中
 175   3                              for(m=1,addr_card=Addr_Cardno;m<13;m++,addr_card++)

⌨️ 快捷键说明

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