📄 canceshi.lst
字号:
C51 COMPILER V7.06 CANCESHI 01/07/2008 08:46:41 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE CANCESHI
OBJECT MODULE PLACED IN CANceshi.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE CANceshi.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*查询方式接收CAN数据*/
2
3
4
5 #include<reg52.h>
6 #include<intrins.h>
7 #include "SJA100REG.H"
8
9 sbit RST_SJA1000=P1^7;//SJA1000硬件复位
10 sbit CS_SJA1000= P2^7;//片选信号
11
12 unsigned char BTR0,BTR1;
13 unsigned char xdata CAN_SJA_BaseAdr _at_ 0x7f00; //定义SJA1000的片选基址
14 unsigned char xdata *SJA_CS_Point ; //指针指向空
15 unsigned char Send_CAN_Filter[8]={0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff};//验收及屏蔽数据
16 //unsigned char Send_CAN_Filter[8]={0x07,0x80,0x07,0xF7,0xE0,0x00,0xE0,0x00};//验收及屏蔽数据 /此数据是根
-据已知四个
17 //四个PGN定义的,如果再加,还得变化
18 unsigned char Rev_CAN_data[12]; //CAN总线通讯接受存储单元
19 unsigned char xdata Rev_COM_data[12]; //串口通讯接受存储单元
20 unsigned char xdata Signal_Stor_data[6];//要传给串口需要上传的信息 ,0 1字节 速度、
21 // 2字节状态信号 ,BIT4上电 BIT3状态4 BIT2状态3 BIT1状态2 BIT0刹车
22 // 3 4字节 发动机转速。
23 // 5 6字节 水温
24 unsigned char xdata Extand_Stor_ID[10];//0存放可选信号的状态(需要采哪些信号1需要,0不需要)
25 //1字节存可选信号的类型(CAN没有固定的,看是用CAN采1,还是脉冲采0)
26 //2 3字节存状态1信号的ID 上电信号
27 //4 5字节存状态2信号的ID
28 //6 7字节存状态3信号的ID
29 //8 9字节存状态4信号的ID
30
31 bit CAN_INT_bz=0; //看有无报文
32 bit Com_Begin_bz=0; //串口数据开始接受
33 //bit error_bz=0;
34 bit txcs_bz=0; //串口通讯超时标志
35 bit ID_Config_bz=0; //ID初始化标志,进入正常通讯之后还要判断是否进行过了上电初始化。
36
37
38
39 void Delay_ms(unsigned char j)
40 {
41 1 unsigned char k,l;
42 1 for(l=0;l<=j;l++)
43 1 {
44 2 for(k=0;k<=250;k++)
45 2 {
46 3 ;
47 3 }
48 2 }
49 1 }
50 /*------------------------------------------------------------------------------------------------------*/
51 /*硬件复位SJA1000*/
52 void SJA1000_HardwareRst(void)
53 { RST_SJA1000=0;
54 1 Delay_ms(5);
C51 COMPILER V7.06 CANCESHI 01/07/2008 08:46:41 PAGE 2
55 1 Delay_ms(5);
56 1 Delay_ms(5);
57 1 RST_SJA1000=1;
58 1 }
59
60
61 /*--------------------------------------------------------------------------------------------------------
62 ** 函数原型: unsigned char SJAEntryResetMode(void)
63 ** 功能描述: 该函数用于使sja1000进入复位模式
64 ** 参数说明: 无
65 ** 返回值: 1 表示SJA1000进入复位模式成功
66 ** 0 表示SJA1000进入复位模式失败
67
68 /*------------------------------------------------------------------------------------------------------*/
69 bit SJAEntryResetMode(void)
70 {
71 1 unsigned char TempData;
72 1 SJA_CS_Point = CAN_SJA_BaseAdr+REG_CAN_MOD; //访问地址指向控制寄存器
73 1 TempData= *SJA_CS_Point; //保存原始值
74 1 *SJA_CS_Point=(TempData|0x01); //置位复位请求
75 1 _nop_();
76 1 _nop_();
77 1 if((*SJA_CS_Point&0x01) == 1)
78 1 {
79 2 return 0;
80 2 }
81 1 else
82 1 {
83 2 return 1;
84 2 }
85 1
86 1 }
87
88 /*-------------------------------------------------------------------------------------------------------
--
89 ** 函数原型: unsigned char SJAQuitResetMode(void)
90 ** 功能描述: 该函数用于使sja1000退出复位模式,进入工作模式
91 ** 参数说明: 无
92 ** 返回值: 1 表示SJA1000退出复位模式成功
93 ** 0 表示SJA1000退出复位模式失败
94
95 /*------------------------------------------------------------------------------------------------------*/
96 bit SJAQuitResetMode(void)
97 {
98 1 unsigned char TempData;
99 1 SJA_CS_Point = CAN_SJA_BaseAdr+REG_CAN_MOD; //
100 1 TempData= *SJA_CS_Point; //保存原始值
101 1 *SJA_CS_Point=(TempData&0xfe); //释放复位请求
102 1 _nop_();
103 1 _nop_();
104 1 if((*SJA_CS_Point&0x01) == 0)
105 1 {
106 2 return 0;
107 2 }
108 1 else
109 1 {
110 2 return 1;
111 2 }
112 1
113 1 }
114
115
C51 COMPILER V7.06 CANCESHI 01/07/2008 08:46:41 PAGE 3
116 /*-------------------------------------------------------------------------------------------------------
--
117 ** 函数原型: unsigned char WriteSJARegBlock(unsigned char RegAdr,unsigned char *ValueBuf,unsigned char
-len)
118 ** 功能描述: 该函数用于将指定的数值写入sja1000的指定的寄存器
119 ** 参数说明: RegAdr 要写入的sja1000的内部寄存器地址
120 ** ValueBuf 要写入寄存器的值的存储器地址
121 ** len 要写入sja1000内部寄存器的长度
122 ** 返回值: 1 写入正确
123 ** 0 写入不正确
124
125 /*------------------------------------------------------------------------------------------------------*/
126 WriteSJARegBlock(unsigned char RegAdr,unsigned char *ValueBuf,unsigned char len)
127 { unsigned char TempData;
128 1 for(TempData=0;TempData<len;TempData++)
129 1 { SJA_CS_Point = CAN_SJA_BaseAdr+RegAdr+TempData; //
130 2 *SJA_CS_Point = ValueBuf[TempData];
131 2 }
132 1 }
133
134
135 /*--------------------------------------------------------------------------------------------------------
136 ** 函数原型: WriteSJAReg(unsigned char RegAdr,unsigned char Value)
137 ** 功能描述: 该函数用于将指定的数值写入sja1000的指定的寄存器
138 ** 参数说明: RegAdr 要读的sja1000的内部寄存器地址
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -