📄 selftest.lst
字号:
C51 COMPILER V7.01 SELFTEST 08/07/2003 10:58:02 PAGE 1
C51 COMPILER V7.01, COMPILATION OF MODULE SELFTEST
OBJECT MODULE PLACED IN selftest.OBJ
COMPILER INVOKED BY: C:\PROGRAM FILES\KEIL701\C51\BIN\C51.EXE selftest.c BROWSE INTVECTOR(0X8000) INCDIR(C:\Keil\C51\INC
-\) DEBUG OBJECTEXTEND
stmt level source
1 #include "REG52.H"
2 #include "SJA_BCANCONF.H"
3 #include "VIIC_C51.h"
4 #include "ZLG7290.h"
5 #include "string.h"
6 #include "intrins.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 void delay(unsigned int k);
14 //void send(unsigned char a);
15 void display(unsigned char display_buffer[5]);
16
17
18 bit flag_sec;
19 unsigned char data a[5];
20 unsigned char data send_data[10],rcv_data[10];
21 unsigned char databuf,sec_data,second;
22 unsigned char data Tmod_data;
23 unsigned char bdata flag_init;
24 sbit SDA=P1^0;
25 sbit CLK=P1^1;
26 unsigned char code led[20]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8
-e,0xbf,0x89,0x8C};
27
28
29 unsigned char data display_bit;
30
31 sbit rcv_flag=flag_init^0;
32 sbit err_flag=flag_init^2;
33
34
35 void main(void)
36 {
37 1 Sja_1000_Init(); //initialize Sja1000
38 1 Init_T0(); //initialize T0
39 1 Init_Cpu(); //initialize mcu
40 1 flag_init=0x00;
41 1
42 1 while(1)
43 1 {
44 2 if(rcv_flag) //if there is receive interrupt
45 2 {
46 3 rcv_flag=0;
47 3 BCAN_DATA_RECEIVE(rcv_data);
48 3 BCAN_CMD_PRG(0x04);
49 3 disp_ok();
50 3 }
51 2 if(flag_sec) //
52 2 {
53 3 flag_sec=0; //send data if reach 1 s
C51 COMPILER V7.01 SELFTEST 08/07/2003 10:58:02 PAGE 2
54 3 //send_data[0]=0xaa; //Basic can
55 3 send_data[0]=0x08; //Pelican
56 3 send_data[1]=0xaa;
57 3 send_data[2]=second;
58 3 send_data[3]=second;
59 3 BCAN_DATA_WRITE(send_data);
60 3 BCAN_CMD_PRG(0x12);
61 3 }
62 2 if (err_flag)
63 2 {
64 3 err_flag=0;
65 3 disp_err();
66 3 Sja_1000_Init();
67 3 }
68 2
69 2
70 2 display(a);
71 2 delay(200);
72 2 }
73 1 }
74
75
76 void ex0_int(void) interrupt 2 //using 1
77 {
78 1 SJA_BCANAdr=REG_INTERRUPT;
79 1 flag_init=*SJA_BCANAdr;
80 1 }
81
82 void T0_int(void) interrupt 1 //using 2
83 {
84 1 static unsigned char ii=0;
85 1 TR0=0;
86 1 TH0=0x80;
87 1 TL0=0x60;
88 1 ii++;
89 1 if(ii>40)
90 1 {
91 2 flag_sec=1;
92 2 ii=0;
93 2 }
94 1 TR0=1;
95 1 }
96
97 void Init_Cpu(void)
98 {
99 1 PX1=1;
100 1 IT1=1;
101 1 EX1=1;
102 1 ET0=1;
103 1 EA=1;
104 1 sec_data=0x10;
105 1 }
106
107
108 void Init_T0(void)
109 {
110 1 Tmod_data=TMOD;
111 1 Tmod_data&=0xf0;
112 1 Tmod_data|=0x01;
113 1 TMOD=Tmod_data;
114 1 TH0=0x80;
115 1 TL0=0x60;
C51 COMPILER V7.01 SELFTEST 08/07/2003 10:58:02 PAGE 3
116 1 TR0=1;
117 1 sec_data=0x20;
118 1 second=0x00;
119 1 }
120
121
122 void Sja_1000_Init(void)
123 {
124 1 bit s;
125 1 s=BCAN_CREATE_COMMUNATION();
126 1 s=BCAN_ENTER_RETMODEL();
127 1 s=BCAN_SET_OUTCLK(0xaa,0xc8); //Pelican
128 1 s=BCAN_SET_BANDRATE(0x04);
129 1 s=BCAN_SET_OBJECT(0xaa,0xff);
130 1 s=BCAN_SET_MOD();
131 1 s=BCAN_QUIT_RETMODEL();
132 1 SJA_BCANAdr=REG_IER;
133 1 *SJA_BCANAdr=0x03;
134 1
135 1 }
136
137
138
139 void disp_ok(void)
140 {
141 1 a[0]=0x01;
142 1 a[1]=0x0D;
143 1 a[2]=0x15;
144 1 a[3]=0X15;
145 1 a[4]=0X10;
146 1 }
147
148
149 void disp_err(void)
150 {
151 1 a[0]=0x18;
152 1 a[1]=0x15;
153 1 a[2]=0x18;
154 1 a[3]=0x18;
155 1 a[4]=0x0E;
156 1 }
157
158
159
160 bit BCAN_CREATE_COMMUNATION(void)
161 {
162 1 SJA_BCANAdr=REG_TEST; //访问测试寄存器
163 1
164 1 *SJA_BCANAdr =0xaa; //写入测试值
165 1 if(*SJA_BCANAdr == 0xaa)
166 1 {
167 2 return 0; //读测试正确
168 2 }
169 1 else
170 1 {
171 2 return 1;
172 2 }
173 1 }
174
175
176 bit BCAN_ENTER_RETMODEL(void)
177 {
C51 COMPILER V7.01 SELFTEST 08/07/2003 10:58:02 PAGE 4
178 1 unsigned char TempData;
179 1 SJA_BCANAdr = REG_CONTROL; //访问地址指向控制寄存器
180 1 TempData= *SJA_BCANAdr; //保存原始值
181 1 *SJA_BCANAdr=(TempData|0x01); //置位复位请求
182 1 if((*SJA_BCANAdr&0x01) == 1)
183 1 {
184 2 return 0;
185 2 }
186 1 else
187 1 {
188 2 return 1;
189 2 }
190 1
191 1 }
192
193
194 bit BCAN_QUIT_RETMODEL(void)
195 {
196 1 unsigned char TempData;
197 1 SJA_BCANAdr = REG_CONTROL; //访问地址指向控制寄存器
198 1 TempData = *SJA_BCANAdr; //保存原始值
199 1 *SJA_BCANAdr=(TempData&0xfe); //清除复位请求
200 1 if((*SJA_BCANAdr&0x01) == 0)
201 1 {
202 2 return 0; //
203 2 }
204 1 else
205 1 {
206 2 return 1; //退出成功
207 2 }
208 1
209 1 }
210
211
212 unsigned char code SJA_BTR_CODETAB[]={
213 0x53,0x2F, // ;20KBPS的预设值
214 0x87,0xFF, //;40KBPS的预设值
215 0x47,0x2F, //;50KBPS的预设值
216 0x83,0xFF, //;80KBPS的预设值
217 0x43,0x2f, //;100KBPS的预设值
218 0x03,0x1c, //;125KBPS的预设值
219 0x81,0xfa, //;200KBPS的预设值
220 0x01,0x1c, //;250KBPS的预设值
221 0x80,0xfa, //;400KBPS的预设值
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -