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

📄 receive2.lst

📁 一台单片机主机和两台单片机丛机相互通信
💻 LST
字号:
C51 COMPILER V8.06   RECEIVE2                                                              05/07/2007 15:02:58 PAGE 1   


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

line level    source

   1          #include<reg51.h>
   2          #include<stdio.h>
   3          #include<absacc.h>
   4          #define uchar unsigned char
   5          #define uint  unsigned int
   6          sbit  COL_RCK=P1^0;     //列时钟控制端
   7          sbit  COL_DS=P1^1;      //列数据发送端
   8          sbit  COL_SCK=P1^2;     //74HC595列数据控制端
   9          sbit  ROW_RCK=P1^7;     //行时钟控制端
  10          sbit  ROW_DS=P1^6; //行数据发送端
  11          sbit  ROW_SCK=P1^5;     //74HC595行数据控制端
  12          uchar number[56];
  13          //从机的波特率设置为4800bit/s,并将串行口设为允许接房事,收,SM2设为1
  14          void init_scon()
  15          {
  16   1       TMOD=0x20;
  17   1       TH1=0xf3;
  18   1       TL1=0xf3;
  19   1       SCON=0xf0;
  20   1       PCON=0x80;
  21   1       TR1=1;
  22   1      }
  23          //从机串行接收
  24          uchar receive()
  25          {
  26   1       uchar temp;
  27   1       while(RI==0);
  28   1       RI=0;
  29   1       temp=SBUF;
  30   1         return temp;
  31   1      }
  32          //从机串行发送
  33          void send(uchar x)
  34          {
  35   1       SBUF=x;
  36   1       while(TI==0);
  37   1       TI=0;
  38   1      } 
  39          void delay()
  40          {
  41   1       uint i,j;
  42   1       for(i=0;i<20;i++)
  43   1        for(j=0;j<15;j++);
  44   1      } 
  45          void col_send_data(uchar *p)
  46          {
  47   1       uint i;
  48   1       uchar temp;
  49   1       temp=*p;
  50   1       COL_SCK=0;
  51   1       for(i=0;i<8;i++)
  52   1       {
  53   2        if(temp&0x80)
  54   2           COL_DS=1;
  55   2        else
C51 COMPILER V8.06   RECEIVE2                                                              05/07/2007 15:02:58 PAGE 2   

  56   2           COL_DS=0;
  57   2        COL_RCK=0;
  58   2        COL_RCK=1;
  59   2        temp=temp<<1;
  60   2       }
  61   1       COL_SCK=1;
  62   1      } 
  63          void row_send_data(uchar value)
  64          {
  65   1       uint i;
  66   1       ROW_SCK=0;
  67   1       for(i=0;i<8;i++)
  68   1       {
  69   2        if(value&0x80)
  70   2           ROW_DS=1;
  71   2        else
  72   2           ROW_DS=0;
  73   2        ROW_RCK=0;
  74   2        ROW_RCK=1;
  75   2        value=value<<1;
  76   2       }
  77   1       ROW_SCK=1;
  78   1      } 
  79          int main(void)
  80          {
  81   1       
  82   1       uchar receive_adr;//从机从主机接收的地址
  83   1       uchar receive_data; //从机从主机接收的数据
  84   1       uchar *p1,*p2;
  85   1       uint i,j,k;
  86   1       uchar local_adr;//从机本地地址
  87   1       uchar temp;
  88   1       init_scon();
  89   1       local_adr=0x02; //设问从机的本地地址为0X02
  90   1       i=0;
  91   1       while(i<56)       //不停的接收,直到接收到正确的地址
  92   1       {
  93   2        if(RB8)               //如果SM2=1,且接收到的第9位RB8=1,产生中断请求,将接收到的8位数据送SBUF,
  94   2        {                                                      //如果RB8为0,则RI不置1,不接收主机发来的数据
  95   3          receive_adr=SBUF;
  96   3              RI=0;
  97   3        }
  98   2        if(receive_adr==local_adr)
  99   2        {                                        //如果从主机接收到的地址和从机的地址相同
 100   3         SM2=0;                               //则SM2=0,不论RB8是0还是1,都将接收从主机发来的数据
 101   3         send(local_adr);
 102   3         for(i=0;i<56;i++)             //将接收到的数据存储在反冲区数组DATA1中
 103   3         {
 104   4          receive_data=receive();
 105   4          number[i]=receive_data;
 106   4         }
 107   3        }
 108   2       }
 109   1       SM2=1;
 110   1       while(1)
 111   1       {
 112   2        p1=number;    //数组起始指针赋值给P1
 113   2        for(i=0;i<48;i++)
 114   2        {
 115   3      //控制点阵显示移动数度   
 116   3         for(j=0;j<50;j++)
 117   3         {
C51 COMPILER V8.06   RECEIVE2                                                              05/07/2007 15:02:58 PAGE 3   

 118   4          p2=p1; //恢复扫描该帧的起始地址
 119   4              temp=0x7f;//行扫描控制初值
 120   4              //扫描一帧
 121   4              for(k=0;k<8;k++)
 122   4              {
 123   5               col_send_data(p2);
 124   5           delay();
 125   5               row_send_data(temp);
 126   5           p2++;
 127   5               temp=temp>>1|0x80;
 128   5              }
 129   4         }
 130   3        p1++;
 131   3        }
 132   2       }
 133   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    358    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     56      15
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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