📄 stepbystep.lst
字号:
C51 COMPILER V6.12 STEPBYSTEP 09/16/2007 21:44:56 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE STEPBYSTEP
OBJECT MODULE PLACED IN .\stepbystep.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE .\stepbystep.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <Reg52.h>
2 #include <SJA1000.h>
3
4 void init_port();//初始开I/O口
5 void init_cpu();
6 void INIT_SJA1000();
7 void INIT_SJA1000_CYC();
8 void MCU_SENT_TO_CAN();
9 void SJA1000_SEND();
10 void SJA1000_RECEIVE();
11 void SetBaund();
12 void URT_SENT(); //URT SENT
13 //void URT_SENDIN();
14 void SJA1000_RECEIVE();
15 //void SJA1000_RECEIVE_IN_INTERR();
16 void checklink();
17 //void checkbound();
18 unsigned char wait_data();
19 //void changebound();
20 void delay();
21
22 sbit S_MODE=P1^1;
23 sbit LED1=P1^2;
24 sbit LED2=P1^3;
25
26 unsigned char CAN_RXD_BUF[13];
27 unsigned char CAN_TXD_BUF[13];
28 unsigned char r_buf[15]; //URT RECEIVE BUFFER
29 unsigned char t_buf[15]; //URT SEND BUFFER
30 unsigned char temp,can_temp,i,m,count_time,can_length,j,k,l,receive_count,BTR0_NUM,BTR1_NUM;
31
32 bit URT_RECEIVE=0,link=0,UTR_SENDING=0,URT_SENDING=0;
33
34 bit receive_err=0,receive_succeed=0,setbound=0;
35 bit send_comply=0,baund=0;
36
37 void main(void)
38 {
39 1 init_cpu();
40 1 init_port();
41 1 TJA1050_CLOSE;
42 1 INIT_SJA1000();
43 1 TJA1050_WORK;
44 1 SetBaund();
45 1 EX0=1;
46 1 /* BTR0_NUM=BTR0_500Kbps;
47 1 BTR1_NUM=BTR1_500Kbps; */
48 1 ES=1;
49 1 i=0;
50 1 REN=1;
51 1 m=0;
52 1 IT0=1;
53 1 EA=1;
54 1 while(1)
55 1 {
C51 COMPILER V6.12 STEPBYSTEP 09/16/2007 21:44:56 PAGE 2
56 2 LED1=0;
57 2 while(!wait_data());
58 2 LED1=1;
59 2 checklink();
60 2 // checkbound();
61 2 if(link)
62 2 {
63 3 URT_SENT();
64 3 LED1=0;
65 3 for(i=0;i<14;i++)
66 3 {
67 4 r_buf[i]=0;
68 4 }
69 3 i=0;
70 3 LED1=1;
71 3 goto loop;
72 3
73 3 }
74 2 /* else if(baund)
75 2 {
76 2 URT_SENT();
77 2 BTR0_NUM=r_buf[5];
78 2 BTR1_NUM=r_buf[6];
79 2 changebound();
80 2 for(i=0;i<14;i++)
81 2 {
82 2 r_buf[i]=0;
83 2 }
84 2 i=0;
85 2 P2=0x69;
86 2 goto loop;
87 2 } */
88 2 else
89 2 {
90 3 LED2=0;
91 3 EX0=1;
92 3 INIT_SJA1000_CYC();
93 3 TJA1050_WORK;
94 3 receive_err=0;
95 3 MCU_SENT_TO_CAN();
96 3 REN=0;
97 3 ES=0;
98 3 EA=1;
99 3 LED2=0;
100 3 while(!receive_err);
101 3 receive_err=0;
102 3 SJA1000_RECEIVE();
103 3 EA=0;
104 3 if(receive_succeed)
105 3 {
106 4 r_buf[0]=can_length+1;
107 4 for(i=0;i<can_length;i++)
108 4 {
109 5 r_buf[i+1]=CAN_RXD_BUF[i];
110 5 }
111 4 /* for(i=0;i<14;i++)
112 4 {
113 4 P2=r_buf[i];
114 4 for(j=0;j<255;j++)
115 4 for(k=0;k<255;k++)
116 4 for(l=0;l<4;l++)
117 4 ;
C51 COMPILER V6.12 STEPBYSTEP 09/16/2007 21:44:56 PAGE 3
118 4 } */
119 4 ES=1;
120 4 i=0;
121 4 REN=1;
122 4 m=0;
123 4 IT0=1;
124 4 EA=1;
125 4 URT_SENT();
126 4 }
127 3 }
128 2 loop: link=0;
129 2 receive_err=0;
130 2 // init_cpu();
131 2 // init_port();
132 2 SetBaund();
133 2 EX0=1;
134 2 ES=1;
135 2 REN=1;
136 2 IT0=1;
137 2 EA=1;
138 2 TJA1050_CLOSE;
139 2 }
140 1 }
141
142 void init_port()
143 {
144 1 P0=0x00;
145 1 P1=0xff;
146 1 LED1=0;
147 1 LED2=0;
148 1 delay();
149 1 LED1=1;
150 1 LED2=1;
151 1 // P2=0xFE;
152 1 }
153
154 void delay()
155 {
156 1 unsigned char i,j,k;
157 1 for(i=0;i<255;i++)
158 1 for(j=0;j<255;j++)
159 1 for(k=0;k<5;k++)
160 1 ;;
161 1 }
162
163 void init_cpu()
164 {
165 1 ES=0;
166 1 EX0=1;
167 1 TMOD=0x00;
168 1 REN=0;
169 1 IT0=1;
170 1 TL0=0;
171 1 TH0=0;
172 1 TR0=0;
173 1 EA=0;
174 1 }
175
176 void INIT_SJA1000() /*initSJA1000*/
177 {
178 1 SJA1000_ADDRESS=SJA1000_MODEL; //指向模式寄存器
179 1 *SJA1000_ADDRESS=SJA1000_RESET_MODEL; //进入复位模式
C51 COMPILER V6.12 STEPBYSTEP 09/16/2007 21:44:56 PAGE 4
180 1
181 1 while(!(*SJA1000_ADDRESS&SJA1000_RESET_MODEL)); //等待进入复位模式
182 1
183 1 SJA1000_ADDRESS=SJA1000_CLOCKDIR; //指向时钟分频寄存器
184 1 *SJA1000_ADDRESS=SJA1000_CDR_COMMAND; //使用Peli CAN模式,CLOCK使用2分频输出
185 1
186 1 SJA1000_ADDRESS=SJA1000_ENINTERR; //指向中断使能寄存器
187 1 *SJA1000_ADDRESS=SJA1000_IER_COMMAND; //开放接收,数据溢出,错误报警中断
188 1
189 1 SJA1000_ADDRESS=SJA1000_OUTCONTR; //指向输出控制寄存器
190 1 *SJA1000_ADDRESS=SJA1000_OUT_COMMAND; //正常输出模式
191 1
192 1 SJA1000_ADDRESS=SJA1000_BUSTIME0; //指向总线定时0寄存器
193 1 *SJA1000_ADDRESS=0x01; //选择500Kbps
194 1 SJA1000_ADDRESS=SJA1000_BUSTIME1; //指向总线定时1寄存器
195 1 *SJA1000_ADDRESS=0x05; //选择500Kbps
196 1
197 1 SJA1000_ADDRESS=SJA1000_RBSA; //指向RX缓冲区起始地址寄存器
198 1 *SJA1000_ADDRESS=SJA1000_FIFO_ADD; //接收缓冲区FIFO起始为内部RAM的0地址
199 1
200 1 SJA1000_ADDRESS=SJA1000_AMRRX0; //指向验收屏蔽寄存器,所有位均参加验收
201 1 *SJA1000_ADDRESS=0x18;
202 1 SJA1000_ADDRESS=SJA1000_AMRRX1;
203 1 *SJA1000_ADDRESS=0x2f;
204 1 SJA1000_ADDRESS=SJA1000_AMRRX2;
205 1 *SJA1000_ADDRESS=AMR_CODE2;
206 1 SJA1000_ADDRESS=SJA1000_AMRRX3;
207 1 *SJA1000_ADDRESS=AMR_CODE3;
208 1
209 1 SJA1000_ADDRESS=SJA1000_ACRRX0; //指向验收代码寄存器,送ID码
210 1 *SJA1000_ADDRESS=0xfd;
211 1 SJA1000_ADDRESS=SJA1000_ACRRX1;
212 1 *SJA1000_ADDRESS=0x00;
213 1 SJA1000_ADDRESS=SJA1000_ACRRX2;
214 1 *SJA1000_ADDRESS=ACR_ID2;
215 1 SJA1000_ADDRESS=SJA1000_ACRRX3;
216 1 *SJA1000_ADDRESS=ACR_ID3;
217 1
218 1 SJA1000_ADDRESS=SJA1000_TX_ERR; //指向发送错误寄存器
219 1 *SJA1000_ADDRESS=SJA1000_CLEAR_TX_ERR; //清除错误
220 1
221 1 SJA1000_ADDRESS=SJA1000_RX_ERR; //指向发送错误寄存器
222 1 *SJA1000_ADDRESS=SJA1000_CLEAR_TX_ERR; //清除发送错误
223 1
224 1 SJA1000_ADDRESS=SJA1000_ALC; //指向仲裁丢失捕捉寄存器
225 1 temp=*SJA1000_ADDRESS; //通过读取清除
226 1
227 1 SJA1000_ADDRESS=SJA1000_ECC; //指向错误代码捕捉寄存器
228 1 temp=*SJA1000_ADDRESS; //通过读取清除
229 1
230 1
231 1 SJA1000_ADDRESS=SJA1000_MODEL; //指向模式寄存器
232 1 *SJA1000_ADDRESS=SJA1000_WORK_MODEL; //设置双滤波接收,进入工作模式
233 1 while(*SJA1000_ADDRESS&SJA1000_RESET_MODEL); //等待进入工作模式
234 1 }
235
236 void SJA1000_SEND()
237 {
238 1 LED2=0;;
239 1
240 1 SJA1000_ADDRESS=SJA1000_STATE; //指向状态寄存器
241 1 temp=*SJA1000_ADDRESS;
C51 COMPILER V6.12 STEPBYSTEP 09/16/2007 21:44:56 PAGE 5
242 1
243 1 do
244 1 {
245 2 temp=*SJA1000_ADDRESS; //读出当前状态
246 2 }
247 1 while(temp&SJA1000_RECEIVING); //如正在接收,则等待
248 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -