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

📄 ex8-6c.lst

📁 《增强型8051单片机实用开发技术》例程代码
💻 LST
字号:
C51 COMPILER V8.18   EX8_6C                                                                11/27/2009 22:29:17 PAGE 1   


C51 COMPILER V8.18, COMPILATION OF MODULE EX8_6C
OBJECT MODULE PLACED IN ex8-6c.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ex8-6c.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include "stc12c5a.h"                           //包含STC12C5A60S2寄存器定义文件
   2          #define MASTER 1                                //作为从机程序时,将该行注释掉
   3          
   4          bit SPI_Receive;                                        //SPI 端口收到数据标志位 
   5          unsigned char idata SPI_buffer _at_ 0x30;       //保存SPI端口收到的数据
   6          
   7          void main(void)
   8          {
   9   1              unsigned char tmpdata,SPI_status;
  10   1      #ifdef MASTER
  11   1              //初始化串口
  12   1              SCON=0x50;                      //0101,0000 8位可变波特率, 无奇偶校验
  13   1              TMOD=0x21;                      //定时器T1为自动重装模式
  14   1              TH1=0xf6;
  15   1              TL1=0xf6;
  16   1              AUXR= AUXR|0x40;                //T1以1T的速度计数
  17   1              TR1=1;                          //启动定时器1 
  18   1              //初始化SPI
  19   1              SPCTL=0xfc;                     //详细注释与汇编语言相同
  20   1      #else
                      SPCTL=0xec;                     //详细注释与汇编语言相同
              #endif
  23   1              SPSTAT=0xc0;                    //清0标志位SPIF和WCOL 
  24   1              IE2=IE2|0x02;                   //ESPI(IE2.1)=1,允许SPIF产生中断
  25   1              SPI_Receive=0;                  //清标志字
  26   1              EA=1;                     //开总中断
  27   1      
  28   1              while(1)                        //主循环
  29   1              {
  30   2      #ifdef MASTER
  31   2                      if(RI)                          //判RS-232 串口中收到数据否
  32   2                      {
  33   3                              tmpdata=SBUF;                                   //读取RS-232串口中收到的数据
  34   3                              RI=0;
  35   3                              //将数据发送到从机SPI
  36   3                              IE2&=0xfd;                                      // ESPI(IE2.1)=0,禁止SPIF产生中断
  37   3                              SPDAT=tmpdata;                                  //SPI 发送数据 
  38   3                              SPI_status=0;
  39   3                              while(SPI_status==0)
  40   3                              {
  41   4                                      SPI_status=SPSTAT;   //等待SPIF=1即等待SPI发送完毕
  42   4                                      SPI_status=SPI_status&0x80;
  43   4                              }
  44   3                              IE2|=0x02;             //ESPI(IE2.1)=1,允许SPIF产生中断
  45   3                              continue;
  46   3                      }
  47   2                      if (SPI_Receive)        //判收到从SPI发回数据否
  48   2                      {
  49   3                              SPI_Receive=0;          //清0主单片机SPI端口收到数据标志位
  50   3                              TI=0;             //清零串口发送中断标志 
  51   3                              SBUF=SPI_buffer;        //将接收到的数据从RS232串口发送到计算机
  52   3                              while(TI==0);                   //等待发送完毕
  53   3                              TI=0;             //清零串口发送中断标志 
  54   3                      }
  55   2      #else
C51 COMPILER V8.18   EX8_6C                                                                11/27/2009 22:29:17 PAGE 2   

                              if (SPI_Receive)        //判收是否收到主机SPI发来的数据
                              {
                                      SPI_Receive=0;          //清0主单片机SPI端口收到数据标志位
                                      SPDAT=SPI_buffer; //将收到数据送SPDAT,准备下一次通讯时发回
                              }
              #endif
  62   2              }
  63   1      }
  64          void SPI_ISR(void) interrupt 9
  65          {
  66   1              SPSTAT=0xc0;                    //清0标志位SPIF和WCOL
  67   1              SPI_buffer=SPDAT;               //保存收到的数据
  68   1              SPI_Receive=1;                  //设置SPI端口收到数据标志 
  69   1      }


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