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

📄 main.lst

📁 can总线知识.rar
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V6.23a  MAIN                                                                  08/06/2002 16:18:58 PAGE 1   


C51 COMPILER V6.23a, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: E:\KEIL\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /************************************************************************
   2           *   广州周立功单片机发展有限公司    http://www.zlgmcu.com              *
   3           ************************************************************************/
   4          /************************************************************************
   5           *                                                                      *
   6           *  SJA1000 BasicCAN模式的通讯测试                                                                              *
   7           *                                                                      *
   8           ************************************************************************/
   9          /************************************************************************
  10           *                                                                      *
  11           *  目的:       建立直观的BasicCAN测试平台                                                              *                                    
  12           *  文件名:             main.c                                                  *
  13           *                                                                      *
  14           *  模块名:             sjanetdemo                                              *
  15           *                                                                      *
  16           *  目标系统:   任何基于任何兼容8051指令的微处理器同SJA1000组成的CAN系统*
  17           *                                                                      *
  18           *  应用语言:   Keil C51                                                *
  19           *                                                                      *
  20           ************************************************************************
  21           *  版本 :V1.0                                                          *
  22           *                                                                      *
  23           ************************************************************************
  24           *  广州周立功单片机发展有限公司 保留所有的版权                         *
  25           ************************************************************************/
  26          
  27          #include <AT89X51.H>   
  28          #include <intrins.h>     
  29          #include  "time_module.C"                               
  30          #include  "sja_bcanFunc.C"
  31          //#include      "sja_peliConf.h"
  32          #include  "seriele.c"
  33          #include  "keyled.c"
  34          //数据类型定义
  35          #define   uchar  unsigned char                          
  36          #define   ulong  unsigned long
  37          #define   uint   unsigned int  
  38          
  39          
  40          //设置系统数据缓冲区
  41          static    uchar  data       SetSystemBuf[10];   //系统设置数据缓冲区    
  42          
  43          static    uchar  data       BandRateBuf;        //设置总线波特率值缓冲区  
  44          
  45          static    uchar  idata      EditMsSendCount;    //编辑自动发送的频率
  46          static    uchar  idata      EditMsSendSave;         //保存自动发送的频率
  47          
  48          static    uchar  idata      SendDataCount;          //发送数据显示
  49          
  50          //键盘操作函数
  51          extern void           Write_Xdata(uint Xadr,uchar Info);    // 将info送入外部地址xadr中
  52          extern uchar      Read_Xdata(uint Xadr);                                //从外部地址xadr中读取数据
  53          extern void       Key_Scan(void);                                               //键盘扫描程序
  54          extern uchar      Key_Get(void);                                                //取键盘值
  55          extern void       PushKey(uchar keynum);                        //将键值送入按键处理队列
C51 COMPILER V6.23a  MAIN                                                                  08/06/2002 16:18:58 PAGE 2   

  56          extern uchar      PopKey(void);                                                 //
  57          
  58          void      Key_handle(void);                                             //处理键值
  59          
  60          void      FundationKey(void);                   //功能键
  61          void      MoveKey(void);                            //移位键
  62          void      SearchKey(void);                      //检索键
  63          void      EnterKey(void);                       //确认键
  64          void      IncKey(void);                         //增加键
  65          void      QuitKey(void);                        //退出键
  66          void      CanSendKey(void);                                             //发送键
  67          
  68          void      EnterNext(void);                      //按确认键后进入下一小项处理
  69          //led  送显
  70          #define   LED_SelBit()   disp_pt++;if(disp_pt>4)disp_pt=0//位选        
  71          extern    void      Show_LED(void);                                             //显示处理
  72          extern    void      Write_DispBuf(uchar buf0,uchar buf1,uchar buf2,uchar buf3,uchar buf4);//写入显示缓冲区
  73          extern    uchar     GetLedData(void);                     //将显示的值换算
  74          extern    void      Error_disp(uchar ErrByte);            //将错误字送显
  75          
  76          void      InitCPU(void);                        //初始化函数
  77          // 配置sja1000
  78          uchar  Config_SJA(void);                        //配置sja1000
  79          void   CanRcv_Prg(void);                                //can总线数据接收后处理
  80          void   CanSend_Prg(void);                                       //can发送数据
  81          void   CanErr_Prg(void);                            //发现错误后处理
  82          void   CanDtOver_Prg(void);                     //超载处理
  83          void   CanWui_Prg(void);                        //唤醒中断处理
  84          
  85          void   UartRcv_Prg(void);                                               //串口接收到数据处理
  86          
  87          void   DrecDisplay(uchar *databuf);                     //直通显示处理函数
  88          void   TestDispPrg(void);                       //测试处理函数
  89          void   ClearDispPrg(uchar *databuf);                    //消隐处理函数
  90          void   FlightDispPrg(uchar *databuf);                   //闪烁处理函数  
  91          void   LiftCrcDispPrg(uchar *databuf);          //左循环显示处理
  92          void   RightCrcDispPrg(uchar *databuf);         //右循环显示处理
  93          
  94          void   AutoSendDataToCanBus(void);                              //自动发送
  95          
  96          // 外部中断0
  97          static   uchar  bdata    CanBusFlag=0;                  //can标志
  98          sbit     CanRcv_Good=CanBusFlag^0;                              //成功接收标志
  99          sbit     CanSend_Good=CanBusFlag^1;                             //成功发送标志
 100          sbit     CanErrFlag=CanBusFlag^2;                               //can总线错误标志
 101          sbit     CanDtOverFlag=CanBusFlag^3;                    //can总线超载标志
 102          sbit     CanWuiFlag=CanBusFlag^4;                               //can总线唤醒中断
 103          
 104          /*-------------------------------------------------------------------------------------------
 105           外部中断0处理程序                     
 106           -------------------------------------------------------------------------------------------*/ 
 107          void  ex0_Val(void)  interrupt   0   using  1
 108          { 
 109   1        SJA_BCANAdr=REG_INTERRUPT;
 110   1        CanBusFlag=*SJA_BCANAdr;                                              //保存sja1000中断标志
 111   1      }
 112          
 113          /*-------------------------------------------------------------------------------------------
 114           main程序               
 115           -------------------------------------------------------------------------------------------*/ 
 116          void      main(void)
 117          {   
C51 COMPILER V6.23a  MAIN                                                                  08/06/2002 16:18:58 PAGE 3   

 118   1          uchar status;                                               //状态字 
 119   1              Delay_50us(100) ;                                               //50us*100=5ms
 120   1          status=Config_SJA();                                        //配置sja1000
 121   1              InitCPU();                                                              //初始化
 122   1              if(status!=0) Error_disp(status);           //配置sja1000出现错误
 123   1              else
 124   1          { Disp_Can();                                       //无措显示CAN1
 125   2            Exe_Scon(0xaa,0,0);
 126   2              }
 127   1          Write_Xdata(Mode_Select,0x00);
 128   1                                                                                              //设置并行方式
 129   1              TimeOut_Start(20);                                                      //20*50us=1ms,定时周期1ms
 130   1              while(1)
 131   1              {
 132   2                      if(_testbit_(T0IR))                                             //1ms时间到
 133   2                      {
 134   3                        LED_SelBit();                                                 //位选
 135   3                        Key_Scan();
 136   3                        Show_LED();
 137   3                        AutoSendDataToCanBus();
 138   3                    TimeOut_Start(20);                                        //20*50us=1ms,定时周期1ms
 139   3                      }
 140   2              //      CanBusFlag=Read_Xdata(REG_INTERRUPT);
 141   2              if(_testbit_(CanRcv_Good))  CanRcv_Prg();       //是接收中断标志
 142   2                      if(_testbit_(CanSend_Good)) CanSend_Prg();      //是发送中断标志
 143   2              if(_testbit_(CanErrFlag))   CanErr_Prg();       //是错误中断标志
 144   2                      if(_testbit_(CanDtOverFlag))CanDtOver_Prg();//是超载中断标志
 145   2              if(_testbit_(CanWuiFlag))   CanWui_Prg();       //是唤醒中断标志
 146   2              if(_testbit_(UartRcvGood))  UartRcv_Prg();      //串口接收成功标志
 147   2      
 148   2                      Key_handle();                                                           //键盘队列处理
 149   2              }
 150   1      
 151   1      }
 152          
 153          
 154          /*-------------------------------------------------------------------------------------------
 155           按键队列处理程序             
 156           -------------------------------------------------------------------------------------------*/ 
 157          void      Key_handle(void)
 158          {
 159   1              uchar TempData; 
 160   1          TempData=PopKey();
 161   1              switch(TempData)
 162   1          {
 163   2                case  Key0:
 164   2                      SearchKey();
 165   2                              break;
 166   2                case  Key1:
 167   2                      IncKey();
 168   2                              break;
 169   2                case  Key2:
 170   2                              break;
 171   2                case  Key3:
 172   2                  QuitKey();
 173   2                              break;
 174   2            case      Key4:
 175   2                      FundationKey();
 176   2                              break;
 177   2                case  Key5:
 178   2                      MoveKey();
 179   2                              break;
C51 COMPILER V6.23a  MAIN                                                                  08/06/2002 16:18:58 PAGE 4   

 180   2            case      Key6:
 181   2                  EnterKey();
 182   2                              break;
 183   2                case  Key7:
 184   2                      CanSendKey();
 185   2                              break;
 186   2      
 187   2            default:
 188   2                              break;
 189   2              }
 190   1      
 191   1      }
 192          
 193          
 194          
 195          //功能键处理
 196          bit       FunckeyFlag=0;                                      //进入功能标志  
 197          static    uchar     data FunckeyCount;            //功能选项计数
 198          void      FundationKey(void)
 199          {
 200   1        ClearDispAttr();  
 201   1        if(FunckeyFlag)
 202   1        {
 203   2          if(++FunckeyCount>3)FunckeyCount=0;
 204   2              switch(FunckeyCount)
 205   2              {
 206   3            case  0:
 207   3                      FunckeyFlag=0;
 208   3                              Disp_Can();                               //上电显示CAN1
 209   3                              DispFlag=0x00;
 210   3                              break;
 211   3                case  1:
 212   3                      Write_DispBuf(0,0x0b,0x01,0,0);    //进入b功能
 213   3                              FlightLed3=1;                      //led3闪烁
 214   3                              break;
 215   3                case  2:
 216   3                      Write_DispBuf(0,0x0c,0x01,0,0);       //进入c功能
 217   3                              FlightLed3=1;                         //led3闪烁
 218   3                              break;
 219   3                case  3:
 220   3                      Write_DispBuf(0,0x05,0x0d,0,0);       
 221   3                          break;
 222   3                default:
 223   3                      break;
 224   3              }
 225   2        }
 226   1        else
 227   1        {
 228   2           FunckeyFlag=1;
 229   2           Write_DispBuf(0,0x0a,0x01,0,0);       //a1功能
 230   2               FlightLed3=1;                         //led3闪烁
 231   2        }
 232   1      }
 233          
 234           //检索键处理
 235          static    uchar  data  SearchCount;        //检索计数器
 236          void      SearchKey(void)                  //检索键
 237          {
 238   1        if(FunckeyFlag)
 239   1        {
 240   2          switch(DispBuf[1])
 241   2              {
C51 COMPILER V6.23a  MAIN                                                                  08/06/2002 16:18:58 PAGE 5   

 242   3            case  0x0a:
 243   3                      SearchCount=DispBuf[2];        //检索a功能项  
 244   3                      if(++SearchCount>3)SearchCount=1;
 245   3                              DispBuf[2]=SearchCount;
 246   3                              break;
 247   3                case  0x0b:                           //检索b功能项 
 248   3                      SearchCount=DispBuf[2];         
 249   3                      if(++SearchCount>10)SearchCount=1;
 250   3                              DispBuf[2]=SearchCount;
 251   3                              break;
 252   3                case  0x0c:
 253   3                      
 254   3                default:
 255   3                      break;
 256   3              }
 257   2        }//if结束
 258   1      }
 259          
 260          
 261          //移位键处理
 262          static    bit   MoveFlag=0;            //移位计数    

⌨️ 快捷键说明

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