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

📄 sja1000.c

📁 can 控 制 器 初 石 化 程序
💻 C
📖 第 1 页 / 共 3 页
字号:
/*****************************************************************************************
版权所有:   极限科技
版本号:     2.52
文件名:     OUTDOOR.C
生成日期:   1900.1.1
作者:       影舞者
功能说明:   SJA1000配置文件
其它说明:   无
*****************************************************************************************/
#include  "stdio.h"
#include  "string.h"
#include  "intrins.h"
#include  "define_reg.h"



/*****************************************************************************************
版权所有:   极限科技
版本号:     2.52
生成日期:   1900.1.1
功能说明:   计算SJA1000在电路中的实际地址:基址+内部寄存器地址
其它说明:   以下的定义为SJA1000的内部寄存器的地址,不可修改
           各寄存器的具体功能清参阅sja1000的数据手册
*****************************************************************************************/
// 控制寄存器
#define         REG_MODE          0x00       //内部控制寄存器
#define         REG_COMMAND       0x01       //命令寄存器
#define         REG_STATUS        0x02       //状态寄存器
#define         REG_INTERRUPT     0x03       //中断寄存器
#define         REG_INTENABLE     0x04       //中断使能寄存器
#define         REG_BTR0          0x06       //总线定时寄存器0
#define         REG_BTR1          0x07       //总线定时寄存器1
#define         REG_OCR           0x08       //输出控制寄存器
#define         REG_TEST          0x09       //测试寄存器

#define         REG_RESVER1       0x0A       //保留1
#define         REG_ARBITRATE     0x0B       //仲裁丢失捕捉
#define         REG_ERRCATCH      0x0C       //错误代码捕捉
#define         REG_ERRLIMIT      0x0D       //错误报警限额

#define         REG_RXERR         0x0E         //接收错误计数器
#define         REG_TXERR         0x0F         //发送错误计数器

#define         REG_ACR1          0x10       //验收代码寄存器
#define         REG_ACR2          0x11       //验收代码寄存器
#define         REG_ACR3          0x12       //验收代码寄存器
#define         REG_ACR4          0x13       //验收代码寄存器
#define         REG_AMR1          0x14       //验收屏蔽寄存器
#define         REG_AMR2          0x15       //验收屏蔽寄存器
#define         REG_AMR3          0x16       //验收屏蔽寄存器
#define         REG_AMR4          0x17       //验收屏蔽寄存器


// 发送缓冲区寄存器
#define         REG_TXD_FID       0x10         //发送缓冲区1
#define         REG_TXD_ID1       0x11         //发送缓冲区2
#define         REG_TXD_ID2       0x12         //发送缓冲区3
#define         REG_TXD_ID3       0x13         //发送缓冲区4
#define         REG_TXD_ID4       0x14         //发送缓冲区5
#define         REG_TXBuffer1     0x15         //发送缓冲区6
#define         REG_TXBuffer2     0x16         //发送缓冲区7
#define         REG_TXBuffer3     0x17         //发送缓冲区8
#define         REG_TXBuffer4     0x18         //发送缓冲区9
#define         REG_TXBuffer5     0x19         //发送缓冲区10
#define         REG_TXBuffer6     0x1A         //发送缓冲区11
#define         REG_TXBuffer7     0x1B         //发送缓冲区12
#define         REG_TXBuffer8     0x1C         //发送缓冲区13

// 接收缓冲区寄存器
#define         REG_RXD_FID       0x10         //接收缓冲区1
#define         REG_RXD_ID1       0x11         //接收缓冲区2
#define         REG_RXD_ID2       0x12         //接收缓冲区3
#define         REG_RXD_ID3       0x13         //接收缓冲区4
#define         REG_RXD_ID4       0x14         //接收缓冲区5
#define         REG_RXBuffer1     0x15         //接收缓冲区6
#define         REG_RXBuffer2     0x16         //接收缓冲区7
#define         REG_RXBuffer3     0x17         //接收缓冲区8
#define         REG_RXBuffer4     0x18         //接收缓冲区9
#define         REG_RXBuffer5     0x19         //接收缓冲区10
#define         REG_RXBuffer6     0x1A         //接收缓冲区11
#define         REG_RXBuffer7     0x1B         //接收缓冲区12
#define         REG_RXBuffer8     0x1C         //接收缓冲区13

#define         REG_RXCOUNT       0x1D         //RX报文计数器
#define         REG_RBSA          0x1E         //接收缓冲区起始地址
#define         REG_CDR           0x1F         //时钟分频寄存器





/*****************************************************************************************
版权所有:   极限科技
版本号:     2.52
生成日期:   1900.1.1
功能说明:   CAN控制器SJA1000通讯波特率.SJA1000的晶振为必须为16MHZ
其它说明:
*****************************************************************************************/
#define         BTR0_Rate_20k      0x53          //20KBPS的预设值
#define         BTR1_Rate_20k      0x2F          //20KBPS的预设值
#define         BTR0_Rate_40k      0x87          //40KBPS的预设值
#define         BTR1_Rate_40k      0xFF          //40KBPS的预设值
#define         BTR0_Rate_50k      0x47          //50KBPS的预设值
#define         BTR1_Rate_50k      0x2F          //50KBPS的预设值
#define         BTR0_Rate_80k      0x83          //80KBPS的预设值
#define         BTR1_Rate_80k      0xFF          //80KBPS的预设值
#define         BTR0_Rate_100k     0x43          //100KBPS的预设值
#define         BTR1_Rate_100k     0x2f          //100KBPS的预设值
#define         BTR0_Rate_125k     0x03          //125KBPS的预设值
#define         BTR1_Rate_125k     0x1c          //125KBPS的预设值
#define         BTR0_Rate_200k     0x81          //200KBPS的预设值
#define         BTR1_Rate_200k     0xFA          //200KBPS的预设值
#define         BTR0_Rate_250k     0x01          //250KBPS的预设值
#define         BTR1_Rate_250k     0x1c          //250KBPS的预设值
#define         BTR0_Rate_400k     0x80          //400KBPS的预设值
#define         BTR1_Rate_400k     0xfa          //400KBPS的预设值
#define         BTR0_Rate_500k     0x00          //500KBPS的预设值
#define         BTR1_Rate_500k     0x1c          //500KBPS的预设值
#define         BTR0_Rate_666k     0x80          //666KBPS的预设值
#define         BTR1_Rate_666k     0xb6          //666KBPS的预设值
#define         BTR0_Rate_800k     0x00          //800KBPS的预设值
#define         BTR1_Rate_800k     0x16          //800KBPS的预设值
#define         BTR0_Rate_1000k    0x00          //1000KBPS的预设值
#define         BTR1_Rate_1000k    0x14          //1000KBPS的预设值






/*****************************************************************************************
版权所有:   极限科技
版本号:     2.52
生成日期:   1900.1.1
功能说明:   定义系统参数
其它说明:   无
*****************************************************************************************/
// 本地的IP地址
#define    Local_IP1   1    // IP地址最高位
#define    Local_IP2   2
#define    Local_IP3   3
#define    Local_IP4   4    // IP地址最低位

// 本地的CAN标识
#define    REG_ACR1_FID  Local_IP4   // 滤波器的标识符最高位
#define    REG_ACR2_FID  Local_IP3
#define    REG_ACR3_FID  Local_IP2
#define    REG_ACR4_FID  Local_IP1   // 滤波器的标识符最低位
#define    REG_AMR1_FID  0x00        // 滤波器的屏蔽符最高位
#define    REG_AMR2_FID  0x00
#define    REG_AMR3_FID  0x03
#define    REG_AMR4_FID  0x07        // 滤波器的屏蔽符最低位

// 发往目标CAN标识
#define    SEND_ACR1_FID   Local_IP4   // 滤波器的最高位
#define    SEND_ACR2_FID   Local_IP3
#define    SEND_ACR3_FID   Local_IP2
#define    SEND_ACR4_FID   Local_IP1   // 滤波器的最低位

// 模式参数
#define    REG_MODE_DATA         0x0C    // 模式控制器:     单滤波器、自检测模式
#define    REG_TEST_DATA         0xAA    // 测试值
#define    REG_CDR_DATA          0x88    // 时分控制的值:    PeilCAN模式、CLOCK无效
#define    REG_INTENABLE_DATA    0x83    // 中断使能控制的值: 总线错误中断、发送中断、接收中断
#define    REG_OCR_DATA          0x1A    // 输出控制的值:

// 定义命令字
#define    TXD_ONE_CMD      0x03    // 产生一次报文发送,当错误时不再生发(单次发送)
#define    TXD_CMD          0x01    // 发送请求命令,当错误时可重发
#define    T_R_CMD          0x12    // 产生一次自接收性质的报文发送,发送错误时不会重发
#define    AT_CMD           0x02    // 中止发送命令
#define    RRB_CMD          0x04    // 释放接收缓冲区
#define    COS_CMD          0x08    // 数据溢出清除命令





/*****************************************************************************************
版权所有:   极限科技
版本号:     2.52
生成日期:   1900.1.1
功能说明:   定时器应用定义
其它说明:   无
*****************************************************************************************/
//定时器0,50ms中断一次
//11.0592MHZ下
#define timer0_dl   0x00  //定义定时器0低8位
#define timer0_dh   0x4C  //定义定时器0高8位





/*****************************************************************************************
版权所有:   极限科技
版本号:     2.52
生成日期:   1900.1.1
功能说明:   全局函数应用定义
其它说明:   无
*****************************************************************************************/
void           Main_Init_Self(void);
void           SJA1000_WRITE(unsigned char ADDRESS,unsigned char A_DATA);
unsigned char  SJA1000_READ(unsigned char ADDRESS);
void           Init_SJA1000_HardWare(void);
unsigned char  Init_SJA1000_Soft(void);
unsigned char  SJA1000_DATA_SEND(unsigned char * SendDataBuf,unsigned int Message_Longth,unsigned char CH_RTR);
unsigned char  SJA1000_CMD_PRG(unsigned char cmd);




/*****************************************************************************************
版权所有:   极限科技
版本号:     2.52
生成日期:   1900.1.1
功能说明:   定义系统的运行状态显示
其它说明:   无
*****************************************************************************************/
unsigned char    run_lamp_flush_count = 0;
unsigned char    run_lamp_flush_time = 10;
sbit  run_lamp = P1^1;





/*****************************************************************************************
版权所有:   极限科技
版本号:     2.52
生成日期:   1900.1.1
功能说明:   SJA1000控制线
其它说明:   无
*****************************************************************************************/
sbit  SJA1000_ALE_PIN = P1^0;    // SJA1000的ALE信号线
sbit  SJA1000_RST_PIN = P1^2;    // SJA1000的RST信号线
sbit  SJA1000_INT_PIN = P1^3;    // SJA1000的INT信号线
sbit  SJA1000_CS_PIN = P1^4;     // SJA1000的CS信号线
sbit  SJA1000_RD_PIN = P1^5;     // SJA1000的RD信号线
sbit  SJA1000_WR_PIN = P1^6;     // SJA1000的WR信号线
#define  SJA1000_DATE_PORT   P3  // SJA1000的地址、数据线


/*****************************************************************************************
函数名称:      void Timer0_int() interrupt 1
版本号:        2.52
生成日期:      1900.1.1
作者:          影舞者
功能说明:      定时器0中断程序:  运行状态
输入参数:
输出参数:
函数扇出清单:
函数扇入清单:
其它说明:
*****************************************************************************************/
void Timer0_int() interrupt 1           //定时器0中断程序
{
    TF0 = 0;     //定时器0中断标志位清0

    // 运行闪烁
    if(run_lamp_flush_count >= run_lamp_flush_time)
    {

⌨️ 快捷键说明

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