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

📄 yj.lst

📁 本程序采用的是keilc51编程器
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   YJ                                                                    06/20/2007 13:39:50 PAGE 1   


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

line level    source

   1          #define uchar unsigned char
   2          #define uint  unsigned int
   3          
   4          #include "reg52.h"
   5          #include "intrins.h"
   6          #include "string.h"
   7          #include "AD0831.h"
   8          #include "diceng1602.h"
   9          #include "DS18B20qudong.h"
  10          
  11          
  12          sbit LED=P2^0;
  13          
  14          
  15          sbit key1 = P2^4;
  16          uchar counter = 0;
  17          
  18          
  19          
  20          struct SRspGetData //21h:数据采集命令响应
  21              {
  22                          uchar  lHead[4];         //4
  23                          uchar  iStart[2];        //2
  24                          uchar  cLength[2];       //2
  25                  uchar  iDestNum[2];        //目的站编号,       2
  26                  uchar  iSourceNum[2];      //源站编号           2
  27                  uchar  cPackageType;      //包类型=2Bh         1
  28                  uchar  cPackageCtrl;      //包控制要求  1
  29                  uchar  iCmdSequenceNum[2]; //应答序列编号 2
  30                  uchar  cTData[2];        //温度数据,2个字节
  31                  uchar  cHData;      //湿度数据,1个字节
  32                      uchar  iFcs[2];
  33                          uchar  iEnd[2];
  34               }DataPack;
  35          
  36          
  37          uchar command = 0;
  38          uchar i=0;
  39          uchar cRcv_Stat1=0;
  40          uchar iRcv_Nmb1;
  41          uchar iRcv_Nmb_Max;
  42          union zhongjian2
  43                  {
  44                          uint i;
  45                          uchar ii[2];
  46                  }exchange_data2;
  47          
  48          void InitT0()
  49          {
  50   1         
  51   1         //TMOD = 0x21;//定时器0工作于方式1.    16位   TMOD在串行中断初始化中已经设置过
  52   1         TH0 = 0x3C;
  53   1         TL0 = 0xB0;
  54   1         TR0 = 1;//定时器启动
  55   1      
C51 COMPILER V8.02   YJ                                                                    06/20/2007 13:39:50 PAGE 2   

  56   1         //EA = 1;//开总中断  在串行中断初始化中已经设置过
  57   1         ET0 = 1;//允许定时器0中断
  58   1      
  59   1         LED = 1;
  60   1      }
  61          
  62          void timer() interrupt 1
  63          {
  64   1         counter++;
  65   1         if( counter == 14)
  66   1                {
  67   2                   counter = 0;
  68   2               LED = ~LED;//脉冲取反
  69   2               TH0 = 0x3C;//重装
  70   2               TL0 = 0xB0; 
  71   2                }
  72   1      }
  73          
  74          
  75          void SendDat(uchar c)
  76          {
  77   1              key1 = 1;//要发送数据前,把485DIP角置高。因为此位为高时485为发送状态
  78   1              SBUF=c;
  79   1          while(TI==0);//等待TI变高
  80   1          TI=0;   
  81   1              key1 = 0;//发送完了以后,此位置0.为接收状态
  82   1                      
  83   1                      
  84   1      }       
  85          
  86          void InitRXD(void)
  87          {
  88   1         TMOD=0x21;   //确定定时器工作模式
  89   1         TH1=0xFD;                                                                                                                    
  90   1         TL1=0xFD;    //定时初值
  91   1         PCON&=0x80;  //SMOD=1
  92   1         TR1=1;               //开启定时器1
  93   1         SCON=0x50;   //串口工作方式1 
  94   1         RI = 0;
  95   1         TI = 0;      
  96   1         key1 = 0;//////////////////////////////////接收状态
  97   1         
  98   1         EA = 1;//开总中断
  99   1         ES = 1;//允许串行口中断
 100   1         PS = 1;//串行口中断优先级高
 101   1      }
 102          
 103          
 104          
 105          
 106          void Rxd() interrupt 4
 107          { 
 108   1              
 109   1              //uchar k;   
 110   1              uchar  new_data,last_data,last_last_data;
 111   1              uchar  cRcv_Data1[50];
 112   1            {
 113   2                      switch(cRcv_Stat1)
 114   2                  {
 115   3                    case 0:
 116   3                      if(RI);//接收数据;
 117   3                      new_data=SBUF; 
C51 COMPILER V8.02   YJ                                                                    06/20/2007 13:39:50 PAGE 3   

 118   3                                 //
 119   3                      if(last_last_data==0x00 && last_data==0x02 && new_data==0xa6)
 120   3                        {
 121   4                        
 122   4                          cRcv_Data1[5]=new_data;            
 123   4                          cRcv_Data1[4]=last_data;
 124   4                          cRcv_Data1[3]=last_last_data;
 125   4                          cRcv_Data1[2]=0x00;
 126   4                          cRcv_Data1[1]=0x00;
 127   4                          cRcv_Data1[0]=0x00;
 128   4                           
 129   4                          iRcv_Nmb1=6;
 130   4                          cRcv_Stat1=1;       //是帧头
 131   4                                    
 132   4                        } 
 133   3                        else              //
 134   3                        {
 135   4                                      last_last_data=last_data;          
 136   4                              last_data=new_data;
 137   4                          cRcv_Stat1=0;
 138   4                        } 
 139   3      
 140   3                       
 141   3                      break;        
 142   3                   case 1:
 143   3                      if(RI);//接收数据;
 144   3                      cRcv_Data1[iRcv_Nmb1]=SBUF;   //帧数据
 145   3                      if(iRcv_Nmb1==6)
 146   3                              exchange_data2.ii[0]=cRcv_Data1[iRcv_Nmb1];
 147   3                      if(iRcv_Nmb1==7)
 148   3                              exchange_data2.ii[1]=cRcv_Data1[iRcv_Nmb1];//计算有效数据长度,以此作为帧判断的第一步
 149   3      
 150   3                      if(iRcv_Nmb1==exchange_data2.i+11) //判长度---1
 151   3                      {
 152   4                              iRcv_Nmb_Max=iRcv_Nmb1;    //接收完一帧
 153   4                              cRcv_Stat1=0;             //准备下一帧的接收
 154   4                              iRcv_Nmb1=0;  
 155   4               
 156   4                                      if((cRcv_Data1[iRcv_Nmb_Max]==0x0a)&&(cRcv_Data1[iRcv_Nmb_Max-1]==0x0d))//判结束字---2
 157   4                                      {
 158   5                                              for(i=0;i<=iRcv_Nmb_Max;i++)   //接收数据回送,以便调试

⌨️ 快捷键说明

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