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

📄 pc与51的快速串行通信.lst

📁 pc与51单片机的快速串行通信程序。开发环境KeilC
💻 LST
字号:
C51 COMPILER V7.50   PC与51的快速串行通信                                                  05/23/2008 17:58:58 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE PC与51的快速串行通信
OBJECT MODULE PLACED IN pc与51的快速串行通信.OBJ
COMPILER INVOKED BY: D:\Program Files\KeilC\C51\BIN\C51.EXE pc与51的快速串行通信.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********************************************************************
   2          * file name:   define.h
   3          * writer:               李慧(LH)
   4          * created:              2008-04-12
   5          * last changed: 2008-05-22
   6          * compiler:             KeilC51 7.01
   7          * descreption: 单片机接收PC机发送的数据帧子程序
   8          * resource:    T0,T1
   9          *********************************************************************/
  10          
  11          /*起始帧0x68
  12          m_frameStatus 0x00接收          
  13                                    0x01地址m_addrCode    
  14                                    0x02控制码m_controlCode 
  15                                    0x03数据长度m_dataLen
  16                                    0x04数据m_dataBuffer[]                
  17                                    0x05校验码 m_sysCheckData     
  18                                    0x06帧结束m_frameEnd
  19          
  20                                    m_dataFieldCount//串口接收数据信息计数器
  21          
  22          b_validFrame=0;//置数据帧无效标志
  23                                          
  24          */
  25          
  26          #include <reg51.h>
  27          
  28          /*****************************************************************************************
  29          * 函数名:      systeminitial
  30          * 功能描述:系统初始化,初始化定时器1T1、串口、系统中断
  31          * 创建时间:2008-05-12
  32          * 修改时间:2008-05-22
  33          ******************************************************************************************/
  34          void systeminitial(void)                                        
  35          {
  36   1              TMOD=0x21;              //T1工作在方式2,T0工作在方式0
  37   1              PCON=0x00;              //设置波特率参数:单倍频,数据传输速率选择
  38   1              SCON=0x58;              //串口工作方式1选择,并打开接收允许
  39   1              ES=1;                   //允许串行中断
  40   1              PS=1;                   //设置串口中断优先级为高        
  41   1              TH1=0x0E8;              //系统选用11.0592Mhz晶振
  42   1              TL1=0x0E8;                                              
  43   1              TR1=1;                  //启动定时器T1
  44   1              EA=1;                   //打开总中断
  45   1      }
  46          
  47          
  48          bit b_validFrame;
  49          unsigned char m_frameStatus;
  50          unsigned char m_sysCheckData;//自己计算的校验数字
  51          unsigned char m_controlCode;
  52          unsigned char m_addrCode;
  53          unsigned char m_dataLen;
  54          unsigned char m_dataFieldCount;
  55          unsigned char m_checkData;//接收来的校验数字
C51 COMPILER V7.50   PC与51的快速串行通信                                                  05/23/2008 17:58:58 PAGE 2   

  56          unsigned char m_frameEnd;
  57          unsigned char m_dataBuffer[];
  58          
  59          //};
  60          
  61          //68H Address Control DataLen Datal Data2...DataN SumCheck 16??
  62          /*****************************************************************************************
  63          * 函数名:      corn_isp
  64          * 功能描述:串口中断服务子程序
  65          * 创建时间:2008-05-12
  66          * 修改时间:2008-05-22
  67          ******************************************************************************************/
  68          void corn_isp(void) interrupt 4 using 3
  69          {
  70   1      if(RI)                                                          
  71   1      {
  72   2              RI=0;                                                   
  73   2              if(b_validFrame)//上一个数据帧未处理完
  74   2              {
  75   3                      return;//放弃对当前数据帧的接收
  76   3              }                                                               
  77   2              if(m_frameStatus==0x00)                                 //****串口接收中断处于接收帧起始字节阶段
  78   2              {
  79   3                      if(SBUF!=0x68)//不是有效的帧起始字节
  80   3                      {
  81   4                              m_frameStatus=0x00;//串口接收中断状态标志不更新
  82   4                      }
  83   3                      else
  84   3                      {
  85   4                              m_frameStatus=0x01;//串口接收中断状态标志更新为接收                                     
  86   4                      }
  87   3              }
  88   2              else if(m_frameStatus==0x01)                    //****串口接收中断处于接收数据帧地址码阶段
  89   2              {
  90   3                      m_addrCode=SBUF;//保存地址
  91   3                      m_frameStatus=0x02;//串口接收中断状态标志更新为控制码阶段                                       
  92   3                      m_sysCheckData=0x00;//准备进行数据和校验                                
  93   3              }
  94   2              else if(m_frameStatus==0x02)                    //****串口接收中断处于接收控制码阶段                    
  95   2              {
  96   3                      m_controlCode=SBUF;//保存控制码
  97   3                      m_frameStatus=0x03;//串口接收中断状态标志更新为接收数据长度                                     
  98   3                      m_sysCheckData+=m_controlCode;//更新校验和              
  99   3              }
 100   2              else if(m_frameStatus==0x03)                    //****串口接收中断处于接收数据长度信息阶段                      
 101   2              {
 102   3                      m_dataLen=SBUF;                                 
 103   3                      m_frameStatus=0x04;//接收数据
 104   3                      m_sysCheckData+=m_dataLen;                      
 105   3                      m_dataFieldCount=0x00;//串口接收数据信息计数器清零
 106   3              }
 107   2              else if(m_frameStatus==0x04)                    //****串口处于接收数据信息阶段
 108   2              {
 109   3                      m_dataBuffer[m_dataFieldCount]=SBUF;
 110   3                      m_sysCheckData+=m_dataBuffer[m_dataFieldCount];
 111   3                      m_dataFieldCount++;                                     
 112   3                      if(m_dataFieldCount==m_dataLen) 
 113   3                      {
 114   4                              m_frameStatus=0x05;//数据信息接收结束,更新状态                                 
 115   4                      }
 116   3              }
 117   2              else if(m_frameStatus==0x05)                    //****串口处于接收校验码阶段                    
C51 COMPILER V7.50   PC与51的快速串行通信                                                  05/23/2008 17:58:58 PAGE 3   

 118   2              {
 119   3                      m_checkData=SBUF;                                       
 120   3                      if(m_sysCheckData != m_checkData)               
 121   3                      {
 122   4                              m_frameStatus=0x00;//复位状态标志
 123   4                      }
 124   3                      else                                                            
 125   3                      {
 126   4                              m_frameStatus=0x06;//更新状态标志为接收结束码                                   
 127   4                      }
 128   3              }
 129   2              else if(m_frameStatus==0x06)                    //****串口接收中断处于接收结束码阶段                    
 130   2              {
 131   3                      m_frameEnd=SBUF;//保存结束码                                    
 132   3                      if(m_frameEnd!=0x16)//错误的帧结束标志                          
 133   3                      {
 134   4                              b_validFrame=0;//置数据帧无效标志
 135   4                      }
 136   3                      else                                                            
 137   3                      {
 138   4                              b_validFrame=1;//一个数据帧接收完毕                                               
 139   4                      }                                                               
 140   3                      m_frameStatus=0x00;//复位状标志,准备接收下一帧数据                                     
 141   3              }
 142   2      }
 143   1      }
 144          
 145          void main(void)
 146          {
 147   1              systeminitial();
 148   1      }


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