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

📄 main.lst

📁 CAN通讯底层节点
💻 LST
字号:
C51 COMPILER V7.50   MAIN                                                                  04/23/2009 16:56:45 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*------------------------------------------------------------------------------
   2          ;CAN总线大坝监测系统
   3          ;底层节点
   4          ;文件名称: main.c
   5          ;函数功能:接收上层命令,采集返回数据
   6          ;MCU支持:  C8051F040
   7          ;上海富方软件合肥自动化分公司
   8          ;-----------------------------------------------------------------------------*/
   9          
  10          #include "c8051F040.h"
  11          #include "wdt_port_clk_init.h"
  12          #include "can.h" 
  13          
  14          
  15          
  16          ////////////////////////////////////////////////////////////////////////////////
  17          // 变量定义
  18          ////////////////////////////////////////////////////////////////////////////////
  19          unsigned char SFRPAGE_SAVE;                                                                                     // SFR页面保存
  20          
  21          unsigned char Wang_Data[6] = {0xc1,0xc2,0xc3,0xc4,0xc5,0xc6};           // 下层测量数据
  22          
  23          unsigned char Can_sdata[8];                                                                                     // CAN发送数组
  24          unsigned char Can_rdata[8];                                                                                     // CAN接收数组
  25          
  26          unsigned char Answer_Data[6] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};         // 底层应答数组
  27          
  28          bit Rec_From_CAN;                                                                                                       // 标志从CAN收到命令
  29          
  30                  
  31          
  32          ////////////////////////////////////////////////////////////////////////////////
  33          //主函数
  34          ////////////////////////////////////////////////////////////////////////////////
  35          void main(){
  36   1      /* 关看门狗,端口及时钟初始化 */
  37   1          Watchdog_Close ();
  38   1          Port_Config ();
  39   1              Sysclk_Init ();
  40   1      /* CAN消息块初始化 */
  41   1              Can_Msg_Init();
  42   1      /* 开中断 */   
  43   1          EA = 1;  
  44   1      /* 正常运行 */  
  45   1          while(1){
  46   2              Rec_From_CAN = 0;       
  47   2              while(!Rec_From_CAN);
  48   2      
  49   2                      /* 如果是所有模块复位 */
  50   2                      if( (Can_rdata[0]&0xE0) == 0x60 ){
  51   3                              SFRPAGE = LEGACY_PAGE;      // 跳至复位寄存器页0x00
  52   3                          RSTSRC |= 0x10;             // 软件复位
  53   3                      }
  54   2      
  55   2                      /* 如果是全体测量 */ 
C51 COMPILER V7.50   MAIN                                                                  04/23/2009 16:56:45 PAGE 2   

  56   2                      else if( (Can_rdata[0]&0xE0) == 0xE0 ){
  57   3                      /*以下为实际测量操作
  58   3      
  59   3                      */
  60   3                      }
  61   2      
  62   2                      /* 如果是单个模块复位 */
  63   2                      else if( (Can_rdata[0]&0xE0) == 0x80){
  64   3                              SFRPAGE = CAN0_PAGE;
  65   3                              CAN0STA &= 0xf7;                        // TxOk置零,未传送完报文
  66   3                              
  67   3                              Can_Tx_Back(Answer_Data);   // 应答
  68   3                              while( ! (CAN0STA & 0x08) );
  69   3                              
  70   3                              SFRPAGE = LEGACY_PAGE;      // 跳至复位寄存器页0x00
  71   3                          RSTSRC |= 0x10;             // 软件复位
  72   3                      }
  73   2                      
  74   2                      /* 如果是单个模块测量 */
  75   2                      else if( (Can_rdata[0]&0xE0) == 0xC0 ){
  76   3                              Can_Tx_Back(Answer_Data);   // 应答
  77   3                              /*以下为实际测量操作
  78   3      
  79   3                      */
  80   3                      }
  81   2      
  82   2                      /* 如果是单个模块取数 */
  83   2                      else if( (Can_rdata[0]&0xE0) == 0xA0 ){
  84   3                      /*此处应修改为实际数据 */
  85   3                              Can_Tx_Back(Wang_Data);   // 应答
  86   3                      }
  87   2              }
  88   1      }
  89          
  90          
  91          
  92          
  93          


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