📄 232tocan.h
字号:
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define CRYSTAL_FREQ 11059200ul //晶振频率
#define FREQ_DIV 6 //分频数
#define EXRAM_ENABLE 0x02 //使用外部扩展RAM
#define EXRAM_DISABLE 0x00 //使用片内扩展RAM
//定时器T0工作在16位定时模式
#define TIMER1ms_TH0 (65536-CRYSTAL_FREQ/FREQ_DIV/1000)/256
#define TIMER1ms_TL0 (65536-CRYSTAL_FREQ/FREQ_DIV/1000)%256
#define TIMER2ms_TH0 (65536-2*CRYSTAL_FREQ/FREQ_DIV/1000)/256
#define TIMER2ms_TL0 (65536-2*CRYSTAL_FREQ/FREQ_DIV/1000)%256
#define TIMER5ms_TH0 (65536-5*CRYSTAL_FREQ/FREQ_DIV/1000)/256
#define TIMER5ms_TL0 (65536-5*CRYSTAL_FREQ/FREQ_DIV/1000)%256
#define TIMER10ms_TH0 (65536-10*CRYSTAL_FREQ/FREQ_DIV/1000)/256
#define TIMER10ms_TL0 (65536-10*CRYSTAL_FREQ/FREQ_DIV/1000)%256
#define TIMER20ms_TH0 (65536-20*CRYSTAL_FREQ/FREQ_DIV/1000)/256
#define TIMER20ms_TL0 (65536-20*CRYSTAL_FREQ/FREQ_DIV/1000)%256
#define TIMER25ms_TH0 (65536-25*CRYSTAL_FREQ/FREQ_DIV/1000)/256
#define TIMER25ms_TL0 (65536-25*CRYSTAL_FREQ/FREQ_DIV/1000)%256
#define TIMER50ms_TH0 (65536-50*CRYSTAL_FREQ/FREQ_DIV/1000)/256
#define TIMER50ms_TL0 (65536-50*CRYSTAL_FREQ/FREQ_DIV/1000)%256
//定时器T2用作波特率发生器
#define BAUD600H (65536-CRYSTAL_FREQ/600/32*12/FREQ_DIV)/256 //600bps
#define BAUD600L (65536-CRYSTAL_FREQ/600/32*12/FREQ_DIV)%256
#define BAUD1200H (65536-CRYSTAL_FREQ/1200/32*12/FREQ_DIV)/256 //1200bps
#define BAUD1200L (65536-CRYSTAL_FREQ/1200/32*12/FREQ_DIV)%256
#define BAUD2400H (65536-CRYSTAL_FREQ/2400/32*12/FREQ_DIV)/256 //2400bps
#define BAUD2400L (65536-CRYSTAL_FREQ/2400/32*12/FREQ_DIV)%256
#define BAUD4800H (65536-CRYSTAL_FREQ/4800/32*12/FREQ_DIV)/256 //4800bps
#define BAUD4800L (65536-CRYSTAL_FREQ/4800/32*12/FREQ_DIV)%256
#define BAUD9600H (65536-CRYSTAL_FREQ/9600/32*12/FREQ_DIV)/256 //9600bps
#define BAUD9600L (65536-CRYSTAL_FREQ/9600/32*12/FREQ_DIV)%256
#define BAUD19200H (65536-CRYSTAL_FREQ/19200/32*12/FREQ_DIV)/256 //19200bps
#define BAUD19200L (65536-CRYSTAL_FREQ/19200/32*12/FREQ_DIV)%256
#define BAUD38400H (65536-CRYSTAL_FREQ/38400/32*12/FREQ_DIV)/256 //38400bps
#define BAUD38400L (65536-CRYSTAL_FREQ/38400/32*12/FREQ_DIV)%256
#define BAUD57600H (65536-CRYSTAL_FREQ/57600/32*12/FREQ_DIV)/256 //57600bps
#define BAUD57600L (65536-CRYSTAL_FREQ/57600/32*12/FREQ_DIV)%256
#define BAUD115200H (65536-CRYSTAL_FREQ/115200/32*12/FREQ_DIV)/256 //115200bps
#define BAUD115200L (65536-CRYSTAL_FREQ/115200/32*12/FREQ_DIV)%256
//x5045 define
#define WREN 0x06 //enable write operation
#define WRDI 0x04 //disable write operation
#define RSDR 0x05 //read status register
#define WRSR 0x01 //write status register
#define READ 0x03 //read data from menory
#define WRITE 0x02 //write data
#define BL 0x0c //块保护
#define BO 0x00 //块不保护
#define Somenop(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();\
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
/*****************SJA1000定义(Pelican)******************/
#define PELI_MODE_REG PBYTE[0] //工作模式寄存器
#define PELI_COMMAND_REG PBYTE[1] //命令寄存器
#define PELI_STATUS_REG PBYTE[2] //状态寄存器
#define PELI_INTERRUPT_REG PBYTE[3] //中断寄存器
#define INTERRUPT_EN_REG PBYTE[4] //中断使能寄存器
#define PELI_BTR0_REG PBYTE[6] //总线定时寄存器0
#define PELI_BTR1_REG PBYTE[7] //总线定时寄存器1
#define PELI_OUTPUT_CONTROL_REG PBYTE[8] //输出控制寄存器
#define PELI_TEST_REG PBYTE[9] //测试寄存器
#define ARB_LOST_REG PBYTE[11] //仲裁丢失失捕获寄存器
#define ERR_CODE_REG PBYTE[12] //错误代码捕获寄存器
#define ERR_WARN_REG PBYTE[13] //错误警告限制寄存器
#define RX_ERR_REG PBYTE[14] //接收错误计数寄存器
#define TX_ERR_REG PBYTE[15] //发收错误计数寄存器
#define PELI_ACCEPT_CODE0_REG PBYTE[16] //验收代码0寄存器
#define PELI_ACCEPT_CODE1_REG PBYTE[17] //验收代码1寄存器
#define PELI_ACCEPT_CODE2_REG PBYTE[18] //验收代码2寄存器
#define PELI_ACCEPT_CODE3_REG PBYTE[19] //验收代码3寄存器
#define PELI_ACCEPT_MASK0_REG PBYTE[20] //验收屏蔽0寄存器
#define PELI_ACCEPT_MASK1_REG PBYTE[21] //验收屏蔽1寄存器
#define PELI_ACCEPT_MASK2_REG PBYTE[22] //验收屏蔽2寄存器
#define PELI_ACCEPT_MASK3_REG PBYTE[23] //验收屏蔽3寄存器
//接收缓冲区(标准帖)
//#define RX_FRAME_INFO PBYTE[16] //接收帧信息寄存器
//#define PELI_RX_ID1 PBYTE[17] //标识符1
//#define PELI_RX_ID2 PBYTE[18] //标识符2
#define SF_RX_DATA1 PBYTE[19] //数据1
#define SF_RX_DATA2 PBYTE[20] //数据2
#define SF_RX_DATA3 PBYTE[21] //数据3
#define SF_RX_DATA4 PBYTE[22] //数据4
#define SF_RX_DATA5 PBYTE[23] //数据5
#define SF_RX_DATA6 PBYTE[24] //数据6
#define SF_RX_DATA7 PBYTE[25] //数据7
#define SF_RX_DATA8 PBYTE[26] //数据8
//发送缓冲区(标准帖)
//#define TX_FRAME_INFO PBYTE[16] //发送帖信息寄存器
//#define PELI_TX_ID1 PBYTE[17] //标识符1
//#define PELI_TX_ID2 PBYTE[18] //标识符2
#define SF_TX_DATA1 PBYTE[19] //数据1
#define SF_TX_DATA2 PBYTE[20] //数据2
#define SF_TX_DATA3 PBYTE[21] //数据3
#define SF_TX_DATA4 PBYTE[22] //数据4
#define SF_TX_DATA5 PBYTE[23] //数据5
#define SF_TX_DATA6 PBYTE[24] //数据6
#define SF_TX_DATA7 PBYTE[25] //数据7
#define SF_TX_DATA8 PBYTE[26] //数据8
//接收缓冲区(扩展帖)
#define RX_FRAME_INFO PBYTE[16] //接收帖信息寄存器
#define PELI_RX_ID1 PBYTE[17] //标识符1
#define PELI_RX_ID2 PBYTE[18] //标识符2
#define PELI_RX_ID3 PBYTE[19] //标识符3
#define PELI_RX_ID4 PBYTE[20] //标识符4
#define EF_RX_DATA1 PBYTE[21] //数据1
#define EF_RX_DATA2 PBYTE[22] //数据2
#define EF_RX_DATA3 PBYTE[23] //数据3
#define EF_RX_DATA4 PBYTE[24] //数据4
#define EF_RX_DATA5 PBYTE[25] //数据5
#define EF_RX_DATA6 PBYTE[26] //数据6
#define EF_RX_DATA7 PBYTE[27] //数据7
#define EF_RX_DATA8 PBYTE[28] //数据8
//发送缓冲区(扩展帖)
#define TX_FRAME_INFO PBYTE[16] //发送帖信息寄存器
#define PELI_TX_ID1 PBYTE[17] //标识符1
#define PELI_TX_ID2 PBYTE[18] //标识符2
#define PELI_TX_ID3 PBYTE[19] //标识符3
#define PELI_TX_ID4 PBYTE[20] //标识符4
#define EF_TX_DATA1 PBYTE[21] //数据1
#define EF_TX_DATA2 PBYTE[22] //数据2
#define EF_TX_DATA3 PBYTE[23] //数据3
#define EF_TX_DATA4 PBYTE[24] //数据4
#define EF_TX_DATA5 PBYTE[25] //数据5
#define EF_TX_DATA6 PBYTE[26] //数据6
#define EF_TX_DATA7 PBYTE[27] //数据7
#define EF_TX_DATA8 PBYTE[28] //数据8
#define RX_BUFFER_START PBYTE[30] //接收缓冲区起始地址
#define PELI_CLK_DIV_REG PBYTE[31] //时钟分频寄存器
/*****************SJA1000定义(BasicCAN)******************/
#define BASIC_MODE_REG PBYTE[0] //工作模式寄存器
#define BASIC_COMMAND_REG PBYTE[1] //命令寄存器
#define BASIC_STATUS_REG PBYTE[2] //状态寄存器
#define BASIC_INTERRUPT_REG PBYTE[3] //中断寄存器
#define BASIC_BTR0_REG PBYTE[6] //总线定时寄存器0
#define BASIC_BTR1_REG PBYTE[7] //总线定时寄存器1
#define BASIC_OUTPUT_CONTROL_REG PBYTE[8] //输出控制寄存器
#define BASIC_TEST_REG PBYTE[9] //测试寄存器
#define BASIC_ACCEPT_CODE_REG PBYTE[4] //验收代码寄存器
#define BASIC_ACCEPT_MASK_REG PBYTE[5] //验收屏蔽寄存器
//接收缓冲区
#define BASIC_RX_ID1 PBYTE[20] //标识符1
#define BASIC_RX_ID2 PBYTE[21] //标识符2
#define BASIC_RX_DATA1 PBYTE[22] //数据1
#define BASIC_RX_DATA2 PBYTE[23] //数据2
#define BASIC_RX_DATA3 PBYTE[24] //数据3
#define BASIC_RX_DATA4 PBYTE[25] //数据4
#define BASIC_RX_DATA5 PBYTE[26] //数据5
#define BASIC_RX_DATA6 PBYTE[27] //数据6
#define BASIC_RX_DATA7 PBYTE[28] //数据7
#define BASIC_RX_DATA8 PBYTE[29] //数据8
//发送缓冲区
#define BASIC_TX_ID1 PBYTE[10] //标识符1
#define BASIC_TX_ID2 PBYTE[11] //标识符2
#define BASIC_TX_DATA1 PBYTE[12] //数据1
#define BASIC_TX_DATA2 PBYTE[13] //数据2
#define BASIC_TX_DATA3 PBYTE[14] //数据3
#define BASIC_TX_DATA4 PBYTE[15] //数据4
#define BASIC_TX_DATA5 PBYTE[16] //数据5
#define BASIC_TX_DATA6 PBYTE[17] //数据6
#define BASIC_TX_DATA7 PBYTE[18] //数据7
#define BASIC_TX_DATA8 PBYTE[19] //数据8
#define BASIC_CLK_DIV_REG PBYTE[31] //时钟分频寄存器
#define TR_CMD 0x01 //发送请求
#define AT_CMD 0x02 //中止发送
#define RRB_CMD 0x04 //释放接收缓冲区
#define CDO_CMD 0x08 //清除数据溢出
#define SRR_CMD 0x10 //自接收请求
#define GTS_CMD 0x10 //请求睡眠
//时间常数
#define TIMER100ms 2
#define TIMER500ms 10
#define TIMER1s 20
#define TIMER5s 100
#define TIMER10s 200
#define MAX_LENGHT 15 //数据缓冲区长度
#define COM_MIN 7 //串口最小接收字节长度
#define CMD_LENGHT 100 //命令字长度
#define COM_HEAD 0xaa //起始字节
#define COM_END 0xbb //结束字节
//调试模式识别码
#define ASCII_ENTER 0x0d //回车键
#define ASCII_LF 0x0a //换行符
/* p89c51RD2 增强型UART */
sfr AUXR = 0x8E;
sfr SADDR = 0xa9; //从地址
sfr SADEN = 0xb9; //从地址屏蔽
sbit WP = P2 ^ 3;
sbit SPI_CS = P2 ^ 4;
sbit SPI_SO = P1 ^ 1;
sbit SPI_SI = P1 ^ 2;
sbit SCLK = P1 ^ 3;
sbit RST = P2 ^ 6;
sbit CAN_CS = P2 ^ 7;
sbit REC_LED = P2 ^ 1; //串口接收数据指示
sbit SEND_LED = P2 ^ 2; //串口发送数据指示
union
{
uchar t[2];
uint crc;
}Add; //累加和
uchar data ComBaud; //串口波特率
uchar data Rec_delay; //串口接收延时
uchar data CanBaud; //CAN波特率
uchar data Can_mode; //CAN工作模式
uint idata Acr_data; //验收码
uint idata Amr_data; //屏蔽码
uchar xdata Ver_a; //软件版本号
uchar xdata Ver_b;
uchar xdata Ver_c;
uchar data Timer50ms; //50ms定时器
uchar idata Com_rec_timer; //串口接收数据字节间隔
uchar idata Can_rxbuf[MAX_LENGHT]; //CAN接收缓冲区
uchar idata Can_txbuf[MAX_LENGHT]; //CAN发送缓冲区
uchar idata Com_rxbuf[MAX_LENGHT]; //串口接收缓冲区
uchar idata Com_txbuf[MAX_LENGHT]; //串口发送缓冲区
uchar code Bitrate[3][2] = {//BTR0,BTR1
{0x03, 0x1c}, //125k
{0x01, 0x1c}, //250k
{0x00, 0x1c}, //500k
};
uchar xdata Command[CMD_LENGHT]; //调试命令接收缓冲区
uchar xdata Recjs; //接收计数
uchar data Can_rxcount; //CAN接收数据计数
uchar data Can_txcount; //CAN发送数据计数
uchar data Com_rxcount; //串口接收数据计数
uchar data Com_txcount; //串口发送数据计数
uchar idata *Telcom; //串口通讯缓冲区指针
uchar data Wait_timer; //等待时间
uchar bdata CANInterrupt; //CAN通讯中断标志
sbit RI_Bit = CANInterrupt ^ 0;
sbit TI_Bit = CANInterrupt ^ 1;
sbit EI_Bit = CANInterrupt ^ 2;
sbit DOI_Bit = CANInterrupt ^ 3;
sbit WUI_Bit = CANInterrupt ^ 4;
sbit EPI_Bit = CANInterrupt ^ 5;
sbit ALI_Bit = CANInterrupt ^ 6;
sbit BEI_Bit = CANInterrupt ^ 7;
uchar bdata temp1;
sbit Can_send_ready = temp1 ^ 0; //准备启动CAN发送标志
sbit Com_send_ready = temp1 ^ 1; //准备启动串口发送标志
sbit Can_send_now = temp1 ^ 2; //CAN正在发送
sbit Com_send_now = temp1 ^ 3; //串口正在发送
sbit Can_rec_now = temp1 ^ 4; //CAN正在接收
sbit Com_rec_now = temp1 ^ 5; //串口正在接收
uchar bdata temp2;
sbit Can_err = temp2 ^ 0; //CAN通讯错误
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -