?? testcan.lst
字號:
C51 COMPILER V7.01 TESTCAN 04/10/2003 13:33:09 PAGE 1
C51 COMPILER V7.01, COMPILATION OF MODULE TESTCAN
OBJECT MODULE PLACED IN testcan.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE testcan.c BROWSE INTVECTOR(0X4000) DEBUG OBJECTEXTEND
stmt level source
1 #include <REG52.H>
2 //#include <AT89X51.H>
3 #include <SJA_BCANCONF.H>
4 //#include <SJA_BCANFUNC.C>
5 #include <display_s.h>
6 #include <string.h>
7
8 void Init_Cpu(void);
9 void Init_T0(void);
10 void Sja_1000_Init(void);
11 void disp_ok(void);
12 void disp_err(void);
13
14 bit flag_sec;
15 unsigned char data a[5];
16 unsigned char data send_data[10],rcv_data[10];
17 unsigned char databuf,sec_data,second;
18 unsigned char data Tmod_data;
19 unsigned char bdata flag_init;
20
21 sbit rcv_flag=flag_init^0;
22 sbit err_flag=flag_init^2;
23
24
25 void main(void)
26 {
27 1 Sja_1000_Init(); //initialize Sja100
28 1 Init_T0(); //initialize T0
29 1 Init_Cpu(); //initialize mcu
30 1 flag_init=0x00;
31 1
32 1 while(1)
33 1 {
34 2 if(rcv_flag) //if there is receive interrupt
35 2 {
36 3 rcv_flag=0;
37 3 BCAN_DATA_RECEIVE(rcv_data);
38 3 BCAN_CMD_PRG(0x04);
39 3 disp_ok();
40 3 }
41 2 if(flag_sec) //
42 2 {
43 3 flag_sec=0; //send data if reach 1 s
44 3 //send_data[0]=0xaa; //Basic can
45 3 send_data[0]=0x48; //Pelican
46 3 send_data[1]=0xaa;
47 3 send_data[2]=0x00;
48 3 send_data[3]=second;
49 3 BCAN_DATA_WRITE(send_data);
50 3 BCAN_CMD_PRG(0x12);
51 3 }
52 2 if (err_flag)
53 2 {
54 3 err_flag=0;
55 3 disp_err();
C51 COMPILER V7.01 TESTCAN 04/10/2003 13:33:09 PAGE 2
56 3 Sja_1000_Init();
57 3 }
58 2 display(a);
59 2 }
60 1 }
61
62
63 void ex0_int(void) interrupt 0 using 1
64 {
65 1 SJA_BCANAdr=REG_INTERRUPT;
66 1 flag_init=*SJA_BCANAdr;
67 1 }
68
69
70 void T0_int(void) interrupt 1 using 2
71 {
72 1 TR0=0;
73 1 sec_data--;
74 1 if(sec_data==0)
75 1 {
76 2 sec_data=0x10;
77 2 TH0=0x80;
78 2 TL0=0x60;
79 2 flag_sec=1;
80 2 second++;
81 2 }
82 1 TR0=1;
83 1 }
84
85
86 void Init_Cpu(void)
87 {
88 1 PX0=1;
89 1 IT0=1;
90 1 EX0=1;
91 1 ET0=1;
92 1 EA=1;
93 1 sec_data=0x10;
94 1 }
95
96
97 void Init_T0(void)
98 {
99 1 Tmod_data=TMOD;
100 1 Tmod_data&=0xf0;
101 1 Tmod_data|=0x01;
102 1 TMOD=Tmod_data;
103 1 TH0=0x80;
104 1 TL0=0x60;
105 1 TR0=1;
106 1 sec_data=0x20;
107 1 second=0x00;
108 1 }
109
110
111 void Sja_1000_Init(void)
112 {
113 1 bit s;
114 1 s=BCAN_CREATE_COMMUNATION();
115 1 s=BCAN_ENTER_RETMODEL();
116 1 s=BCAN_SET_OUTCLK(0xaa,0xc8); //Pelican
117 1 s=BCAN_SET_BANDRATE(0x04);
C51 COMPILER V7.01 TESTCAN 04/10/2003 13:33:09 PAGE 3
118 1 s=BCAN_SET_OBJECT(0xaa,0xff);
119 1 //s=BCAN_SET_OUTCLK(0xaa,0x48);
120 1 s=BCAN_SET_MOD();
121 1 s=BCAN_QUIT_RETMODEL();
122 1 SJA_BCANAdr=REG_IER;
123 1 *SJA_BCANAdr|=0xff;
124 1 SJA_BCANAdr=REG_CONTROL;
125 1 //*SJA_BCANAdr|=0x1e;
126 1 }
127
128
129
130 void disp_ok(void)
131 {
132 1 a[0]=0x00;
133 1 a[1]=0x11;
134 1 a[2]=0x10;
135 1 databuf=rcv_data[2];
136 1 databuf>>=0x04;
137 1 a[3]=databuf;
138 1 databuf=rcv_data[2];
139 1 databuf=databuf&0x0f;
140 1 a[4]=databuf;
141 1 }
142
143
144 void disp_err(void)
145 {
146 1 a[0]=0x00;
147 1 a[1]=0x0e;
148 1 a[2]=0x10;
149 1 a[3]=0x0f;
150 1 a[4]=0x0c;
151 1 }
152
153
154
155 bit BCAN_CREATE_COMMUNATION(void)
156 {
157 1 SJA_BCANAdr=REG_TEST; //訪問測試寄存器
158 1
159 1 *SJA_BCANAdr =0xaa; //寫入測試值
160 1 if(*SJA_BCANAdr == 0xaa)
161 1 {
162 2 return 0; //讀測試正確
163 2 }
164 1 else
165 1 {
166 2 return 1;
167 2 }
168 1 }
169
170
171 bit BCAN_ENTER_RETMODEL(void)
172 {
173 1 unsigned char TempData;
174 1 SJA_BCANAdr = REG_CONTROL; //訪問地址指向控制寄存器
175 1 TempData= *SJA_BCANAdr; //保存原始值
176 1 *SJA_BCANAdr=(TempData|0x01); //置位復位請求
177 1 if((*SJA_BCANAdr&0x01) == 1)
178 1 {
179 2 return 0;
C51 COMPILER V7.01 TESTCAN 04/10/2003 13:33:09 PAGE 4
180 2 }
181 1 else
182 1 {
183 2 return 1;
184 2 }
185 1
186 1 }
187
188
189 bit BCAN_QUIT_RETMODEL(void)
190 {
191 1 unsigned char TempData;
192 1 SJA_BCANAdr = REG_CONTROL; //訪問地址指向控制寄存器
193 1 TempData = *SJA_BCANAdr; //保存原始值
194 1 *SJA_BCANAdr=(TempData&0xfe); //清除復位請求
195 1 if((*SJA_BCANAdr&0x01) == 0)
196 1 {
197 2 return 0; //
198 2 }
199 1 else
200 1 {
201 2 return 1; //退出成功
202 2 }
203 1
204 1 }
205
206
207 unsigned char code SJA_BTR_CODETAB[]={
208 0x53,0x2F, // ;20KBPS的預設值
209 0x87,0xFF, //;40KBPS的預設值
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -