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

📄 main.lst

📁 CAN总线控制器SJA1000的设置和初始化代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 106   1              SetBitMask(REG_CAN_MOD,STM_BIT);                                                                        //选择自检测模式
 107   1              WriteSJARegBlock(16,&CAN_Baudrate_Filter_Buffer[1],8);                          //设置验收代码/屏蔽寄存器
 108   1              WriteSJAReg(REG_CAN_OCR,0x1a);                                                                          //设置输出管脚
 109   1              SJASetBaudrateStandard(CAN_Baudrate_Filter_Buffer[0]);                          //设置总线定时器,确定波特率
 110   1              SJAQuitResetMode();                                                                                                     //退出复位模式
 111   1      }
 112          
 113          /*--------------------------------------------------------------------------------------------------------
 114          ** 函数原型:    unsigned char   Send_Sja1000_Self(void)
 115          ** 功能描述:    把键盘数据传送到SJA1000的接收缓冲区,并进行自发自收的测试
 116          ** 参数说明:    无                                                         
 117          ** 返回值:      0                       失败
C51 COMPILER V7.07   MAIN                                                                  02/09/2004 16:12:39 PAGE 3   

 118          **                      1                       成功
 119          /*------------------------------------------------------------------------------------------------------*/
 120          unsigned char Send_Sja1000_Self(void)
 121          { 
 122   1              uchar i;
 123   1              SJA1000_Config_Self();
 124   1              WriteSJAReg(REG_CAN_IER,0x03);                                                          //使能接收发送中断标志位
 125   1              Delay_ms(100);
 126   1              for(i=0;i<2;i++)                                                                                             
 127   1              {           
 128   2                      if((ReadSJAReg(REG_CAN_SR)&0x0c)==0x0c)                                                 //判断是否可以发送           
 129   2                      {            
 130   3                      WriteSJARegBlock(16,Send_CAN_Info_ID,5);                                        //扩展帧,向发送缓冲区写入5个数据
 131   3                              WriteSJARegBlock(21,Send_Data_For_Self,8);                                      //扩展帧,向发送缓冲区写入8个数据
 132   3                              SetBitMask(REG_CAN_CMR,SRR_BIT);                                                        //使能自发送请求标志位
 133   3                              return(1);                                                                                                      //返回发送成功标志
 134   3                      }                                    
 135   2                      else                                                
 136   2              {                                                                     
 137   3                              Delay_ms(200);                                                                                          //延时200ms        
 138   3                      }
 139   2              return(0);                                                                                                                      //返回发送失败标志
 140   2              }
 141   1      }
 142          
 143          /*--------------------------------------------------------------------------------------------------------
 144          ** 函数原型:    void    main(void)
 145          ** 功能描述:    主函数
 146          ** 参数说明:    无                                          
 147          ** 返回值:      无
 148          /*------------------------------------------------------------------------------------------------------*/
 149          void main()
 150          {
 151   1              RESET_PIN=0;                                                                                                            //将SJA1000的复位线与P1.0相连接
 152   1              Delay_ms(1);
 153   1              RESET_PIN=1;                                                                                                            //控制P1.0来实现SJA1000的复位
 154   1              SJA_CS_Point=&CAN_SJA_BaseAdr;                                                                          //确定SJA1000的基址
 155   1              ScanNum[0]=0;                                                                                                           //不显示
 156   1              Display_Buffer[0]=0x1f; 
 157   1              ZLG7290_SendDisBuf(Display_Buffer,0);
 158   1              ISendStr(ZLG7290,0x0d,ScanNum,1);
 159   1              Delay_ms(100);
 160   1              if(Send_Sja1000_Self())
 161   1              {       
 162   2                      Delay_ms(200);
 163   2                      if((ReadSJAReg(REG_CAN_IR)==0x03))      
 164   2                      {
 165   3                              WriteSJAReg(REG_CAN_CMR,4);                                                                     //释放接收缓冲区
 166   3                              ScanNum[0]=3;                                                                                           //扫描4位
 167   3                              Display_Buffer[0]=0x0d;                                                                         //显示Good
 168   3                              Display_Buffer[1]=0x15;
 169   3                              Display_Buffer[2]=0x15;
 170   3                              Display_Buffer[3]=0x10;
 171   3                              ISendStr(ZLG7290,0x0d,ScanNum,1);
 172   3                              ZLG7290_SendDisBuf(Display_Buffer,4);
 173   3                      }
 174   2                      else
 175   2                      {
 176   3                              ScanNum[0]=4;                                                                                           //扫描5位
 177   3                              Display_Buffer[0]=0x18;                                                                         //显示Error
 178   3                              Display_Buffer[1]=0x15;
 179   3                              Display_Buffer[2]=0x18;
C51 COMPILER V7.07   MAIN                                                                  02/09/2004 16:12:39 PAGE 4   

 180   3                              Display_Buffer[3]=0x18;
 181   3                              Display_Buffer[4]=0x0e;
 182   3                              ISendStr(ZLG7290,0x0d,ScanNum,1);
 183   3                              ZLG7290_SendDisBuf(Display_Buffer,5);
 184   3                      }
 185   2              }       
 186   1              else
 187   1              {
 188   2                      ScanNum[0]=4;                                                                                                   //扫描5位
 189   2                      Display_Buffer[0]=0x18;                                                                                 //显示Error
 190   2                      Display_Buffer[1]=0x15;
 191   2                      Display_Buffer[2]=0x18;
 192   2                      Display_Buffer[3]=0x18;
 193   2                      Display_Buffer[4]=0x0e;
 194   2                      ISendStr(ZLG7290,0x0d,ScanNum,1);
 195   2                      ZLG7290_SendDisBuf(Display_Buffer,5);   
 196   2              }
 197   1              while(1)
 198   1              {       
 199   2                      ;                       
 200   2              }
 201   1      }


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