📄 can1.lst
字号:
C51 COMPILER V7.01 CAN1 03/29/2007 11:52:39 PAGE 1
C51 COMPILER V7.01, COMPILATION OF MODULE CAN1
OBJECT MODULE PLACED IN can1.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE can1.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "reg51.h"
2 #include "absacc.h"
3 #include "stdio.h"
4 #define uchar unsigned char
5 #define SJA_BaseAdr 0X7f00 //定义SJA1000的基址
6 #define CAN_MODE XBYTE[SJA_BaseAdr+0X00]
7 #define CAN_CMD XBYTE[SJA_BaseAdr+0X01]
8 #define CAN_SR XBYTE[SJA_BaseAdr+0X02]
9 #define CAN_IR XBYTE[SJA_BaseAdr+0X03]
10 #define CAN_IER XBYTE[SJA_BaseAdr+0X04]
11 #define CAN_BTR0 XBYTE[SJA_BaseAdr+0X06] //05保留
12 #define CAN_BTR1 XBYTE[SJA_BaseAdr+0X07]
13 #define CAN_OCR XBYTE[SJA_BaseAdr+0X08]
14 #define CAN_TEST XBYTE[SJA_BaseAdr+0X09]
15 #define CAN_ALC XBYTE[SJA_BaseAdr+0X0b] //0a保留
16 #define CAN_ECC XBYTE[SJA_BaseAdr+0X0c]
17 #define CAN_EMLR XBYTE[SJA_BaseAdr+0X0d]
18 #define CAN_RXERR XBYTE[SJA_BaseAdr+0X0e]
19 #define CAN_TXERR XBYTE[SJA_BaseAdr+0X0f]
20 //发送缓冲区寄存器定义-----在复位模式下
21 #define CAN_ACR0 XBYTE[SJA_BaseAdr+0X10]
22 #define CAN_ACR1 XBYTE[SJA_BaseAdr+0X11]
23 #define CAN_ACR2 XBYTE[SJA_BaseAdr+0X12]
24 #define CAN_ACR3 XBYTE[SJA_BaseAdr+0X13]
25 #define CAN_AMR0 XBYTE[SJA_BaseAdr+0X14]
26 #define CAN_AMR1 XBYTE[SJA_BaseAdr+0X15]
27 #define CAN_AMR2 XBYTE[SJA_BaseAdr+0X16]
28 #define CAN_AMR3 XBYTE[SJA_BaseAdr+0X17]
29
30 #define CAN_TxBuffer0 XBYTE[SJA_BaseAdr+0X10]
31 #define CAN_TxBuffer1 XBYTE[SJA_BaseAdr+0X11]
32 #define CAN_TxBuffer2 XBYTE[SJA_BaseAdr+0X12]
33 #define CAN_TxBuffer3 XBYTE[SJA_BaseAdr+0X13]
34 #define CAN_TxBuffer4 XBYTE[SJA_BaseAdr+0X14]
35 #define CAN_TxBuffer5 XBYTE[SJA_BaseAdr+0X15]
36 #define CAN_TxBuffer6 XBYTE[SJA_BaseAdr+0X16]
37 #define CAN_TxBuffer7 XBYTE[SJA_BaseAdr+0X17]
38 #define CAN_TxBuffer8 XBYTE[SJA_BaseAdr+0X18]
39 #define CAN_TxBuffer9 XBYTE[SJA_BaseAdr+0X19]
40 #define CAN_TxBuffer10 XBYTE[SJA_BaseAdr+0X1a]
41 #define CAN_TxBuffer11 XBYTE[SJA_BaseAdr+0X1b]
42 #define CAN_TxBuffer12 XBYTE[SJA_BaseAdr+0X1c]
43
44 #define CAN_RxBuffer0 XBYTE[SJA_BaseAdr+0X10]
45 #define CAN_RxBuffer1 XBYTE[SJA_BaseAdr+0X11]
46 #define CAN_RxBuffer2 XBYTE[SJA_BaseAdr+0X12]
47 #define CAN_RxBuffer3 XBYTE[SJA_BaseAdr+0X13]
48 #define CAN_RxBuffer4 XBYTE[SJA_BaseAdr+0X14]
49 #define CAN_RxBuffer5 XBYTE[SJA_BaseAdr+0X15]
50 #define CAN_RxBuffer6 XBYTE[SJA_BaseAdr+0X16]
51 #define CAN_RxBuffer7 XBYTE[SJA_BaseAdr+0X17]
52 #define CAN_RxBuffer8 XBYTE[SJA_BaseAdr+0X18]
53 #define CAN_RxBuffer9 XBYTE[SJA_BaseAdr+0X19]
54 #define CAN_RxBuffer10 XBYTE[SJA_BaseAdr+0X1a]
55 #define CAN_RxBuffer11 XBYTE[SJA_BaseAdr+0X1b]
C51 COMPILER V7.01 CAN1 03/29/2007 11:52:39 PAGE 2
56 #define CAN_RxBuffer12 XBYTE[SJA_BaseAdr+0X1c]
57
58 #define CAN_TxBufferR0 XBYTE[SJA_BaseAdr+0X60]
59 #define CAN_TxBufferR5 XBYTE[SJA_BaseAdr+0X65]
60
61 #define CAN_RBSA XBYTE[SJA_BaseAdr+0X1e]
62 #define CAN_CDR XBYTE[SJA_BaseAdr+0X1f]
63 unsigned char data send_data[13]={0x88,0xa0,0xa0,0xa0,0x80,0x01,0x02,
64 0x03,0x04,0xf0,0xff,0xfe,0xfd};
65 unsigned char data rcv_data[13];
66 void send_dataaa(void);
67 void can_init(void);
68 void rec_data(void);
69 sbit CAN_RET=P1^0;
70 sbit BELL=P3^5;
71 sbit k3=P3^4;
72 //***************************//
73 void Delay_ms(unsigned char k) //长软件延时
74 {
75 1 unsigned char n,m;
76 1 for(n=0;n<=k;n++)
77 1 for(m=0;m<=200;m++);
78 1 }
79 void can_init(void)
80 {
81 1 uchar ai;
82 1 ai = CAN_IR;
83 1 CAN_BTR0=0x43;
84 1 CAN_BTR1=0x1c;
85 1 do
86 1 {
87 2 CAN_MODE=CAN_MODE|0x09;
88 2 }while((CAN_MODE&0x09)==0x00); //复位模式
89 1 CAN_CDR=0xc8; //时钟分频寄存器,选择PeliCAN模式??88
90 1 CAN_IER=0xff; //中断使能寄存器
91 1 ai = CAN_IR;
92 1 CAN_ACR0=0xaa; //验收寄存器
93 1 CAN_ACR1=0x55;
94 1 CAN_ACR2=0xaa;
95 1 CAN_ACR3=0x55;
96 1 CAN_AMR0=0xff; //屏蔽寄存器
97 1 CAN_AMR1=0xff;
98 1 CAN_AMR2=0xff;
99 1 CAN_AMR3=0xff;
100 1
101 1
102 1
103 1
104 1 CAN_BTR0=0x43; //
105 1 CAN_BTR1=0x1c; //20k
106 1
107 1 CAN_OCR=0x1a; //输出控制寄存器决定输出的不同模式??aa
108 1 CAN_RBSA=0x00; //RX 缓冲器起始地址寄存器
109 1 CAN_TXERR= 0x00; //发送错误接收器设置为0清除
110 1 ai=CAN_ECC; //清除错误代码捕捉寄存器,通过读清除
111 1 CAN_CMD=0x0c; /*清除数据溢出和释放接收缓冲器*/
112 1 /*
-
113 1 do
114 1 {
115 1 CAN_MODE=0x00;
116 1 }while((CAN_MODE&0x01)!=0x00);
C51 COMPILER V7.01 CAN1 03/29/2007 11:52:39 PAGE 3
117 1 */
118 1 do
119 1 {
120 2 CAN_MODE=0x08;
121 2 }while((CAN_MODE&0x08)!=0x08); //???0x00
122 1 }
123
124
125 void send_dataaa(void)
126 {
127 1 do{;} //判断是否正在接收,正在接收则等待??TBS,TCS
128 1 while((CAN_SR&0x10)==0x10);
129 1
130 1 do{;}
131 1 while((CAN_SR&0x08)!=0x08); //判断上次发送是否完成,未完成则等待
132 1
133 1 do
134 1 {;}
135 1 while((CAN_SR&0x04)!=0x04); //判断发送缓冲区是否锁定,锁定则等待
136 1 CAN_TxBuffer0=send_data[0];
137 1 CAN_TxBuffer1=send_data[1];
138 1 CAN_TxBuffer2=send_data[2];
139 1 CAN_TxBuffer3=send_data[3];
140 1 CAN_TxBuffer4=send_data[4];
141 1 CAN_TxBuffer5=send_data[5];
142 1 CAN_TxBuffer6=send_data[6];
143 1 CAN_TxBuffer7=send_data[7];
144 1 CAN_TxBuffer8=send_data[8];
145 1 CAN_TxBuffer9=send_data[9];
146 1 CAN_TxBuffer10=send_data[10];
147 1 CAN_TxBuffer11=send_data[11];
148 1 CAN_TxBuffer12=send_data[12];
149 1 CAN_CMD=0x01;
150 1 }
151 //***********************************//
152 void rec_data(void)
153 {
154 1 rcv_data[0]=CAN_RxBuffer0;
155 1 rcv_data[1]=CAN_RxBuffer1;
156 1 rcv_data[2]=CAN_RxBuffer2;
157 1 rcv_data[3]=CAN_RxBuffer3;
158 1 rcv_data[4]=CAN_RxBuffer4;
159 1 rcv_data[5]=CAN_RxBuffer5;
160 1 rcv_data[6]=CAN_RxBuffer6;
161 1 rcv_data[7]=CAN_RxBuffer7;
162 1 rcv_data[8]=CAN_RxBuffer8;
163 1 rcv_data[9]=CAN_RxBuffer9;
164 1 rcv_data[10]=CAN_RxBuffer10;
165 1 rcv_data[11]=CAN_RxBuffer11;
166 1 rcv_data[12]=CAN_RxBuffer12;
167 1
168 1 }
169 //******************************************//
170 main()
171 { //unsigned char i;
172 1 Delay_ms(100);
173 1 CAN_RET=0; //SJA1000复位
174 1 Delay_ms(100);
175 1 CAN_RET=1;
176 1 Delay_ms(100);
177 1 can_init();
178 1 while(1)
C51 COMPILER V7.01 CAN1 03/29/2007 11:52:39 PAGE 4
179 1 {
180 2 BELL=1; //关闭蜂鸣器
181 2 k3=1;
182 2 if(k3==0)
183 2 {
184 3 Delay_ms(100); //按键去抖经典值20毫秒
185 3 }
186 2 if(k3==0) //真的有按键按下
187 2 {
188 3 send_dataaa();
189 3 Delay_ms(10); //必要的小延时
190 3 // BELL=0;
191 3 Delay_ms(100);
192 3 }
193 2 }
194 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 320 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 26 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -