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

📄 can.lst

📁 基于MST-G240128点阵液晶的 状态机机制 人机界面四级滚屏菜单 源代码 ,带时间片机制模拟操作系统
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.02a   CAN                                                                  08/31/2006 08:52:05 PAGE 1   


C51 COMPILER V7.02a, COMPILATION OF MODULE CAN
OBJECT MODULE PLACED IN CAN.OBJ
COMPILER INVOKED BY: D:\KeilV702\C51\BIN\c51.exe CAN.c DB OE

stmt level    source

   1          /****************************************************************************
   2           **
   3           ** 文件名:  CAN.c
   4           ** 功能:    C8051Fxxx的CAN控制器驱动;
   5           ** 创建时间:2005.08.05
   6          
   7           ** 修改时间:2005.12.01
   8           ** 修改说明:
   9          
  10           ** 作者:    李立学
  11           ** 版权申明:可以拷贝,可以修改,但必须保留修改时间和作者信息
  12           ** 
  13           ****************************************************************************/
  14          
  15          #include "LZK.H"
  16          
  17          uint8 xdata CAN_SendDATA[8];
  18          uint8 xdata CAN_RecvDATA[8];
  19          
  20          /****************************************************************************
  21          ** 函数名称: CAN_Init(void)
  22          ** 功能描述: 初始化CAN控制器定时、波特率,使能CAN控制器
  23          ** 入口参数: 无
  24          ** 出口参数: 无
  25          ** 全局变量: 无
  26          ** 调用模块: 无
  27          ** 说明: 
  28          ****************************************************************************/
  29          void CAN_Init(void)
  30          {
  31   1         SFRPAGE = CAN0_PAGE;
  32   1         CAN0CN  = 0x41;  // 0100_0001, Set  CCE and INIT      
  33   1         // Bit7: TEST: Test Mode Enable bit.                   0: Disabled;
  34   1         // Bit6: CCE:  Configuration Change Enable bit, "CCE". 0: Disabled;
  35   1         // Bit5: DAR:  Disable Automatic Retransmission bit.   0: Eabled;
  36   1         // Bit4: CANIF:Module Interrupt Flag.                  1: CAN interrupt has occurred and is active, Cle
             -ared by hardware.        
  37   1         // Bit3: EIE:  Module Error  Interrupt Enable Bit.     1: Enabled;
  38   1         // Bit2: SIE:  Status change Interrupt Enable Bit.     1: Enabled;
  39   1         // Bit1: IE:   Module Interrupt Enable Bit.            1: Enabled IRQ_B;
  40   1         // Bit0: INIT: Initialization bit.                     0: Normal Operation;
  41   1         CAN0ADR = BRPEXT;     // Address for BRP Extension Register.
  42   1         CAN0DAT = 0x0000;     // BRPE = 0x00;
  43   1      
  44   1         CAN0ADR = BITREG;     // Address for Bit Timing register.
  45   1                               // Prop_Seg = 7 * 4 / 24 = 1166.7nS > 400nS.
  46   1         CAN0DAT = 7  << 12 |  // TSeg2 = (Phase_Seg2 - 1) = 8 - 1 = 7; 
  47   1                   14 << 8  |  // Tseg1 = (Prop_Seg + Phase_Seg1 - 1) = 7 + 8 - 1 = 14  
  48   1                   3  << 6  |  // SWJp  =  SWJ - 1 = 4 - 1 = 3; 
  49   1                   3;          // BRP   =  4. 
  50   1                               // Bit Time = Sync_Seg(1) + Prop_Seg(7) + Phase_Seg1(8) + Phase_Seg2(8);
  51   1                               // BautRate = 24M / 4 /(1 + 7 + 8 + 8) = 250K.
  52   1         // CAN0TST = 0x04;    // Basic Mode Enabled. IF1 Used as Tx Buffer, IF2 Used as Rx Buffer. 
  53   1         // Bit7:      Rx Monitors the actual value of the CAN_RX Pin
  54   1         //            CAN bus is recessive (CAN_RX = ‘1’) or dominant (CAN_RX = ‘0’).
C51 COMPILER V7.02a   CAN                                                                  08/31/2006 08:52:05 PAGE 2   

  55   1         // Bit[6..5]: Tx1-0 Control of CAN_TX pin
  56   1         //        00: Reset value, CAN_TX is controlled by the CAN Core.
  57   1         //        01: Sample Point can be monitored at CAN_TX pin.
  58   1         //        10: CAN_TX pin drives a dominant (‘0’) value.
  59   1         //        11: CAN_TX pin drives a recessive (‘1’) value.
  60   1         // Bit4:      LBack Loop Back Mode
  61   1         //  0/1:      Loop Back Mode is disabled / enabled.
  62   1         // Bit3:      Silent Silent Mode
  63   1         //  0/1:      Normal operation / The module is in Silent Mode
  64   1         // Bit2:      Basic Basic Mode
  65   1         //  0/1:      Basic Basic Mode Disabled / Eanabled. 
  66   1         //            In Basic Mode, IF1 Registers used as Tx Buffer, IF2 Registers used as Rx Buffer.
  67   1      
  68   1         CAN0ADR = IF1CMDMSK; // Point to Command Mask 1
  69   1         CAN0DAT = 0x0087;    // Config IF1 as TX.
  70   1              // WR/RD Mask Arb Control ClrIntPnd TxRqst/NewDat DataA DataB
  71   1         // 1(WR) 0    0   0       0         1             1     1
  72   1      
  73   1         CAN0ADR = IF2CMDMSK; // Point to Command Mask 2
  74   1         CAN0DAT = 0x001F;    // Config IF2 as RX.
  75   1              // WR/RD Mask Arb Control ClrIntPnd TxRqst/NewDat DataA DataB
  76   1         // 0(RD) 0    0   1       1         1             1     1
  77   1      
  78   1         CAN0CN &= ~0x41;     // CAN0CN = 0x00, Clear CCE and INIT bits, Starts CAN State machine
  79   1      }
  80          
  81          
  82          /****************************************************************************
  83          ** 函数名称: CAN_ClrMsgObject(void)
  84          ** 功能描述: 清除所有CAN控制器msg object.
  85          ** 入口参数: 无
  86          ** 出口参数: 无
  87          ** 全局变量: 无
  88          ** 调用模块: 无
  89          ** 说明: 
  90          ****************************************************************************/
  91          void CAN_ClrMsgObject(void)
  92          {
  93   1         uint8 i;   
  94   1      
  95   1         SFRPAGE  = CAN0_PAGE;
  96   1         CAN0ADR  = IF1CMDMSK;     // Point to Command Mask Register 1
  97   1         CAN0DATL = 0xFF;          // Set direction to WRITE all IF registers to Msg Obj
  98   1         for(i=1; i<=32; i++)
  99   1         {   
 100   2            CAN0ADR  = IF1CMDRQST; // Write blank (reset) IF registers to each msg obj
 101   2            CAN0DATL = i;
 102   2            DuS( CAN_6CLK );       // CAN_CLK = 6MHz, 6 CAN_CLK = 1uS. 
 103   2         }
 104   1      }
 105          
 106          
 107          // Initialize Message Object use IF2
 108          
 109          // IFx Mask 1 Register: 15..0
 110          //                      Msk15-0
 111          // IFx Mask 2 Register: 15     14    13    12..0
 112          //                      MXtd   MDir  reg   Msk28-16
 113          
 114          // IFx Arbitration 1 Register: 15..0
 115          //                             ID15-0
 116          // IFx Arbitration 2 Register: 15      14   13   12..0
C51 COMPILER V7.02a   CAN                                                                  08/31/2006 08:52:05 PAGE 3   

 117          //                             MsgVal  Xtd  Dir  ID28-16
 118          
 119          // IFx Message Control Register:
 120          //     bit  15      14      13     12     11    10     9      8      7    6..4  3..0
 121          //         NewDat  MsgLst  IntPnd  UMask  TxIE  RxIE  RmtEn  TxRqst  EoB  reg   DLC3-0
 122          
 123          // IFx Data A and Data B Registers
 124          // IFx Message Data A1:    data1    data0
 125          // IFx Message Data A2:    data3    data2
 126          // IFx Message Data B1:    data5    data4
 127          // IFx Message Data B2:    data7    data6
 128          
 129          /****************************************************************************
 130          ** 函数名称: CAN_ClrMsgObject(void)
 131          ** 功能描述: 清除所有CAN控制器msg object.
 132          ** 入口参数: 无
 133          ** 出口参数: 无
 134          ** 全局变量: 无
 135          ** 调用模块: 无
 136          ** 说明: 
 137          ****************************************************************************/
 138          void CAN_InitMsgObj(unsigned char MsgNum,unsigned int CmdMsk,unsigned int Msk1,unsigned int Msk2,unsigned 
             -int Arb1,unsigned int Arb2,unsigned int MsgCtrl)
 139          {
 140   1         SFRPAGE = CAN0_PAGE;          // 3-6 CAN clock cycles to move IF reg contents to the Msg Obj in CAN RAM
             -.
 141   1              CAN0ADR = IF1CMDMSK;          // Point to Command Mask 1
 142   1              CAN0DAT = CmdMsk;             // Set Command Mask Registers
 143   1              CAN0ADR = IF1MSK1;            // Point to Mask Registers
 144   1              CAN0DAT = Msk1;               // Mask1
 145   1              CAN0DAT = Msk2;               // Mask2
 146   1              CAN0DAT = Arb1;               // Arbitration1
 147   1              CAN0DAT = Arb2;               // Arbitration2
 148   1              CAN0DAT = MsgCtrl;            // Msg Cntrl
 149   1              CAN0ADR = IF1CMDRQST;         // Point to Command Request reg.
 150   1              CAN0DAT = MsgNum;             // Select Msg Obj passed into function parameter list --initiates write to 
             -Msg Obj.   
 151   1      }
 152          
 153          
 154          /****************************************************************************
 155          ** 函数名称: CAN_RunCtrl(bit RunCtrl)
 156          ** 功能描述: 启动/停止CAN控制器
 157          ** 入口参数: 无
 158          ** 出口参数: 无
 159          ** 全局变量: 无
 160          ** 调用模块: 无
 161          ** 说明: 
 162          ****************************************************************************/
 163          /*
 164          void CAN_RunCtrl(bit RunCtrl)
 165          {
 166             SFRPAGE = CAN0_PAGE;
 167          
 168                  if( RunCtrl )
 169               CAN0CN &= 0xfe;        // Clear the INIT bit.
 170             else
 171               CAN0CN |= 0x01;        // Set   the INIT bit.
 172          }
 173          */
 174          
 175          /****************************************************************************

⌨️ 快捷键说明

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