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

📄 seriele.lst

📁 Can bus 测试程序!SJA1000芯片!
💻 LST
字号:
C51 COMPILER V7.01  SERIELE                                                                11/22/2002 10:29:10 PAGE 1   


C51 COMPILER V7.01, COMPILATION OF MODULE SERIELE
OBJECT MODULE PLACED IN Seriele.OBJ
COMPILER INVOKED BY: D:\KEIL\C51\BIN\C51.EXE Seriele.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #ifndef  _SERIAL_H
   2          #define  _SERIAL_H
   3          
   4          #include "reg66x.H"
   5          #include <intrins.h>
   6          #include <string.h>
   7          //数据类型定义
   8          #define   uchar  unsigned char
   9          #define   ulong  unsigned long
  10          #define   uint   unsigned int  
  11          //串口状态定义
  12          #define   RCV_IDH      0             //接收描述符的高8位
  13          #define   RCV_IDL      1             //接收id的低3位+rtr位+dlc(4位)
  14          #define   RCV_DATA     2             //接收数据
  15          
  16          
  17          uchar     data  Rcv_Status=0;        //接收状态字节
  18          uchar     data  Rcv_Point =0;        //接收计数
  19          
  20          uchar     data  Send_Point=0;        //发送计数 
  21          
  22          uchar     idata  RcvBuf[0x10];        //接收数据缓冲区
  23          uchar     idata  SendBuf[0x10];       //发送数据缓冲区
  24          extern     uchar     data   DispBuf[5];
  25          
  26          bit       UartRcvGood;
  27          
  28          void  InitUart(void);               //初始化串口
  29          
  30          void   Exe_Scon(uchar cmd,uchar dlc,uchar *databuf);//串口发送函数
  31          
  32          /*-------------------------------------------------------------------------------------------
  33           串口中断函数
  34           -------------------------------------------------------------------------------------------*/    
  35          void  Uart_Val(void)  interrupt 4   using 3
  36          {
  37   1        uchar   TempData;    //临时变量
  38   1        if(_testbit_(RI))
  39   1        {
  40   2          TempData=S0BUF;
  41   2          switch(Rcv_Status)
  42   2          { 
  43   3            case RCV_IDH:
  44   3                 RcvBuf[0]=TempData;
  45   3                         Rcv_Status++;
  46   3                         break;
  47   3            case RCV_IDL:
  48   3                     RcvBuf[1]=TempData;
  49   3                         if((RcvBuf[1]&0x10)!=0)           //远程帧
  50   3                         {
  51   4                   Rcv_Status=0;
  52   4                           UartRcvGood=1;
  53   4                         }
  54   3                         else                                                         //数据帧
  55   3                         {
C51 COMPILER V7.01  SERIELE                                                                11/22/2002 10:29:10 PAGE 2   

  56   4                           Rcv_Point=2;//TempData&0x0f;     //取数据长度
  57   4                           Rcv_Status++;
  58   4                         }
  59   3                         break;
  60   3            case RCV_DATA:
  61   3                     RcvBuf[Rcv_Point]=TempData;
  62   3                 Rcv_Point++;
  63   3                         if((Rcv_Point-2)==(RcvBuf[1]&0x0f))
  64   3                 {
  65   4                   Rcv_Point=0;
  66   4                   Rcv_Status=0;
  67   4                               UartRcvGood=1;
  68   4                         }
  69   3                         break;
  70   3            default:
  71   3                 break; 
  72   3          }
  73   2        }                     //结束if(_testbit(RI))
  74   1        if(_testbit_(TI))
  75   1        {
  76   2          Send_Point++;        
  77   2          if(Send_Point<(SendBuf[2]+4))   //未发送完毕,继续发送
  78   2            S0BUF=SendBuf[Send_Point];
  79   2          else
  80   2          {
  81   3           Send_Point=0;
  82   3          }
  83   2        }//结束if(_testbit(TI))
  84   1      } 
  85          
  86          
  87          /*-------------------------------------------------------------------------------------------
  88           函数原型:  void  InitUart(void)                                    
  89           参数说明:  无                                                        
  90           返回值:    无 
  91           说明:          用于初始化串口               
  92           -------------------------------------------------------------------------------------------*/    
  93          void  InitUart(void)
  94          {
  95   1        S0CON =  0x50;     //串口工作方式1
  96   1        TMOD |= 0x20;     //T1,初值自动重装
  97   1        TH1  =  0xfd;     //波特率9600bps  @ 11,0592M
  98   1        TL1  =  0xfd; 
  99   1        TR1  =  1;        //开始计数
 100   1        IEN0  |=  0x90;     //开放串口中断
 101   1      
 102   1      }
 103          
 104          //
 105          void   Exe_Scon(uchar cmd,uchar dlc,uchar *databuf)
 106          { 
 107   1        uchar  i,bcc=0;
 108   1        SendBuf[0] = 0x00;
 109   1        SendBuf[1] = cmd;
 110   1        SendBuf[2] = dlc;
 111   1        memcpy(&(SendBuf+3),databuf,dlc); 
 112   1        for(i=0; i<dlc+3;i++)
 113   1          bcc^=SendBuf[i];
 114   1        SendBuf[dlc+3] = bcc;
 115   1        Send_Point=0; 
 116   1        S0BUF  = SendBuf[0];
 117   1      }
C51 COMPILER V7.01  SERIELE                                                                11/22/2002 10:29:10 PAGE 3   

 118          
 119          #endif


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