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

📄 11.3.lst

📁 单片机串口通信的主从机程序 环境是keilc51
💻 LST
字号:
C51 COMPILER V6.20c  11_3                                                                  09/02/2001 15:08:42 PAGE 1   


C51 COMPILER V6.20c, COMPILATION OF MODULE 11_3
OBJECT MODULE PLACED IN 11.3.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 11.3.c DEBUG OBJECTEXTEND

stmt level    source

   1          #include<reg51.h>
   2          #define uchar unsigned char
   3          #define SLAVE 0x00
   4          #define BN 16
   5          
   6          uchar idata tdata[16];
   7          uchar idata rdata[16];
   8          bit trdy;
   9          bit rrdy;
  10          void main(void)
  11          {
  12   1        TMOD=0x20;						//定时器T1为模式2
  13   1        TL1=0xfd;						//定时器初值
  14   1        TH1=0xfd;
  15   1        PCON=0x00;
  16   1        TR1=1;
  17   1        SCON=0xf0;						//串行口方式3
  18   1        ES=1;EA=1;						//开串行口中断
  19   1        while(1){trdy=1;rrdy=1;}				//准备好发送和接收
  20   1      }
  21          
  22          void slave(void) interrupt 4 using 1
  23          {
  24   1        void str(void);
  25   1        void sre(void);
  26   1        uchar a;
  27   1        RI=0;							//关串行口中断
  28   1        ES=0;
  29   1        if(SBUF!=SLAVE){ES=1;goto reti;}		//非本机地址,继续监听
  30   1        SM2=0;							//取笑监听状态
  31   1      SBUF=SLAVE;					//发回从机地址
  32   1      while(TI!=1);TI=0;
  33   1      while(RI!=1);RI=0;
  34   1      if(RB8==1){SM2=1;ES=1;goto reti;}		//确认地址不符,从机复位
  35   1      a=SBUF;						//接收命令
  36   1      if(a==1){						//从机接收主机的数据
  37   2      if(rrdy==1) SBUF=0x01;			//接收准备好,发回0x01
  38   2      else
  39   2      SBUF=0x00;
  40   2      while(TI!=1);TI=0;
  41   2      while(RI!=1);RI=0;
  42   2      if(RB8==1){SM2=1;ES=1;goto reti;}
  43   2      sre();						//接收数据
  44   2      }
  45   1      else
  46   1      {
  47   2      if(a==0x02)					//从机向主机发送数据
  48   2      {
  49   3      if(trdy==1) SBUF=0x02;		//发送准备好
  50   3      else
  51   3      SBUF=0x00;
  52   3      while(TI!=1);TI=0;
  53   3      while(RI!=1);RI=0;
  54   3      if(RB8==1){SM2=1;ES=1;goto reti;}
  55   3      str( );					//发送数据
C51 COMPILER V6.20c  11_3                                                                  09/02/2001 15:08:42 PAGE 2   

  56   3      }
  57   2      else
  58   2      {
  59   3      SBUF=0x80;				//命令非法
  60   3      while(TI!=1);TI=0;
  61   3      SM2=1;ES=1;				//恢复监听
  62   3      }
  63   2      }
  64   1      reti:;
  65   1      }
  66          
  67          void str(void)						//发送数据函数
  68          {uchar p,i;
  69   1       trdy=0;
  70   1       do{p=0;							//初始校验和为0
  71   2          for(i=0;i<BN;i++)
  72   2           {SBUF=tdata[i];					//发送数据
  73   3            p+=tdata[i];
  74   3            while(TI!=1);TI=0;
  75   3           }
  76   2        SBUF=p;						//发送校验和
  77   2      while(TI!=1);TI=0;
  78   2      while(RI!=1);RI=0;
  79   2      }while(SBUF!=0);					//主机接收不正确,重新发送
  80   1      SM2=1;ES=1;
  81   1      }
  82          
  83          void sre(void)						//接收数据函数
  84          {uchar p,i;
  85   1       rrdy=0;
  86   1       while(1)
  87   1      {p=0;								//初始化校验和为0
  88   2         for(i=0;i<BN;i++)
  89   2      {while(RI!=1);RI=0;
  90   3         tdata[i]=SBUF;					//接收数据
  91   3         p+=rdata[i];
  92   3        }
  93   2        while(RI!=1);RI=0;
  94   2      if(SBUF==p){SBUF=0x00;break;}		//校验和相同,发00H
  95   2      else{
  96   3      SBUF=0xFF;while(TI!=1);TI=0;		//校验和不同,发FFH,重新接收
  97   3       }
  98   2      }
  99   1      SM2=1;ES=1;
 100   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    277    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       1
   IDATA SIZE       =     32    ----
   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 + -