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

📄 txd.lst

📁 单片机与计算机通讯源程序,含头文件,说明,本人亲自试过.
💻 LST
字号:
C51 COMPILER V6.23a  TXD                                                                   07/07/2006 15:31:21 PAGE 1   


C51 COMPILER V6.23a, COMPILATION OF MODULE TXD
OBJECT MODULE PLACED IN TXD.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE TXD.C BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //******************************显示一个字*********************************//
   2          #include<math.h>
   3          #include<reg51.h>
   4          #include<intrins.h>
   5          #include<absacc.h>
   6          #define uchar unsigned char
   7          #define DISP_C P1_7
   8          #define DISP_D P1_6
   9          #define Rt_de   P2_0
  10          #define me_address 0x30
  11          #define SAVE_D P1_5
  12          #define SAVE_T P2_1
  13          uchar stp_data[9];
  14          uchar s_err_times;
  15          uchar t_err_times;
  16          void delay(unsigned int n)
  17               {
  18   1              unsigned int i;
  19   1              for(i=n*200;i>0;i--)
  20   1                  ;
  21   1            }
  22          
  23          void disp_one(unsigned char XSH_data)
  24            {
  25   1           char i;
  26   1           bit F_temp;
  27   1           for(i=0;i<8;i++)
  28   1               {
  29   2                  F_temp=XSH_data&0x01;
  30   2                  XSH_data=XSH_data>>1;
  31   2                  if(F_temp)
  32   2                    {
  33   3                       DISP_C=0;
  34   3                       DISP_D=1;
  35   3                       _nop_();
  36   3                       _nop_();
  37   3                       DISP_C=1;
  38   3                       _nop_();
  39   3                       _nop_();
  40   3                       _nop_();
  41   3                       DISP_C=0;
  42   3                       _nop_();
  43   3                    }
  44   2                  else
  45   2                    {
  46   3                      DISP_C=0;
  47   3                      DISP_D=0;
  48   3                      _nop_();
  49   3                      _nop_();
  50   3                      DISP_C=1;
  51   3                      _nop_();
  52   3                      _nop_();
  53   3                      _nop_();
  54   3                      DISP_C=0;
  55   3                      _nop_();
C51 COMPILER V6.23a  TXD                                                                   07/07/2006 15:31:21 PAGE 2   

  56   3                    }
  57   2                 }
  58   1          }
  59          void error(uchar error_type)
  60              {
  61   1              char i;
  62   1              for(i=0;i<3;i++)
  63   1                 {
  64   2                   disp_one(error_type);
  65   2                   disp_one(0x40);
  66   2                   disp_one(0x50);
  67   2                   disp_one(0x50);
  68   2                   disp_one(0x79);
  69   2                  }
  70   1              while(1);
  71   1           }
  72          
  73          
  74          //停止
  75          void stop(void)
  76             {
  77   1            SAVE_D=0;
  78   1            SAVE_T=1;
  79   1            _nop_();
  80   1            _nop_();
  81   1            _nop_();
  82   1            SAVE_D=1;
  83   1            _nop_();
  84   1            _nop_();
  85   1            _nop_();
  86   1            SAVE_T=0;
  87   1            SAVE_D=0;
  88   1          }
  89          
  90          
  91          //发非应答信号
  92          void n_ack(void)
  93             {
  94   1            SAVE_D=1;
  95   1            SAVE_T=1;
  96   1            _nop_();
  97   1            _nop_();
  98   1            _nop_();
  99   1            SAVE_T=0;
 100   1            SAVE_D=0;
 101   1          }
 102          //读八位
 103          uchar rd_8byt(void)
 104             {
 105   1            uchar receive=0;
 106   1            char i;
 107   1            for(i=0;i<8;i++)
 108   1               {
 109   2                  receive=receive<<1;
 110   2                  SAVE_D=1;
 111   2                  SAVE_T=1;
 112   2                  _nop_();
 113   2                  if(SAVE_D)
 114   2                     receive++;
 115   2                  SAVE_T=0;
 116   2                }
 117   1             return(receive);
C51 COMPILER V6.23a  TXD                                                                   07/07/2006 15:31:21 PAGE 3   

 118   1          }
 119          //查应答
 120          bit check(void)
 121             {
 122   1            bit aswer;
 123   1            SAVE_D=1;
 124   1            SAVE_T=1;
 125   1            _nop_();
 126   1            _nop_();
 127   1            aswer=SAVE_D;
 128   1            SAVE_T=0;
 129   1            return(aswer);
 130   1          }
 131          //起始
 132          void start(void)
 133             {
 134   1            SAVE_D=1;
 135   1            SAVE_T=1;
 136   1            _nop_();
 137   1            _nop_();
 138   1            _nop_();
 139   1            SAVE_D=0;
 140   1            _nop_();
 141   1            _nop_();
 142   1            _nop_();
 143   1            SAVE_T=0;
 144   1         }
 145          void write_byt(uchar I_data)
 146             {
 147   1            char i;
 148   1            for(i=0;i<8;i++)
 149   1               {
 150   2                  SAVE_D=(bit)(I_data&0x80);
 151   2                  I_data=I_data<<1;
 152   2                  SAVE_T=1;
 153   2                  _nop_();
 154   2                  _nop_();
 155   2                  _nop_();
 156   2                  SAVE_T=0;
 157   2               }
 158   1           }
 159          uchar readone(uchar edd)
 160              {
 161   1            char i;
 162   1            uchar recivechar;
 163   1            edd=edd<<1;
 164   1            edd++;
 165   1            for(i=0;i<20;i++)
 166   1              {
 167   2                start();
 168   2                write_byt(edd);
 169   2                if(!check())
 170   2                   goto bbb;
 171   2               }
 172   1              error(0x06);
 173   1         bbb:  recivechar=rd_8byt();
 174   1               n_ack();
 175   1               stop();
 176   1               return(recivechar);
 177   1           }
 178          void Rs485_server(void)interrupt 4
 179             {
C51 COMPILER V6.23a  TXD                                                                   07/07/2006 15:31:21 PAGE 4   

 180   1              uchar now_rec_dat;
 181   1              uchar i;
 182   1              int j;
 183   1              EA=0;
 184   1              if(~RI)                 //检测是否有接收中断
 185   1                   goto Rs485_err;
 186   1              now_rec_dat=SBUF;
 187   1              if(now_rec_dat!=me_address)
 188   1                              goto Rs485_err;
 189   1              SM2=0;             //不允许多机通讯
 190   1              RI=0;
 191   1              TI=0;
 192   1              REN=0;             //发送数据时禁止接收
 193   1              Rt_de=1;       //483发送方式
 194   1              SBUF=me_address;   //发送本机地址
 195   1              while(~TI);        //等待
 196   1              TI=0;              //清除标志
 197   1              Rt_de=0;       //483接收方式
 198   1              REN=1;             //接收允许
 199   1              j=0;
 200   1              while((~RI)&&(j<2000))//等待接收数据,如果时间过长退出
 201   1                        j++;
 202   1              if(j>=2000)
 203   1                         goto Rs485_err;
 204   1              now_rec_dat=SBUF;  //读接收数据
 205   1              RI=0;
 206   1              TI=0;
 207   1              Rt_de=1;       //483发送方式
 208   1              REN=0;             //发送数据时禁止接收
 209   1              switch(now_rec_dat)
 210   1              {
 211   2                   case 0x00://收到数据=0发送36组存储数据
 212   2                        SBUF=0x00;  //返回命令字
 213   2                        while(~TI);
 214   2                        TI=0;
 215   2                        for(i=0;i<108;i++)
 216   2                        {
 217   3                              SBUF=readone(i);
 218   3                              while(~TI);
 219   3                              TI=0;
 220   3                        }
 221   2                        break;
 222   2                   case 0x01://收到数据=1发送超量程记录
 223   2                        SBUF=0x01;//返回命令字
 224   2                        while(~TI);
 225   2                        TI=0;
 226   2                        SBUF=t_err_times;//chao liang cheng
 227   2                        while(~TI);
 228   2                        TI=0;
 229   2                        SBUF=s_err_times;//chao liang cheng
 230   2                        while(~TI);
 231   2                        TI=0;
 232   2                        SBUF=0;//chao liang cheng
 233   2                        while(~TI);
 234   2                        TI=0;
 235   2                        break;
 236   2                   case 0x02://收到数据=2发送3组表读数
 237   2                        SBUF=0x02;//返回命令字
 238   2                        while(~TI);
 239   2                        TI=0;
 240   2      
 241   2      
C51 COMPILER V6.23a  TXD                                                                   07/07/2006 15:31:21 PAGE 5   

 242   2                       SBUF=0x88;//dang qian du shu
 243   2                       while(~TI);
 244   2                       TI=0;
 245   2      
 246   2                       /*
 247   2                        for(i=0;i<9;i++)
 248   2                        {
 249   2                              SBUF=stp_data[i];//dang qian du shu
 250   2                              while(~TI);
 251   2                              TI=0;
 252   2                        }
 253   2                        */
 254   2                        break;
 255   2                   default:
 256   2                        SBUF=0xff;
 257   2                        while(~TI);
 258   2                        break;
 259   2               }
 260   1           Rs485_err: RI=0;
 261   1                      TI=0;
 262   1                      SM2=1;
 263   1                      Rt_de=0;
 264   1                      REN=1;
 265   1                      EA=1;
 266   1         }
 267          void main(void)
 268               {
 269   1               TL1=0xfd;/////通信初始化///////////
 270   1               TH1=0xfd;//////////////
 271   1               SCON=0xf0;/////////////;SM0=1,SM1=1,SM2=1,REN=1,工作方式3(9位UART,波特率可变),串行接收允许,
 272   1               TMOD=0x21;//////////////
 273   1               PCON=0x80;//////////////
 274   1               TR1=1;/////////////////
 275   1               Rt_de=0;
 276   1               IT0=1;
 277   1               PX0=1;
 278   1               IP=0xff;
 279   1               IE=0x97;////////通信初始化结束//////////////////////////////////////
 280   1               EA=0;
 281   1               EA=1;
 282   1               P2_4=1;
 283   1               P2_5=1;
 284   1               P2_6=1;
 285   1               P2_7=1;
 286   1         Loop:
 287   1               disp_one(0x3f);
 288   1               disp_one(0x06);
 289   1               disp_one(0x5b);
 290   1               disp_one(0x4f);
 291   1               disp_one(0x66);
 292   1                  //disp_one(0x6D);
 293   1              // disp_one(0x7D);
 294   1              // disp_one(0x07);
 295   1               delay(100);    
 296   1               goto Loop;
 297   1            }
 298          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    570    ----
   CONSTANT SIZE    =   ----    ----
C51 COMPILER V6.23a  TXD                                                                   07/07/2006 15:31:21 PAGE 6   

   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     11    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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