📄 test.lst
字号:
C51 COMPILER V7.06 TEST 12/14/2006 14:53:22 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE TEST
OBJECT MODULE PLACED IN .\test.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\test.c DEBUG OBJECTEXTEND
stmt level source
1 #include <stdio.h>
2 #include <../philips/reg51f.h>
3 #include " sja1000.h "
4
5 #define HIGH 1
6 #define LOW 0
7
8 unsigned char Count = 0;
9 unsigned char Count1= 0; //慢闪
10 unsigned char FramID[4] ; //帧头
11 unsigned char TXDData[8]; //发送的数据
12 unsigned char RXDData[8] ; //接收的数据
13
14 unsigned char a[18]={0x55,0xaa,0x00,0x12,0x08,0x08,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0xff,
-0x00};
15 long int aa,bb;
16 long int chk;
17
18
19 sbit mute=P2^5; //消音
20 sbit bell=P1^1; //外接电铃
21 sbit ha=P2^6; //蜂鸣器
22
23
24 //串行输入信号控制脚
25 sbit DATp=P1^5;
26 sbit CLKp=P1^4;
27 sbit CTLp=P1^3;
28 unsigned char bdata tData[2]; /* 数据暂存区 */
29
30 sbit as1=tData[0]^0; //按钮状态
31 sbit as2=tData[0]^1;
32 sbit as3=tData[0]^2;
33 sbit as4=tData[0]^3;
34 sbit as5=tData[0]^4;
35 sbit as6=tData[0]^5;
36 sbit as7=tData[0]^6;
37 sbit as8=tData[0]^7;
38
39
40 sbit ls1=tData[1]^7; //灯的状态
41 sbit ls2=tData[1]^6;
42 sbit ls3=tData[1]^5;
43 sbit ls4=tData[1]^4;
44 sbit ls5=tData[1]^3;
45 sbit ls6=tData[1]^2;
46 sbit ls7=tData[1]^1;
47 sbit ls8=tData[1]^0;
48
49
50
51
52 sbit led1=P3^3; //指示灯状态
53 sbit led2=P3^4;
54 sbit led3=P3^5;
C51 COMPILER V7.06 TEST 12/14/2006 14:53:22 PAGE 2
55 sbit led4=P2^0;
56 sbit led5=P2^1;
57 sbit led6=P2^2;
58 sbit led7=P2^3;
59 sbit led8=P2^4;
60
61 //若要改变发送顺序,则可以改变diss,astate,lstate的字节顺序
62 unsigned char bdata diss; //消音状态位
63 sbit dis1=diss^7;
64 sbit dis2=diss^6;
65 sbit dis3=diss^5;
66 sbit dis4=diss^4;
67 sbit dis5=diss^3;
68 sbit dis6=diss^2;
69 sbit dis7=diss^1;
70 sbit dis8=diss^0;
71
72
73
74 unsigned char bdata astate; //按钮延时判断状态位
75 sbit ass1=astate^7;
76 sbit ass2=astate^6;
77 sbit ass3=astate^5;
78 sbit ass4=astate^4;
79 sbit ass5=astate^3;
80 sbit ass6=astate^2;
81 sbit ass7=astate^1;
82 sbit ass8=astate^0;
83
84 unsigned char bdata lstate; //指示灯延时判断状态位
85 sbit lss1=lstate^7;
86 sbit lss2=lstate^6;
87 sbit lss3=lstate^5;
88 sbit lss4=lstate^4;
89 sbit lss5=lstate^3;
90 sbit lss6=lstate^2;
91 sbit lss7=lstate^1;
92 sbit lss8=lstate^0;
93
94
95 unsigned char bdata DataIn; /* 串行数据输入 */
96 sbit IN2 = DataIn^0;
97
98 bit flash,flashs;
99
100 void InitSJA( void ); //SJA初始化
101 void SEND( void ); //发送函数
102 void InitSYS( void ); //系统初始化
103
104
105
106 void ReadData(void) //串行读数据
107 {
108 1 unsigned char i,j;
109 1 CLKp = HIGH; /* 时钟线置高 */
110 1 DATp = HIGH; /* 数据线置高 */
111 1 CTLp = HIGH; /* 采样数据 */
112 1 CTLp = LOW;
113 1 CLKp = LOW; /* 时钟线置低 */
114 1 for(j=0;j<2;j++)
115 1 {
116 2 for(i=0;i<8;i++)
C51 COMPILER V7.06 TEST 12/14/2006 14:53:22 PAGE 3
117 2 { DataIn = DataIn<<1; /* 数据读入 一共8个 */
118 3 IN2 = DATp;
119 3 CLKp = HIGH; /* 时钟翻转 */
120 3 CLKp = LOW;
121 3 }
122 2 tData[j] = DataIn; /* 把数据存入暂存区 */
123 2 }
124 1 }
125
126
127
128
129
130
131
132
133
134
135 void delay(unsigned int i)
136 {
137 1 while(i--);
138 1 }
139
140 //SJA1000初始化
141 void InitSJA( void )
142 {
143 1 PX0 = PRIORITY_HIGH; /*设CAN 优先中断 */
144 1 IT0 = INTLEVELACT; /*中断0 为电平激活 */
145 1 EA = DISABLE; /*所有中断禁能 */
146 1 SJAIntEn = DISABLE; /*来自SJA100 的外部中断禁能 */
147 1 while((ModeControlReg & RM_RR_Bit)==ClrByte)
148 1 {
149 2 /*其他位而不是复位模式/请求位没有改变 */
150 2 ModeControlReg = ModeControlReg|RM_RR_Bit;
151 2 }
152 1
153 1 ClockDivideReg = CANMode_Bit|CLKOff_Bit;/*PeliCan,同时关闭时钟*/
154 1
155 1
156 1 /*定义验收代码和屏蔽 */
157 1 AcceptCode0Reg = 0xaa;
158 1 AcceptCode1Reg = 0xaa;
159 1 AcceptCode2Reg = 0xaa;
160 1 AcceptCode3Reg = 0xaa;
161 1 AccepMask0Reg = 0x00;
162 1 AccepMask1Reg = 0x00;
163 1 AccepMask2Reg = 0x00;
164 1 AccepMask3Reg = 0x00;
165 1
166 1 /*位频率250Kbit/s@16MHz 总线被采样一次 */
167 1 BusTiming0Reg= 0x01;
168 1 BusTiming1Reg= 0x1C;
169 1 /*配置CAN 输出TX0 悬空TX1 推挽正常输出模式 */
170 1 OutControlReg = Tx1Float|Tx0PshPull|NormalMode;
171 1
172 1 do /*等待直到RM_RR_Bit 清零 */
173 1 {
174 2 ModeControlReg = AFM_Bit; //进入工作模式,选择单个验收滤波器32位
175 2
176 2 }while((ModeControlReg&RM_RR_Bit) != ClrByte);
177 1
178 1 InterruptEnReg = RIE_Bit|BEIE_Bit|DOIE_Bit; /*SJA1000 的接收中断使能 */
C51 COMPILER V7.06 TEST 12/14/2006 14:53:22 PAGE 4
179 1 /*SJA1000 的错误中断使能 */
180 1 /*SJA1000 的溢出中断使能 */
181 1
182 1 SJAIntEn = ENABLE; /*SJA1000 的外部中断使能 */
183 1 EA = ENABLE; /*所有中断使能 */
184 1 }
185
186 //数据发送
187 void SEND(void)
188 {
189 1 if(StatusReg&TBS_Bit==TBS_Bit); //发送缓冲区释放
190 1 {
191 2 TxFramInFo = 0x88; /* 扩展帧 */
192 2 TxBuffer1 = FramID[0]; //帧ID
193 2 TxBuffer2 = FramID[1];
194 2 TxBuffer3 = FramID[2];
195 2 TxBuffer4 = FramID[3];
196 2 TxBuffer5 = TXDData[0]; //发送的数据
197 2 TxBuffer6 = TXDData[1];
198 2 TxBuffer7 = TXDData[2];
199 2 TxBuffer8 = TXDData[3];
200 2 TxBuffer9 = TXDData[4];
201 2 TxBuffer10 = TXDData[5];
202 2 TxBuffer11 = TXDData[6];
203 2 TxBuffer12 = TXDData[7];
204 2 CommandReg = TR_Bit; /*置位发送请求位 */
205 2 }
206 1 }
207
208
209
210
211 void senddata(Uchar word)
212 { P=0;
213 1 ACC=0;
214 1 ACC=word;
215 1 TB8=!P;
216 1 SBUF=ACC;
217 1 while(TI==0);
218 1 TI=0;
219 1
220 1
221 1 }
222
223
224
225
226
227 void send_422(void)
228 {
229 1 aa=0;
230 1 bb=0;
231 1 chk=0;
232 1 a[12]=0xff-lstate;
233 1 a[13]=0xff-astate;
234 1 aa=a[0]+a[2]+a[4]+a[6]+a[8]+a[10]+a[12]+a[16];
235 1 bb=a[1]+a[3]+a[5]+a[7]+a[9]+a[11]+a[13]+a[17];
236 1 chk=(aa<<8)+bb;
237 1
238 1 chk = (chk >> 16) + (chk & 0xffff);
239 1 chk+=(chk>>16);
240 1 a[15]=~chk;
C51 COMPILER V7.06 TEST 12/14/2006 14:53:22 PAGE 5
241 1 a[14]=~(chk>>8);
242 1
243 1
244 1 senddata(a[0]);
245 1 senddata(a[1]);
246 1 senddata(a[2]);
247 1 senddata(a[3]);
248 1 senddata(a[4]);
249 1 senddata(a[5]);
250 1 senddata(a[6]);
251 1 senddata(a[7]);
252 1 senddata(a[8]);
253 1 senddata(a[9]);
254 1 senddata(a[10]);
255 1 senddata(a[11]);
256 1 senddata(a[12]);
257 1 senddata(a[13]);
258 1 senddata(a[14]);
259 1 senddata(a[15]);
260 1 senddata(a[16]);
261 1 senddata(a[17]);
262 1
263 1 }
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278 //系统初始化
279
280 void InitSYS(void)
281 { delay(1000);
282 1 TMOD=0x21; // 定时器1工作在模式2,自动再装入的8位计数器
283 1 // 定时器0工作在模式1,16位计数器
284 1 ET0=1; // 开定时器0中断
285 1 TR0=1; // 启动定时器0
286 1 EXTRAMCtrReg=EXTRAM; /* 低地址(0~128) 使用外部RAM */
287 1 EA=1;
288 1
289 1 SCON=0xD0; //方式3
290 1
291 1 TH1=0xf7;
292 1 TR1=1;
293 1 TI=1;
294 1
295 1 PCON|=0X80;
296 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -