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

📄 at89c51.lst

📁 DS18B20温度采集然后红外发射出去,接收板接收红外并LCD显示接收的数据信息,有完整的发射接收程序
💻 LST
字号:
C51 COMPILER V7.50   AT89C51                                                               04/10/2008 22:19:34 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE AT89C51
OBJECT MODULE PLACED IN .\obj\AT89C51.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE src\AT89C51.c BROWSE DEBUG OBJECTEXTEND PRINT(.\lst\AT89C51.lst) OBJECT(.\o
                    -bj\AT89C51.obj)

line level    source

   1          #include <reg51.h>
   2          
   3          #include "AT89C51.h"
   4          
   5          float dis_data=555;
   6          //uint n_data=0;//////用于调试//////
   7          //uchar code array1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xb9,0xbf};
   8          /////不带小数点///////0/////1////2///3////4/////5////6////7///8/////9////+////-/////////                  
             -        
   9          //uchar code array2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
  10          /////带小数点/////////0/////1////2///3////4/////5////6////7///8/////9/////////////////                    
             -                                
  11          uchar n=0;
  12          uchar a=0;
  13          uchar temp=0;
  14          uchar temp1=0;
  15          uchar temp2=0;
  16          uchar temp3=0;
  17          uchar temp4=0;
  18          ///////////////////////////////////////////////////////////////////////////////
  19          void AT89C51_initialize(void)
  20          {
  21   1         EA =1;////打开中断总开关///////
  22   1         EX0=1;////打开中断0////
  23   1       //  PX0=1;
  24   1         IT0=1;/////设置下降沿触发///// 
  25   1      ///////////////////////////////////////////// 
  26   1         ET0=1;/////允许T0中断/////
  27   1      //  PT0=1;
  28   1         ET1=1;/////允许T1中断/////
  29   1      //  PT1=1;
  30   1         TMOD=0x11;////T0、T1都工作在模式1,16位/////
  31   1         TH0=0; TL0=0; TR0=0;/////设置初值为0,暂时不要启动T0//////
  32   1       //  TH1=0xc5; TL1=0x68; TR1=0;////定时15ms,暂时不要启动T1//////
  33   1      //  TH1=0xe4; TL1=0xa8; TR1=0;////定时7ms,暂时不要启动T1//////
  34   1      }
  35          
  36          ////////////////////引导码核对函数///////////////////////////////////////////////////////////////
  37          bit Check_leader(void)
  38          {
  39   1       uint lead_time;
  40   1       while(P31==0);////引导码的脉冲还没有结束,等待/////
  41   1       TR0=0;        /////脉冲结束,关闭T0///////////////
  42   1       lead_time=TH0*256+TL0;///////计算脉冲的宽度///////
  43   1        if((lead_time>2500)&&(lead_time<3200))  return(1);  /////判断是否是引导码////
  44   1         else {
  45   2              //dis_data=111;////用于调试//////
  46   2              return(0);
  47   2              }
  48   1      }
  49          /////////////////////////////////////////////////////////////////////////////////
  50          /////////////////////接收位数据函数//////////////////////////////////////////////////////////////
  51          bit  Receive_bitdata(void)
  52          {
C51 COMPILER V7.50   AT89C51                                                               04/10/2008 22:19:34 PAGE 2   

  53   1       uint data_time;
  54   1       while(P31==0);////位信息脉冲还没有结束,等待/////
  55   1       TR0=0;        /////脉冲结束,关闭T0///////////////
  56   1       data_time=TH0*256+TL0;///////计算脉冲的宽度///////
  57   1        if((data_time>250)&&(data_time<650)) 
  58   1         {
  59   2          Jizai_data(0);
  60   2          return(1);
  61   2         } ///如果为逻辑0信息,并记录///// 
  62   1             // else   return(0);
  63   1       if((data_time>1200)&&(data_time<1650)) 
  64   1         {
  65   2          Jizai_data(1);
  66   2          return(1);
  67   2          }///如果为逻辑1信息,并记录/////
  68   1             // else   return(0);
  69   1        if((data_time<250)||(data_time>1650))   return(0);       ///如果为非位信息数据,放弃,/////  
  70   1      }
  71          /////////////////////////////////////////////////////////////////////////////////
  72          /////////////////////记录接收的位数据函数//////////////////////////////////////////////////////////////
  73          bit Jizai_data(bit bitdata)
  74          {
  75   1       temp=temp<<1;////左移////
  76   1       if(bitdata==1) temp=temp|0x01;/////先发送的是数据的最高位,发送和接收要对应//////////
  77   1          else temp=temp&0xfe;
  78   1              a++;////接收一位信息,m的值加1,m代表接收了几个位信息/////////
  79   1          //dis_data=temp;
  80   1      //if(bitdata==1) dis_data=1;/////先发送的是数据的最高位,发送和接收要对应//////////
  81   1       //   else dis_data=0;
  82   1        if(a==8)   {temp1=temp;temp=0;}/////接收到一个字节信息,将数据转给temp1///////
  83   1        if(a==16)  {temp2=temp;temp=0;}/////接收到第2个字节信息,将数据转给temp2///////
  84   1        if(a==24)  {temp3=temp;temp=0;}/////接收到第3个字节信息,将数据转给temp3///////
  85   1        if(a==32)  {temp4=temp;temp=0;a=0;}/////接收到第4个字节信息,将数据转给temp4,////////////
  86   1                                      //////////一次完整的数据传输结束,m的值归0///////
  87   1        return(1);
  88   1      }
  89          /////////////////////////////////////////////////////////////////////////////////
  90          /////////////////////核对接收的数据是否正确函数///////////////////////////////////////////////////////////
             -///
  91          bit Check_Receive_data(void)
  92          {
  93   1       
  94   1       if((temp1==~temp2)&&
  95   1          (temp3==~temp4))//&&(temp1==0xaa)
  96   1                 return(1);  /////注意temp3是传送过来的有效、需要取用的数据值///////
  97   1         else return(0);
  98   1      }
  99          /////////////////////////////////////////////////////////////////////////////////
 100          
 101          ////////////////////////////////红外线接收处理函数////////////////////////////////////////////////////////
             -///////////////////////////
 102          void Receive_Infrared_Process(void)
 103          {
 104   1        if(n==33)        //////如果接收完1侦数据(1个字节数据)////////
 105   1          {
 106   2            if(Check_Receive_data())
 107   2              {
 108   3                P_data1=temp1; P_data2=temp3;//////经过校验正确,取用//////
 109   3               if (P_data1 >= 0x80)  {dis_data=-((~P_data1)*256+(~P_data2)+1)*0.0625;}                        
 110   3                else{dis_data=(P_data1*256+P_data2)*0.0625; }     
 111   3              }          
 112   2          } 
C51 COMPILER V7.50   AT89C51                                                               04/10/2008 22:19:34 PAGE 3   

 113   1      }
 114          //////////////////////////////////////////////////////////////////////////////////////////////////////////
 115          
 116          
 117          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    331    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     13       2
   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 + -