📄 can.lst
字号:
C51 COMPILER V3.20, SN-50203013 CAN 02/18/04 15:50:14 PAGE 1
DOS C51 COMPILER V3.20, COMPILATION OF MODULE CAN
OBJECT MODULE PLACED IN CAN.OBJ
COMPILER INVOKED BY: D:\C51\C51.EXE CAN.C
stmt level source
1 #define BASE_CAN 0x4000
2 #define CON_REG (unsigned char xdata*)(BASE_CAN)/*mode*/
3 #define CMD_REG (unsigned char xdata*)(BASE_CAN+1)
4 #define STS_REG (unsigned char xdata*)(BASE_CAN+2)
5 #define INT_REG (unsigned char xdata*)(BASE_CAN+3)
6 #define IE_REG (unsigned char xdata*)(BASE_CAN+4)
7 #define ACC0_REG (unsigned char xdata*)(BASE_CAN+16)
8 #define ACC1_REG (unsigned char xdata*)(BASE_CAN+17)
9 #define ACC2_REG (unsigned char xdata*)(BASE_CAN+18)
10 #define ACC3_REG (unsigned char xdata*)(BASE_CAN+19)
11 #define ACM0_REG (unsigned char xdata*)(BASE_CAN+20)
12 #define ACM1_REG (unsigned char xdata*)(BASE_CAN+21)
13 #define ACM2_REG (unsigned char xdata*)(BASE_CAN+22)
14 #define ACM3_REG (unsigned char xdata*)(BASE_CAN+23)
15 #define BTR0_REG (unsigned char xdata*)(BASE_CAN+6)
16 #define BTR1_REG (unsigned char xdata*)(BASE_CAN+7)
17 #define OUT_REG (unsigned char xdata*)(BASE_CAN+8)
18 #define TEST_REG (unsigned char xdata*)(BASE_CAN+9)
19 #define ALC_REG (unsigned char xdata*)(BASE_CAN+11)
20 #define ECC_REG (unsigned char xdata*)(BASE_CAN+12)
21 #define EWL_REG (unsigned char xdata*)(BASE_CAN+13)
22 #define REC_REG (unsigned char xdata*)(BASE_CAN+14)
23 #define TEC_REG (unsigned char xdata*)(BASE_CAN+15)
24 #define RX_FRAME (unsigned char xdata*)(BASE_CAN+16)
25 #define TX_FRAME (unsigned char xdata*)(BASE_CAN+16)
26 #define RxMC_REG (unsigned char xdata*)(BASE_CAN+29)
27 #define RBSA_REG (unsigned char xdata*)(BASE_CAN+30)
28
29 #define CLK_REG (unsigned char xdata*)(BASE_CAN+31)
30 #define RX_REG (unsigned char xdata*)(BASE_CAN+16)
31 #define TX_REG (unsigned char xdata*)(BASE_CAN+16)
32
33
34 #include "REG51.h"
35 #include </C51/string.h>
36 #include </C51/intrins.h>
37 #include "can.h"
38 #include "sio.h"
39
40
41
42 MSG_BUF can_in;
43 MSG_BUF can_out;
44
45 unsigned char bdata sts;
46 sbit rdy=sts^0;
47 sbit ovr=sts^1;
48 sbit tbs=sts^2;
49 sbit tcs=sts^3;
50 sbit rs=sts^4;
51 sbit ts=sts^5;
52 sbit es=sts^6;
53 sbit bs=sts^7;
54
55 unsigned char bdata int_;
C51 COMPILER V3.20, SN-50203013 CAN 02/18/04 15:50:14 PAGE 2
56 sbit int_ri=int_^0;
57 sbit int_ti=int_^1;
58 sbit int_ei=int_^2;
59 sbit int_oi=int_^3;
60 sbit int_wi=int_^4;
61
62 static void can_isr (void) interrupt 0 using 3
63 {
64 1 unsigned char i,len;
65 1 unsigned int id;
66 1 EA=0;
67 1 //sts=*(STS_REG);
68 1 int_=*(INT_REG);
69 1 if(int_ri)
70 1 {
71 2 i=(*(RX_REG))&0x0f;
72 2 len=i<8?i:8;
73 2 id=*(RX_REG+1);
74 2 id<<=8;
75 2 id|=*(RX_REG+2);
76 2 id>>=5;
77 2 can_in.ID=id;
78 2 can_in.LEN=i;
79 2 for (i=0; i < len; i++)
80 2 (can_in.BUF[i]) = *(RX_REG+i+3); // copy bytes
81 2 clr_rxbuf();
82 2 // SBUF = can_in.BUF[0];
83 2 SBUF = can_in.ID;
84 2 }
85 1 EA=1;
86 1 }
87
88 void can_init (void)
89 {
90 1 EA = 0;
91 1 *(CON_REG) = 0x01;
92 1 *(CLK_REG) = 0x88;//PeliCAN mode clock off
93 1 *(ACC0_REG) = 0x0;
94 1 *(ACC1_REG) = 0x70;
95 1 *(ACC2_REG) = 0x0;
96 1 *(ACC3_REG) = 0x70;
97 1 *(ACM0_REG) = 0xBF;
98 1 *(ACM1_REG) = 0xFF;
99 1 *(ACM2_REG) = 0xBF;
100 1 *(ACM3_REG) = 0xFF;
101 1 *(IE_REG) = 0x01;
102 1 *(BTR0_REG) = 0x1;
103 1 *(BTR1_REG) = 0x1C;
104 1 *(OUT_REG) = 0xAA;
105 1 *(RBSA_REG) = 0x0;
106 1 *(CON_REG) = 0x00;
107 1 IT0 = 0;
108 1 EX0 = 1;
109 1 PX0 = 1;
110 1 EA = 1;
111 1 // while ((*(STS_REG)) & 0x80);//wait until controller is active
112 1 }
113
114 void clr_rxbuf()
115 {
116 1 *(CMD_REG)=0x04;
117 1 }
C51 COMPILER V3.20, SN-50203013 CAN 02/18/04 15:50:14 PAGE 3
118
119 //void clr_ovr()
120 //{
121 //()*(CMD_REG)=0x08;
122 //}
123
124 //void go_sleep()
125 //{
126 //()*(CMD_REG)=0x10;
127 //}
128
129 //void req_tx()
130 //{
131 //()*(CMD_REG)=0x01;
132 //}
133
134 //void stop_tx()
135 //{
136 //()*(CMD_REG)=0x02;
137 //}
138
139 //unsigned char check_busoff_state (void)
140 //{
141 // Check status register for bus-off state
142 // if ((*(STS_REG)) & 0x80)
143 // return (0xFF); // CAN controller is in bus-off
144 // else
145 // return (0); // CAN controller active
146 //}
147
148 //a example ,can_rxbuf---->rs232c txbuf
149
150 //char can_getmsg (void)
151 //{
152
153 //}
154
155
156
157 //unsigned char can_rbuflen (void)
158 //{
159 //}
160
161
162
163 void transmit_message ( MSG_BUF *pTransmitBuf )
164 {
165 1 unsigned long Identifier; // CAN message identifier
166 1 unsigned char Length; // lenght of data frame
167 1 unsigned char i; // local loop counter
168 1
169 1 // Prepare length code and identifier.
170 1 Length = pTransmitBuf->LEN<8 ?pTransmitBuf->LEN :8;
171 1 Identifier = (pTransmitBuf->ID << 5);
172 1
173 1 // Wait until write access to CAN controller buffer is allowed
174 1 while ( !((*(STS_REG)) & 0x04) );
175 1
176 1 // Write message to transmit buffer
177 1
178 1
179 1 *(TX_REG) = (unsigned char)Length;
C51 COMPILER V3.20, SN-50203013 CAN 02/18/04 15:50:14 PAGE 4
180 1 *(TX_REG+2)= (unsigned char)Identifier; // write identifier
181 1 *(TX_REG+1)= (unsigned char)(Identifier >> 8); // write identifier
182 1 for (i=0; i < Length; i++) // write data bytes
183 1 *(TX_REG+3+i) = *(unsigned char *)(pTransmitBuf->BUF+i); // copy data byte
184 1
185 1 // Init a transmission request.
186 1 *(CMD_REG) = 0x01;
187 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 340 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 28 5
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 + -