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

📄 sja1000.h

📁 遥控灯系统
💻 H
字号:
/*********************************************************************************************************
**				                                      SJA1000
**                                    The Drive Head file (For Keil c51)
**
**                                       (c) Copyright 2003-2004
**                                           All Rights Reserved
**
**                                                  V0.0.1
**
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名:SJA1000.H
**创   建   人: 
**最后修改日期:  2006年5月30日
**描        述: SJA1000 器件头文件
**
**------------------------------------------------------------------------------------------------------
*/
#ifndef _sja1000_H_
#define _sja1000_H_


#define XBYTE ((unsigned char volatile pdata *)0)
#define PeliCANMode 1             /* 1-PeliCAN 模式; 0-BasicCAN 模式  */

/*模式和控制寄存器的地址和位定义*/


#define ModeControlReg XBYTE[0]
#define RM_RR_Bit 0x01            /* 复位模式请求位                   */

#ifdef  PeliCANMode
#define LOM_Bit 0x02              /* 仅听模式位                       */
#define STM_Bit 0x04              /* 自我测试模式位                   */
#define AFM_Bit 0x08              /* 验收滤波器模式位                 */
#define SM_Bit 0x10               /* 进入休眠模式位                   */
#endif

/*中断使能和控制寄存器的地址和位定义 */
#ifdef  PeliCANMode               /* PeliCAN 模式                     */
#define InterruptEnReg XBYTE[4] 
#define RIE_Bit 0x01              /* 接收中断使能位                   */
#define TIE_Bit 0x02              /* 发送中断使能位                   */
#define EIE_Bit 0x04              /* 错误警告中断使能位               */
#define DOIE_Bit 0x08             /* 数据超载中断使能位               */
#define WUIE_Bit 0x10             /* 唤醒中断使能位                   */
#define EPIE_Bit 0x20             /* 错误隐性中断使能位               */
#define ALIE_Bit 0x40             /* 仲裁丢失中断使能位               */
#define BEIE_Bit 0x80             /* 总线错误中断使能位               */

#else                             /* BasicCAN 模式                    */
#define InterruptEnReg XBYTE[0]   /* 控制寄存器                       */
#define RIE_Bit 0x02              /* 接收中断使能位                   */
#define TIE_Bit 0x04              /* 发送中断使能位                   */
#define EIE_Bit 0x08              /* 错误中断使能位                   */
#define DOIE_Bit 0x10             /* 超载中断使能位                   */

#endif
/*命令寄存器的地址和位定义 */
#define CommandReg XBYTE[1]

#define TR_Bit 0x01               /* 发送请求位                       */
#define AT_Bit 0x02               /* 中止发送位                       */
#define RRB_Bit 0x04              /* 释放接收缓冲器位                 */
#define CDO_Bit 0x08              /* 清除数据超载位                   */

#ifdef  PeliCANMode
#define SRR_Bit 0x10              /* 自身接收请求位                   */
#else                             /* BasicCAN 模式                    */
#define GTS_Bit 0x10              /* 进入睡眠模式位                   */
#endif

/*状态寄存器的地址和位定义*/
#define StatusReg XBYTE[2] 
#define RBS_Bit 0x01              /* 接收缓冲器状态位                 */
#define DOS_Bit 0x02              /* 数据超载状态位                   */
#define TBS_Bit 0x04              /* 发送缓冲器状态位                 */
#define TCS_Bit 0x08              /* 发送完成状态位                   */
#define RS_Bit 0x10               /* 接收状态位                       */
#define TS_Bit 0x20               /* 发送状态位                       */
#define ES_Bit 0x40               /* 错误状态位                       */
#define BS_Bit 0x80               /* 总线状态位                       */

/*中断寄存器的地址和位定义 */
#define InterruptReg XBYTE[3]
#define RI_Bit 0x01               /* 接收中断位                       */
#define TI_Bit 0x02               /* 发送中断位                       */
#define EI_Bit 0x04               /* 错误警告中断位                   */
#define DOI_Bit 0x08              /* 数据超载中断位                   */
#define WUI_Bit 0x10              /* 唤醒中断位                       */

#ifdef  PeliCANMode
#define EPI_Bit 0x20              /* 错误被动中断位                   */
#define ALI_Bit 0x40              /* 仲裁丢失中断位                   */
#define BEI_Bit 0x80              /* 总线错误中断位                   */
#endif

/*总线定时寄存器的地址和位定义 */
#define BusTiming0Reg XBYTE[6]
#define BusTiming1Reg XBYTE[7]
#define SAM_Bit 0x80              /* 采样模式位
                                     1 总线被采样三次
                                     0 总线被采样一次                 */

/*输出控制寄存器的地址和位定义 */
#define OutControlReg XBYTE[8]

/*OCMODE1 OCMODE0 */
#define BiPhaseMode 0x00           /* 双相输出模式                    */
#define NormalMode 0x02            /* 正常输出模式                    */
#define ClkOutMode 0x03            /* 时钟输出模式                    */

/*TX1 的输出管脚配置 */
#define OCPOL1_Bit 0x20            /* 输出极性控制位                  */
#define Tx1Float 0x00              /* 配置为悬空                      */
#define Tx1PullDn 0x40             /* 配置为下拉                      */
#define Tx1PullUp 0x80             /* 配置为上拉                      */
#define Tx1PshPull 0Xc0            /* 配置为推挽                      */

/*TX0 的输出管脚配置 */
#define OCPOL0_Bit 0x04            /* 输出极性控制位                  */
#define Tx0Float 0x00              /* 配置为悬空                      */
#define Tx0PullDn 0x08             /* 配置为下拉                      */
#define Tx0PullUp 0x10             /* 配置为上拉                      */
#define Tx0PshPull 0X18            /* 配置为推挽                      */

/*验收代码和屏蔽寄存器的地址定义 */
#ifdef  PeliCANMode
#define AcceptCode0Reg XBYTE[16]
#define AcceptCode1Reg XBYTE[17]
#define AcceptCode2Reg XBYTE[18]
#define AcceptCode3Reg XBYTE[19]
#define AccepMask0Reg XBYTE[20]
#define AccepMask1Reg XBYTE[21]
#define AccepMask2Reg XBYTE[22]
#define AccepMask3Reg XBYTE[23]

#else /*BasicCAN 模式*/
#define AcceptCodeReg XBYTE[4]
#define AcceptMaskReg XBYTE[5]

#endif


/*Rx-缓冲器的地址定义 */
#ifdef  PeliCANMode
#define RxFramInFo XBYTE[16]
#define RxBuffer1 XBYTE[17]
#define RxBuffer2 XBYTE[18]
#define RxBuffer3 XBYTE[19]
#define RxBuffer4 XBYTE[20]
#define RxBuffer5 XBYTE[21]
#define RxBuffer6 XBYTE[22]
#define RxBuffer7 XBYTE[23]
#define RxBuffer8 XBYTE[24]
#define RxBuffer9 XBYTE[25]
#define RxBuffer10 XBYTE[26]
#define RxBuffer11 XBYTE[27]
#define RxBuffer12 XBYTE[28]

#else /*BasicCAN 模式*/
#define RxBuffer1 XBYTE[20]
#define RxBuffer2 XBYTE[21]
#define RxBuffer3 XBYTE[22]
#define RxBuffer4 XBYTE[23]
#define RxBuffer5 XBYTE[24]
#define RxBuffer6 XBYTE[25]
#define RxBuffer7 XBYTE[26]
#define RxBuffer8 XBYTE[27]
#define RxBuffer9 XBYTE[28]
#define RxBuffer10 XBYTE[29]

#endif

/* Tx 缓冲器的地址定义 */
#ifdef  PeliCANMode
/*仅写地址 */
#define TxFramInFo XBYTE[16]
#define TxBuffer1 XBYTE[17]
#define TxBuffer2 XBYTE[18]
#define TxBuffer3 XBYTE[19]
#define TxBuffer4 XBYTE[20]
#define TxBuffer5 XBYTE[21]
#define TxBuffer6 XBYTE[22]
#define TxBuffer7 XBYTE[23]
#define TxBuffer8 XBYTE[24]
#define TxBuffer9 XBYTE[25]
#define TxBuffer10 XBYTE[26]
#define TxBuffer11 XBYTE[27]
#define TxBuffer12 XBYTE[28]
/*仅读地址*/
#define TxFramInFoRd XBYTE[96]
#define TxBufferRd1 XBYTE[97]
#define TxBufferRd2 XBYTE[98]
#define TxBufferRd3 XBYTE[99]
#define TxBufferRd4 XBYTE[100]
#define TxBufferRd5 XBYTE[101]
#define TxBufferRd6 XBYTE[102]
#define TxBufferRd7 XBYTE[103]
#define TxBufferRd8 XBYTE[104]
#define TxBufferRd9 XBYTE[105]
#define TxBufferRd10 XBYTE[106]
#define TxBufferRd11 XBYTE[107]
#define TxBufferRd12 XBYTE[108]
#else /*BasicCAN 模式*/
#define TxBuffer1 XBYTE[10]
#define TxBuffer2 XBYTE[11]
#define TxBuffer3 XBYTE[12]
#define TxBuffer4 XBYTE[13]
#define TxBuffer5 XBYTE[14]
#define TxBuffer6 XBYTE[15]
#define TxBuffer7 XBYTE[16]
#define TxBuffer8 XBYTE[17]
#define TxBuffer9 XBYTE[18]
#define TxBuffer10 XBYTE[19]
#endif

/*其他寄存器的地址定义*/
#ifdef  PeliCANMode
#define ArbLostCapReg XBYTE[11]
#define ErrCodeCapReg XBYTE[12]
#define ErrWarnLimitReg XBYTE[13]
#define RxErrCountReg XBYTE[14]
#define TxErrCountReg XBYTE[15]
#define RxMsgCountReg XBYTE[29]
#define RxBufstartAdr XBYTE[30]
#endif

/*时钟分频寄存器的地址和位定义 */
#define ClockDivideReg XBYTE[31]
#define DivBy1 0x07                   /* CLKOUT=振荡器频率                 */
#define DivBy2 0x00                   /* CLKOUT=1/2 振荡器频率             */
#define CLKOff_Bit 0x08               /* 时钟关闭位时钟输出管脚控制位      */
#define RXINTEN_Bit 0x20              /* 用于接收中断的管脚TX1             */
#define CBP_Bit 0x40                  /* CAN 比较器旁路控制位              */
#define CANMode_Bit 0x80              /* CAN 模式控制位                    */


/*-硬件/软件连接的定义---------------------------------------------------------------------------------------------- */
/*控制器P89c669HFA CAN 控制器SJA1000 */

#define SJAIntInp INT0                /* SJA1000 的外部中断0               */
#define SJAIntEn  EX0                 /* 外部中断0 使能标志                */



/*寄存器内容默认复位值清除寄存器 */
#define ClrByte 0x00

/*常量清除中断使能寄存器 */
#ifdef PeliCANMode
#define ClrIntEnSJA ClrByte
#else
#define ClrIntEnSJA ClrByte|RM_RR_Bit /* 保留复位请求                      */
#endif

/*验收代码和屏蔽寄存器的定义 */
#define DontCare 0xFF


/* 使用的常量定义------------------------------------------------------------------------------------------------- */
#define YES 1
#define NO 0

#define ENABLE 1
#define DISABLE 0

#define ENABLE_N 0
#define DISABLE_N 1

#define INTLEVELACT 0
#define INTEDGEACT 1

#define PRIORITY_LOW 0
#define PRIORITY_HIGH 1


extern void CANSend( unsigned char *SendData );           /* CAN总线发送程序                */
extern void InitSJA(void);             /* SJA1000初始化                  */

#ifdef __C51__
typedef unsigned char  Uchar;                   /* 定义可移植的无符号字节关键字     */
typedef unsigned int   uint16;                 /* 定义可移植的无符号16位整数关键字 */
typedef signed   int   int16;                  /* 定义可移植的有符号16位整数关键字 */
typedef unsigned long  uint32;                 /* 定义可移植的无符号32位整数关键字 */
typedef signed   long  int32;                  /* 定义可移植的有符号32位整数关键字 */
#endif

#define EXTRAMCtrReg AUXR
#define AO 0x01                                /* 禁止 ALE 输出                    */
#define EXTRAM 0x02                            /* 访问外部RAM                      */

/* IE 中断寄存器 */
#define ExtInterrupt1En EX1
/* IP 中断优先级寄存器 */
/* PSW 程序状态寄存器 */
/* PCON 节电控制寄存器 */
/* SCON 串口寄存器 */
/* TOMD 定时器方式控制寄存器 */
/* TCON 定时器控制寄存器 */


/*中断寄存器内容的中间存储内容---------------------------------------------- */
char  bdata CANInterrupt; /*位可寻址的字节 */
sbit RI_BitVar = CANInterrupt^0;
sbit TI_BitVar = CANInterrupt^1;
sbit EI_BitVar = CANInterrupt^2;
sbit DOI_BitVar = CANInterrupt^3;
sbit WUI_BitVar = CANInterrupt^4;
sbit EPI_BitVar = CANInterrupt^5;
sbit ALI_BitVar = CANInterrupt^6;
sbit BEI_BitVar = CANInterrupt^7;

/*状态寄存器内容的中间存储内容 ---------------------------------------------- */
char  bdata CANState; /*位可寻址的字节 */
sbit RBS_BitVar = CANState^0;
sbit DOS_BitVar = CANState^1;
sbit TBS_BitVar = CANState^2;
sbit TCS_BitVar = CANState^3;
sbit RS_BitVar = CANState^4;
sbit TS_BitVar = CANState^5;
sbit ES_BitVar = CANState^6;
sbit BS_BitVar = CANState^7;

#endif

⌨️ 快捷键说明

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