📄 main.lst
字号:
C51 COMPILER V7.06 MAIN 05/18/2006 09:36:31 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE main.c LARGE BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //--------------------------------------------------------------------------
2 // FileName : main.C
3 // Description: main function
4 // DateTime : 2005-07-06 Create
5 // Author : jztx-liuweiming
6 // Version : TxCmsPrj Ver1.0
7 //--------------------------------------------------------------------------
8 #include "main.h"
9 #include "string.h"
10 #include "PSD3200.H"
11 #include "My7132.H"
12 #include "MyCRC.H"
13 #include "SJA_PeliCan.h"
14
15 unsigned char rcv_len;
16 unsigned char bdata flag_init;
17 sbit rcv_flag = flag_init^0;
18 sbit err_flag = flag_init^2;
19 unsigned char data send_data[20], rcv_data[20];
20
21 #define Version 0x0101 // Version 1.0
22
23 xdata PSD_REGS PSD3200_reg _at_ 0x7F00;
24 //PSD Self regiser Address
25
26 #define MAX_TEST_CNT 3000
27
28 unsigned short nTest_Cnt = 0;
29
30 void delay(unsigned int k)
31 {
32 1 unsigned int i, j;
33 1 for(i=0;i<k;i++)
34 1 {
35 2 for(j=0;j<100;j++);
36 2 }
37 1 }
38
39 uchar Sja_1000_Init(void)
40 {
41 1 //enter reset mode
42 1 while ( (REG_ModeControl & 0x01) == 0x00 )
43 1 {
44 2 REG_ModeControl = REG_ModeControl & 0x01;
45 2 }
46 1
47 1 //CanMode + CBP_Bit + DivBy2
48 1 //REG_ClockDivide = 0x88;
49 1 REG_ClockDivide = 0xC0;
50 1
51 1 //
52 1 REG_AcceptCode0 = 0x00;
53 1 REG_AcceptCode1 = 0x00;
54 1 REG_AcceptCode2 = 0x00;
55 1 REG_AcceptCode3 = 0x00;
C51 COMPILER V7.06 MAIN 05/18/2006 09:36:31 PAGE 2
56 1
57 1 REG_AcceptMask0 = 0xff;
58 1 REG_AcceptMask1 = 0xff;
59 1 REG_AcceptMask2 = 0xff;
60 1 REG_AcceptMask3 = 0xff;
61 1
62 1 //100Kbpi
63 1 REG_BusTiming0 = 0x53;
64 1 REG_BusTiming1 = 0x2F;
65 1
66 1 //Tx1Float + Tx0PshPull + NormalMode
67 1 //REG_OutControl = 0xaa; //0x02 | 0x18 | 0x00 ;
68 1 REG_OutControl = 0x1a; //0x02 | 0x18 | 0x00 ;
69 1
70 1 //
71 1 REG_RxBufStartAdr = 0;
72 1
73 1 do
74 1 {
75 2 REG_ModeControl = 0x08;
76 2
77 2 } while(REG_ModeControl & 0x08 != 0x08);
78 1
79 1 //REG_ModeControl = 0x08;
80 1
81 1
82 1 //enable Recv Interrupt
83 1 REG_InterruptEn = 0x01;
84 1
85 1 return 'o';
86 1 }
87 //--------------------------------------------------------------------------
88 // Function : InitCPU
89 // Input Para : void
90 // Output Para : void
91 // Retun Val : void
92 // Call :
93 // call By : main
94 // DateTime : 2005-7-30
95 // Author : liuweiming@gmail.com
96 // Other info :
97 //--------------------------------------------------------------------------
98 void InitCPU(void)
99 {
100 1
101 1 PCON = 0x80;
102 1 /******** COM2 ******/
103 1
104 1 T2CON = 0x04;
105 1 PCON |= 0x0C;
106 1 RCAP2L = 0xb1; //9600
107 1 RCAP2H = 0xff;
108 1 SCON2 = 0x50;
109 1 IEA = 0x10; // ES1 = 1; IEA.4
110 1 TR2 = 1;
111 1 ET2 = 1;
112 1 /********** COM1 *******/
113 1 SCON = 0x50;
114 1 TMOD = 0x21;
115 1 TH1 = 0xf3;
116 1 TL1 = 0xf3;
117 1 TH0 = 0xF8; //(2^16 - x)*12*1/(晶振*10^6-1) = 时间*10^(-3)
C51 COMPILER V7.06 MAIN 05/18/2006 09:36:31 PAGE 3
118 1 TL0 = 0x30; //定时1ms
119 1 TI = 0;
120 1 RI = 0;
121 1
122 1 TR1=1;
123 1
124 1 TR0=1;
125 1 ET0=1;
126 1 IT1=1;
127 1
128 1 EX0=1;
129 1 EX1=1;
130 1 ES=1;
131 1 /*******************/
132 1 }
133
134 void SJA_isr(void) interrupt 0 using 1
135 {
136 1 flag_init = REG_Interrupt;
137 1 }
138
139 //--------------------------------------------------------------------------
140 // Function : timer0_isr
141 // Input Para : void
142 // Output Para : void
143 // Retun Val : void
144 // Description : System Timer0 Interrupt
145 // Call :
146 // call By : main
147 // DateTime : 2005-7-30
148 // Author : liuweiming@gmail.com
149 // Other info :
150 //--------------------------------------------------------------------------
151 void timer0_isr(void) interrupt 1 using 2
152 {
153 1 TR0 = 0;
154 1
155 1 TH0 = 0xF8;
156 1 TL0 = 0x30;
157 1
158 1 TR0 = 1;
159 1
160 1 //Comm1 TimeoOut Cnt -> (Modbus) Comm1Recv Control
161 1 if ( Comm1Recv_Flag == RECV_COUNT )
162 1 {
163 2 if ( nComm1Recv_Cnt++ >= MAX_RECV_CNT )
164 2 {
165 3 nComm1Recv_End++;
166 3 if ( nComm1Recv_End >= MAX_RECV_SUIT )
167 3 {
168 4 nComm1Recv_End = 0;
169 4 }
170 3 Comm1Recv[ nComm1Recv_End ].Len = 0;
171 3
172 3 Comm1Recv_Flag = RECV_TIMEOUT;
173 3 }
174 2 }
175 1 else
176 1 {
177 2 nComm1Recv_Cnt = 0;
178 2 }
179 1
C51 COMPILER V7.06 MAIN 05/18/2006 09:36:31 PAGE 4
180 1 //Comm2 TimeoOut Cnt -> (Modbus) Comm2Recv Control
181 1 if ( Comm2Recv_Flag == RECV_COUNT )
182 1 {
183 2 if ( nComm2Recv_Cnt++ >= MAX_RECV_CNT )
184 2 {
185 3 nComm2Recv_End++;
186 3 if ( nComm2Recv_End >= MAX_RECV_SUIT )
187 3 {
188 4 nComm2Recv_End = 0;
189 4 }
190 3 Comm2Recv[ nComm2Recv_End ].Len = 0;
191 3
192 3 Comm2Recv_Flag = RECV_TIMEOUT;
193 3 }
194 2 }
195 1 else
196 1 {
197 2 nComm2Recv_Cnt = 0;
198 2 }
199 1
200 1 //Comm1 TimeOut Cnt -> Comm1State Control
201 1 if ( Comm1State == WAITING )
202 1 {
203 2 if ( nComm1Stat_Cnt++ >= MAX_STAT_CNT )
204 2 {
205 3 Comm1State = TIMEOUT;
206 3 }
207 2 }
208 1 else
209 1 {
210 2 nComm1Stat_Cnt = 0;
211 2 }
212 1
213 1 //Comm2 TimeOut Cnt -> Comm2State Control
214 1 if ( Comm2State == WAITING )
215 1 {
216 2 if ( nComm2Stat_Cnt++ >= MAX_STAT_CNT )
217 2 {
218 3 Comm2State = TIMEOUT;
219 3 }
220 2 }
221 1 else
222 1 {
223 2 nComm2Stat_Cnt = 0;
224 2 }
225 1
226 1 nTest_Cnt++;
227 1 }
228 //--------------------------------------------------------------------------
229 // Function : uPSD_uart1_isr
230 // Input Para : void
231 // Output Para : void
232 // Retun Val : void
233 // Description : System Uart1 Interrupt
234 // Call :
235 // call By : main
236 // DateTime : 2005-7-30
237 // Author : liuweiming@gmail.com
238 // Other info :
239 //--------------------------------------------------------------------------
240 static void uPSD_uart1_isr (void) interrupt SIO1_VECTOR using 2
241 {
C51 COMPILER V7.06 MAIN 05/18/2006 09:36:31 PAGE 5
242 1 /*------------------------------------------------
243 1 comm2 Received data interrupt.
244 1 ------------------------------------------------*/
245 1
246 1 if ( (SCON2 & 0x01) != 0)
247 1 {
248 2 SCON2 &= 0xFE; //RI = 0;
249 2
250 2 Comm2Recv [nComm2Recv_End].Buff[ (Comm2Recv [nComm2Recv_End].Len)++ ] = SBUF2;
251 2 if ( Comm2Recv [nComm2Recv_End].Len >= MAX_RECV_BUFF )
252 2 {
253 3 Comm2Recv [nComm2Recv_End].Len = 0;
254 3 }
255 2
256 2 Comm2Recv_Flag = RECV_ONEBYTE;
257 2 }
258 1
259 1 /*------------------------------------------------
260 1 comm2 Transmitted data interrupt.
261 1 ------------------------------------------------*/
262 1
263 1 if ( (SCON2 & 0x02) != 0)
264 1 {
265 2 SCON2 &= 0xfd; //TI = 0;
266 2 if ( nComm2Send_Idx < Comm2Send.Len )
267 2 {
268 3 SBUF2 = Comm2Send.Buff [ nComm2Send_Idx ];
269 3 nComm2Send_Idx++;
270 3 }
271 2 else
272 2 {
273 3 if ( Comm2Send.Buff[0] != 0x00 )
274 3 {
275 4 Comm2State = WAITING;
276 4 }
277 3 }
278 2 }
279 1 }
280 //--------------------------------------------------------------------------
281 // Function : uPSD_uart0_isr
282 // Input Para : void
283 // Output Para : void
284 // Retun Val : void
285 // Description : System Uart0 Interrupt
286 // Call :
287 // call By : main
288 // DateTime : 2005-7-30
289 // Author : liuweiming@gmail.com
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -