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

📄 main.lst

📁 CAN总线通信程序
💻 LST
字号:
C51 COMPILER V7.06   MAIN                                                                  03/08/2008 11:03:47 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /******************************************************
   2          **说明:此程序为Peli模式自测试程序,需要硬件四个LED,四个按键,
   3          **      当然按键可以不要,LED只用一个也行,只是不够直观。
   4          **      还有本程序是按一次按键,进入接收中断两次,也即是流水灯
   5          **      会流动两次,串口也会收到两次数据,原因未知,看来对CAN的体
   6          **      会还很有限。
   7          **作者:桂电飞天鼠
   8          **日期:2007。06。04
   9          **邮件:mozhenhua211@tom.com
  10          **备注:不知道为什么用STC的单片机老是没反应,郁闷~由于本人毕设验收在即,
  11          **      所以暂时没继续寻找原因,待毕设完成再详细探讨。另外按键部分的处理
  12          **      以及SJA的驱动部分感觉十分累赘,编程风格目前正在形成中,望各位前辈
  13          **      指点一下。谢谢!
  14          *******************************************************/
  15          
  16          #include <at89x51.h>
  17          #include "SJA1000_PELI.h"
  18          
  19          sfr WDT_CONTR = 0xe1;
  20          
  21          #define LED0     P1_0   
  22          #define LED1     P1_1
  23          #define LED2     P1_2
  24          #define LED3     P1_3
  25          
  26          #define KEY0     P1_4
  27          #define KEY1     P1_5
  28          #define KEY2     P1_6
  29          #define KEY3     P1_7
  30          
  31          extern bit g_RiFlag;
  32          
  33          
  34          extern void SJAInit(void);
  35          extern bit SJASendData(unsigned char *SendDataBuf);
  36          extern bit SJAReceData(unsigned char *ReceiveDataBuf);
  37          
  38          void RS232Init(void);
  39          void DelayTime (unsigned char times);
  40          
  41          unsigned char TX[11];
  42          unsigned char RX[11];
  43          
  44          
  45          
  46          void main(void)
  47          {
  48   1              unsigned char i;
  49   1              unsigned char tempdata;
  50   1      
  51   1              P1 = 0xff;
  52   1              
  53   1                                                           
  54   1              SJA_RESET = 1;                        //SJA复位
  55   1          DelayTime(50);
C51 COMPILER V7.06   MAIN                                                                  03/08/2008 11:03:47 PAGE 2   

  56   1          SJA_RESET = 0;
  57   1          DelayTime(500);
  58   1          SJA_RESET=1;
  59   1      
  60   1          RS232Init();                                 //串口初始化,19200,1停止位,没校验
  61   1          SJAInit();                                   //SJA初始化,自收自发模式,在模式寄存器修改(0x00)
  62   1              //WDT_CONTR = 0x3c;                      //STC单片机的看门狗,喂狗
  63   1      
  64   1              EX0 = 1;
  65   1              EA  = 1;
  66   1              
  67   1              while(1)
  68   1              {       
  69   2                  if (KEY0 ==0)                        //假如按键KEY0按下,则进入发送
  70   2                      {
  71   3                          DelayTime(50);
  72   3                              if (KEY0 ==0)
  73   3                              {
  74   4                                  TX[0] = 0x08;        //标准帧
  75   4                                      TX[1] = 0xff;    //滤波全通
  76   4                                      TX[2] = 0xff;
  77   4      
  78   4                                  TX[3] = 0xfe;        //发送的数据,(在这里为流水灯的花式)
  79   4                                      TX[4] = 0xfd;
  80   4                                      TX[5] = 0xfb;
  81   4                                      TX[6] = 0xf7;
  82   4                                  TX[7] = 0xf7;
  83   4                                      TX[8] = 0xfb;
  84   4                                      TX[9] = 0xfd;
  85   4                                      TX[10] = 0xfe;
  86   4      
  87   4                                      SJASendData(TX);                 //把要发送的内容放到SJA的发送缓冲区
  88   4                                      SJARegWrite(0x01,0x10);  //启动自收发
  89   4                                      SJARegWrite(0x01,0x02);  //中止发送,即为单次发送,按一下,发送一次
  90   4                                      //LED0 = !LED0;
  91   4                              }
  92   3                      }
  93   2                  if (KEY1 ==0)
  94   2                      {
  95   3                          DelayTime(50);
  96   3                              if (KEY1 ==0)
  97   3                              {
  98   4                                  TX[0] = 0x08;  
  99   4                                      TX[1] = 0xff;
 100   4                                      TX[2] = 0xff;
 101   4      
 102   4                                  TX[3] = 0xf9;
 103   4                                      TX[4] = 0xf6;
 104   4                                      TX[5] = 0xf9;
 105   4                                      TX[6] = 0xf6;
 106   4                                  TX[7] = 0xf9;
 107   4                                      TX[8] = 0xf6;
 108   4                                      TX[9] = 0xf9;
 109   4                                      TX[10] = 0xf6;
 110   4      
 111   4                                      SJASendData(TX);
 112   4                                      SJARegWrite(0x01,0x10);
 113   4                                      SJARegWrite(0x01,0x02);
 114   4                              }
 115   3                      }
 116   2                  if (KEY2 ==0)
 117   2                      {
C51 COMPILER V7.06   MAIN                                                                  03/08/2008 11:03:47 PAGE 3   

 118   3                          DelayTime(50);
 119   3                              if (KEY2 ==0)
 120   3                              {
 121   4                                  TX[0] = 0x08;  
 122   4                                      TX[1] = 0xff;
 123   4                                      TX[2] = 0xff;
 124   4      
 125   4                                  TX[3] = 0xf1;
 126   4                                      TX[4] = 0xf2;
 127   4                                      TX[5] = 0xf4;
 128   4                                      TX[6] = 0xf8;
 129   4                                  TX[7] = 0xf1;
 130   4                                      TX[8] = 0xf2;
 131   4                                      TX[9] = 0xf4;
 132   4                                      TX[10] = 0xf8;
 133   4      
 134   4                                      SJASendData(TX);
 135   4                                      SJARegWrite(0x01,0x10);
 136   4                                      SJARegWrite(0x01,0x02);
 137   4                              }
 138   3                      }
 139   2                  if (KEY3 ==0)
 140   2                      {
 141   3                          DelayTime(50);
 142   3                              if (KEY3 ==0)
 143   3                              {
 144   4                                  TX[0] = 0x08;  
 145   4                                      TX[1] = 0xff;
 146   4                                      TX[2] = 0xff;
 147   4      
 148   4                                  TX[3] = 0xfc;
 149   4                                      TX[4] = 0xf9;
 150   4                                      TX[5] = 0xf3;
 151   4                                      TX[6] = 0xf6;
 152   4                                  TX[7] = 0xfc;
 153   4                                      TX[8] = 0xf9;
 154   4                                      TX[9] = 0xf3;
 155   4                                      TX[10] = 0xf6;
 156   4      
 157   4                                      SJASendData(TX);
 158   4                                      SJARegWrite(0x01,0x10);
 159   4                                      SJARegWrite(0x01,0x02);
 160   4                              }
 161   3                      }
 162   2      
 163   2                      if (g_RiFlag)                                   //SJA接收中断标志
 164   2                      {
 165   3                          g_RiFlag = 0;
 166   3                              SJAReceData(RX);                        //将接收到的内容从SJA的接收缓冲区读出
 167   3                              SJARegWrite(1,0x04);            //释放缓冲区
 168   3      
 169   3                              for (i=0; i<8; i++)                     //用四个LED循环显示接收到的八个数据(每个数据只用低四位)
 170   3                              {
 171   4                                 tempdata = RX[i+3];
 172   4                                 tempdata |= 0xf0;            //为了不改变键盘数值,加此句
 173   4                                 P1 =tempdata;
 174   4      
 175   4                                 SBUF =tempdata;                      //在显示的同时,也把数据往串口发送
 176   4                                 while(!TI);
 177   4                                 TI = 0;
 178   4                                 DelayTime(80); 
 179   4                              }
C51 COMPILER V7.06   MAIN                                                                  03/08/2008 11:03:47 PAGE 4   

 180   3      
 181   3                              P1 = 0xff;
 182   3                      }
 183   2      
 184   2                      //WDT_CONTR = 0x3c;                     //STC单片机的喂狗,用S51不用加此句
 185   2          }
 186   1      }
 187          
 188          void RS232Init(void)
 189          {
 190   1          SCON  = 0x50;       //SCON: serail mode 1, 8-bit UART, enable ucvr 
 191   1          TMOD |= 0x20;       //TMOD: timer 1, mode 2, 8-bit reload 
 192   1          PCON |= 0x80;       //SMOD=1; 
 193   1          TH1   = 0xFD;       //SMOD=1,Baud:19200  fosc=11.0592MHz
 194   1          //IE   |= 0x90;     //Enable Serial Interrupt 
 195   1          TR1   = 1;          // timer 1 run 
 196   1      }
 197          
 198          void DelayTime (unsigned char times)
 199          {
 200   1           unsigned char i=0;
 201   1           while(times--)
 202   1           {
 203   2               for(i=0;i<50;i++)
 204   2               {;}
 205   2           }
 206   1      }
 207          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    396    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     22       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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