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

📄 sp23x9 demo.lst

📁 一种新颖的串口扩展芯片sp234X系列的应用代码。
💻 LST
字号:
C51 COMPILER V7.20   SP23X9_DEMO                                                           09/19/2007 15:50:29 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE SP23X9_DEMO
OBJECT MODULE PLACED IN SP23x9 demo.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE SP23x9 demo.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!申    明!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
   2          //本驱动程序属于成都视普科技公司所有,仅允许免费用于本公司销售的产品中,未  //
   3          //经书面许可任何单位或个人不可将本程序用于其它用途,否则将追究其法律责任   //
   4          //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   5          /***************************************************************************
   6           SP2339_SP2349_driver.c source file SP2339/SP2349 serial communication
   7           example for MCS-51 MCU  (oscillating crystal: 11.0592MHz)
   8           Author: ShouPing Yang , 2007-09-18 
   9          ***************************************************************************/
  10          
  11          //说明:AT89C52在11.0592Mhz下不能获得76.8Kbps的波特率,必须采用22.1184Mhz!!!!!
  12          
  13          #include <reg52.h>
  14          #define uchar unsigned char
  15          #define uint unsigned int
  16          
  17          uchar idata TempBuffer[32]; //子串口数据发送缓冲区(大小可由用户随意配置)
  18          
  19          uchar idata SendByteNum,SendOverFlag;   //
  20          
  21          /*****************************************************************************
  22          功能:设定SP2339/SP2349输入、输出地址,可根据实际电路修改
  23          *****************************************************************************/
  24          //sbit  AdrIn0 =P1^0;   /* 连接到SP2349的PIN0(ADRO0),可以不用连接*/
  25          //sbit  AdrIn1 =P1^1;   /* 连接到SP2349的PIN1(ADRO1),可以不用连接*/
  26          sbit    AdrOut0=P1^2;   /* 连接到SP2349的PIN18(ADRI0)*/
  27          sbit    AdrOut1=P1^3;   /* 连接到SP2349的PIN17(ADRI1)*/
  28          
  29          serial () interrupt 4 {
  30   1              if(RI){                         //由于不会同时接收两个串口的数据,所以不需要判断接收地址
  31   2                      RI=0;
  32   2                      TempBuffer[--SendByteNum]=SBUF; //SendByteNum需要初始化
  33   2              }
  34   1              else{
  35   2                      TI=0;
  36   2                      SendOverFlag=0;
  37   2                      if(SendByteNum){                //如果数据还没有发送结束,则继续发送
  38   3                              SBUF=TempBuffer[--SendByteNum];
  39   3                      }
  40   2              }
  41   1      }
  42          
  43          void init_serialcomm(void){
  44   1              SCON   = 0x50;                  //SCON: serail mode 1, 8-bit UART, enable ucvr
  45   1              T2CON |= 0x34;                  //TMOD: timer 2, mode 2, 16-bit reload,timer 2 run
  46   1              RCAP2H = 0xFF;                  //Baud:76800  fosc=22.1184MHz
  47   1              RCAP2L = 0xF7;                  //Baud:76800  fosc=22.1184MHz
  48   1              IE    |= 0x90;                  //Enable Serial Interrupt
  49   1              IP         = 0x10;                      //只允许串口中断为最高优先级,其它为次优先级。
  50   1              SendByteNum=0;                  //初始化串口0发送缓冲区"空"
  51   1      }
  52          
  53          void SetUartMode(uchar SerialNum){//"0"设置串口0为单串口,否则设置串口1为单串口
  54   1              if(SerialNum){                  //设置串口1为单串口模式(波特率为:57600)
  55   2                      RCAP2H = 0xFF;          //Baud:76800  fosc=22.1184MHz
C51 COMPILER V7.20   SP23X9_DEMO                                                           09/19/2007 15:50:29 PAGE 2   

  56   2                      RCAP2L = 0xF7;          //Baud:76800  fosc=22.1184MHz
  57   2                      AdrOut0=1;
  58   2                      AdrOut1=1;
  59   2                      SBUF=0x0D;                      //设置为单串口模式1
  60   2                      SendOverFlag=1;
  61   2                      while(SendOverFlag);
  62   2                      AdrOut0=1;
  63   2                      AdrOut1=0;
  64   2                      RCAP2H = 0xFF;          //Baud:57600  fosc=22.1184MHz
  65   2                      RCAP2L = 0xF4;          //Baud:57600  fosc=22.1184MHz
  66   2              }
  67   1              else{                                   //设置串口0为单串口模式(波特率为:115200)
  68   2                      RCAP2H = 0xFF;          //Baud:76800  fosc=22.1184MHz
  69   2                      RCAP2L = 0xF7;          //Baud:76800  fosc=22.1184MHz
  70   2                      AdrOut0=1;
  71   2                      AdrOut1=1;
  72   2                      SBUF=0x0C;                      //设置为单串口模式0
  73   2                      SendOverFlag=1;
  74   2                      while(SendOverFlag);
  75   2                      AdrOut0=0;
  76   2                      AdrOut1=0;
  77   2                      RCAP2H = 0xFF;          //Baud:115200  fosc=22.1184MHz
  78   2                      RCAP2L = 0xFA;          //Baud:115200  fosc=22.1184MHz
  79   2              }
  80   1      }
  81          
  82          main(){
  83   1              uchar i=0;                      
  84   1              init_serialcomm();              //初始化MCU串口波特率和所有子串口波特率
  85   1              SetUartMode(0);                 //设置串口0为单串口模式
  86   1              TempBuffer[i++]=0x30;   //串口0依次发送"0x37"、"0x36" ..."0x30"
  87   1              TempBuffer[i++]=0x31;
  88   1              TempBuffer[i++]=0x32;
  89   1              TempBuffer[i++]=0x33;
  90   1              TempBuffer[i++]=0x34;
  91   1              TempBuffer[i++]=0x35;
  92   1              TempBuffer[i++]=0x36;
  93   1              TempBuffer[i++]=0x37;
  94   1              SendByteNum=i;
  95   1              TI=1;
  96   1              while(SendByteNum);             //等待串口0的数据发送结束
  97   1              
  98   1              SetUartMode(1);                 //设置串口1为单串口模式
  99   1              TempBuffer[i++]=0x40;
 100   1              TempBuffer[i++]=0x41;
 101   1              TempBuffer[i++]=0x42;
 102   1              TempBuffer[i++]=0x43;
 103   1              TempBuffer[i++]=0x44;
 104   1              TempBuffer[i++]=0x45;
 105   1              TempBuffer[i++]=0x46;
 106   1              TempBuffer[i++]=0x47;
 107   1              SendByteNum=i;
 108   1              TI=1;
 109   1              while(SendByteNum);             //等待串口1的数据发送结束
 110   1              while(1);
 111   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    316    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
C51 COMPILER V7.20   SP23X9_DEMO                                                           09/19/2007 15:50:29 PAGE 3   

   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =     34    ----
   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 + -