📄 sja1000.lst
字号:
C51 COMPILER V8.01 SJA1000 04/22/2008 17:46:16 PAGE 1
C51 COMPILER V8.01, COMPILATION OF MODULE SJA1000
OBJECT MODULE PLACED IN SJA1000.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE SJA1000.C COMPACT BROWSE DEBUG OBJECTEXTEND
line level source
1
2 #include "STC89C51RC_RD_PLUS.H"
3 #include <absacc.h> //用到XBYTE
4 #include <intrins.h> //用到_nop_();
5
6
7
8 //宏定义
9 #define TRUE 1
10 #define FALSE 0
11
12
13 #define CAN_MODE_BASICCAN 0
14 #define CAN_MODE_PELICAN 1
15 #define CAN_CONF_TIMEOUT 10 //10ms
16
17
18 #define CAN_MODE CAN_MODE_PELICAN //第一步设置CAN_MODE,选择BasicCan,还是PeliCan?
19
20
21 #define CAN_CONTROL_SET_BAUDRATE 100 //在CAN_Control函数中用到
22 #define CAN_CONTROL_SET_ACR 101
23 #define CAN_CONTROL_SET_AMR 102
24 #define CAN_CONTROL_SET_SLEEP 103
25
26
27 //STC内部EEPROM使用有关的宏定义
28 #define ISP_Byte_Read 1
29 #define ISP_Byte_Program 2
30 #define ISP_Sector_Erase 3
31 #define Wait_Time 2; // 3 对应5M时钟 , 2 对应10M时钟 ,1 对应20M时钟, 0 对应40M时钟
32 #define SECTOR1_BTR0_H 0x20 //第一扇区首地址,存放BTR0 注意不同的STC单片机首地址不一样。
33 #define SECTOR1_BTR0_L 0x00
34 #define SECTOR1_BTR1_H 0x20 //第一扇区第二个地址,存放BTR1
35 #define SECTOR1_BTR1_L 0x01
36 #define SECTOR2_ACR0_H 0x22 //第二扇区首地址, 存放ACR0
37 #define SECTOR2_ACR0_L 0x00
38 #define SECTOR2_ACR1_H 0x22 //第二扇区第二个地址,存放ACR1
39 #define SECTOR2_ACR1_L 0x01
40 #define SECTOR2_ACR2_H 0x22 //第二扇区第三个地址,存放ACR2
41 #define SECTOR2_ACR2_L 0x02
42 #define SECTOR2_ACR3_H 0x22 //第二扇区第四个地址,存放ACR3
43 #define SECTOR2_ACR3_L 0x03
44 #define SECTOR3_AMR0_H 0x24 //第三扇区首地址, 存放AMR0
45 #define SECTOR3_AMR0_L 0x00
46 #define SECTOR3_AMR1_H 0x24 //第三扇区第二个地址,存放AMR1
47 #define SECTOR3_AMR1_L 0x01
48 #define SECTOR3_AMR2_H 0x24 //第三扇区第三个地址,存放AMR2
49 #define SECTOR3_AMR2_L 0x02
50 #define SECTOR3_AMR3_H 0x24 //第三扇区第四个地址,存放AMR3
51 #define SECTOR3_AMR3_L 0x03
52
53
54
55 #define RX_BUFF_LEN 32 // CAN接收缓冲区大小
C51 COMPILER V8.01 SJA1000 04/22/2008 17:46:16 PAGE 2
56 #define TX_BUFF_LEN 32 // CAN发送缓冲区大小
57
58
59 //CAN用到的缓冲区
60 unsigned char idata RX_BUFF[RX_BUFF_LEN]; // 接收缓冲区 0~RX_BUFF_LEN-1
61 unsigned char idata TX_BUFF[TX_BUFF_LEN]; // 发送缓冲区 0~TX_BUFF_LEN-1
62
63 unsigned int idata TX_Buff_Head = 0; // 头指针,写入
64 unsigned int idata TX_Buff_Tail = 0; // 尾指针,读出
65 unsigned int idata RX_Buff_Head = 0; //
66 unsigned int idata RX_Buff_Tail = 0; //
67
68 //UART用到的缓冲区
69 #define UART_RX_Buff_LEN 24
70 #define UART_TX_Buff_LEN 24
71 unsigned char idata UART_RX_Buff[UART_RX_Buff_LEN]; // 接收缓冲区
72 unsigned char idata UART_TX_Buff[UART_TX_Buff_LEN]; // 发送缓冲区
73
74
75 unsigned int idata UART_RX_Buff_Head = 0; // 头指针,写入
76 unsigned int idata UART_RX_Buff_Tail = 0; // 尾指针,读出
77 unsigned int idata UART_TX_Buff_Head = 0; //
78 unsigned int idata UART_TX_Buff_Tail = 0; //
79
80
81
82
83
84 #define SJA_REG_BaseADD 0x1000 //这么选择的原因? P2^6=1? 应该与片选有关
85
86 #define REG_MODE XBYTE[SJA_REG_BaseADD + 0x00] //内部控制寄存器
87 #define REG_CMR XBYTE[SJA_REG_BaseADD + 0x01] //命令寄存器
88 #define REG_SR XBYTE[SJA_REG_BaseADD + 0x02] //状态寄存器
89 #define REG_IR XBYTE[SJA_REG_BaseADD + 0x03] //中断寄存器
90 #define REG_IR_ABLE XBYTE[SJA_REG_BaseADD + 0x04] //中断使能寄存器
91 //05保留 不用管
92 #define REG_BTR0 XBYTE[SJA_REG_BaseADD + 0x06] //总线定时寄存器0
93 #define REG_BTR1 XBYTE[SJA_REG_BaseADD + 0x07] //总线定时寄存器1
94 #define REG_OCR XBYTE[SJA_REG_BaseADD + 0x08] //输出控制寄存器
95 #define REG_TEST XBYTE[SJA_REG_BaseADD + 0x09] //测试寄存器
96 //0a保留 不用管
97 #define REG_ALC XBYTE[SJA_REG_BaseADD + 0x0b] //仲裁丢失捕捉寄存器
98 #define REG_ECC XBYTE[SJA_REG_BaseADD + 0x0c] //错误代码捕捉寄存器
99 #define REG_EMLR XBYTE[SJA_REG_BaseADD + 0x0d] //错误报警限制寄存器
100 #define REG_RXERR XBYTE[SJA_REG_BaseADD + 0x0e] //RX 错误计数寄存器
101 #define REG_TXERR XBYTE[SJA_REG_BaseADD + 0x0f] //TX 错误计数寄存器
102
103 #define REG_ACR0 XBYTE[SJA_REG_BaseADD + 0x10]
104 #define REG_ACR1 XBYTE[SJA_REG_BaseADD + 0x11]
105 #define REG_ACR2 XBYTE[SJA_REG_BaseADD + 0x12]
106 #define REG_ACR3 XBYTE[SJA_REG_BaseADD + 0x13]
107 #define REG_AMR0 XBYTE[SJA_REG_BaseADD + 0x14]
108 #define REG_AMR1 XBYTE[SJA_REG_BaseADD + 0x15]
109 #define REG_AMR2 XBYTE[SJA_REG_BaseADD + 0x16]
110 #define REG_AMR3 XBYTE[SJA_REG_BaseADD + 0x17]
111
112 #define REG_RxBuffer0 XBYTE[SJA_REG_BaseADD + 0x10]
113 #define REG_RxBuffer1 XBYTE[SJA_REG_BaseADD + 0x11]
114 #define REG_RxBuffer2 XBYTE[SJA_REG_BaseADD + 0x12]
115 #define REG_RxBuffer3 XBYTE[SJA_REG_BaseADD + 0x13]
116 #define REG_RxBuffer4 XBYTE[SJA_REG_BaseADD + 0x14]
117
C51 COMPILER V8.01 SJA1000 04/22/2008 17:46:16 PAGE 3
118 #define REG_TxBuffer0 XBYTE[SJA_REG_BaseADD + 0x10]
119 #define REG_TxBuffer1 XBYTE[SJA_REG_BaseADD + 0x11]
120 #define REG_TxBuffer2 XBYTE[SJA_REG_BaseADD + 0x12]
121 #define REG_TxBuffer3 XBYTE[SJA_REG_BaseADD + 0x13]
122 #define REG_TxBuffer4 XBYTE[SJA_REG_BaseADD + 0x14]
123
124 #define REG_DataBuffer1 XBYTE[SJA_REG_BaseADD + 0x15]
125 #define REG_DataBuffer2 XBYTE[SJA_REG_BaseADD + 0x16]
126 #define REG_DataBuffer3 XBYTE[SJA_REG_BaseADD + 0x17]
127 #define REG_DataBuffer4 XBYTE[SJA_REG_BaseADD + 0x18]
128 #define REG_DataBuffer5 XBYTE[SJA_REG_BaseADD + 0x19]
129 #define REG_DataBuffer6 XBYTE[SJA_REG_BaseADD + 0x1a]
130 #define REG_DataBuffer7 XBYTE[SJA_REG_BaseADD + 0x1b]
131 #define REG_DataBuffer8 XBYTE[SJA_REG_BaseADD + 0x1c]
132
133
134 #define REG_RBSA XBYTE[SJA_REG_BaseADD + 0x1e] //RX缓冲器起始地址寄存器
135 #define REG_CDR XBYTE[SJA_REG_BaseADD + 0x1f] //时钟分频寄存器
136 #define REG_Receive_Counter XBYTE[SJA_REG_BaseADD + 0x1d] //RX信息计数器(RMC)
137
138
139
140
141 sbit CAN_RST = P4^0; //复位控制
142 sbit CAN_INT= P3^2; //中断脚
143
144 struct CAN_CANConfig {
145 unsigned char Mode; //bit0: 0:basicCAN 1:peleican
146 //bit1: 0: 双滤波 1:单滤波
147 //bit2: 0: 标准帧 1:扩展帧
148 unsigned char BTR0; //波特率
149 unsigned char BTR1; //波特率
150
151 unsigned char ACR0; //验收代码
152 unsigned char ACR1; //验收代码
153 unsigned char ACR2; //验收代码
154 unsigned char ACR3; //验收代码
155
156 unsigned char AMR0; //屏蔽代码
157 unsigned char AMR1; //屏蔽代码
158 unsigned char AMR2; //屏蔽代码
159 unsigned char AMR3; //屏蔽代码
160
161 unsigned char EFF0; //发送识别码,标准帧只用前两个
162 unsigned char EFF1; //发送识别码,标准帧只用前两个
163 unsigned char EFF2; //发送识别码,标准帧只用前两个
164 unsigned char EFF3; //发送识别码,标准帧只用前两个
165 };
166
167
168 struct CAN_CANConfig CANConfig;
169
170 #define RESET_SJA1000() {CAN_RST = 0; _nop_(); CAN_RST = 1;}
171 #define ON_CAN_INT() {EX0 = 1;}
172 #define OFF_CAN_INT() {EX0 = 0;}
173
174 //函数声明
175
176 bit send(unsigned char S_Data);
177
178
179 bit Serial(void);
C51 COMPILER V8.01 SJA1000 04/22/2008 17:46:16 PAGE 4
180 void Delay1ms(unsigned int i);
181
182
183 bit CAN_Init(void);
184
185 /*
186 unsigned char EEPROM_Read(unsigned char AddrH,unsigned char AddrL);
187 void EEPROM_Write(unsigned char AddrH,unsigned char AddrL,unsigned char Data);
188 void Sector_Erase(unsigned char AddrH,unsigned char AddrL);
189 */
190
191
192 /******************************************************************
193 延时1ms
194
195 */
196 void Delay(unsigned int i)
197 {
198 1 while (i--)
199 1 {
200 2 };
201 1 }
202
203 /*
204
205 返回实际读取到的数据
206 */
207
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -