📄 scan.lst
字号:
C51 COMPILER V7.06 SCAN 01/17/2006 19:13:44 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SCAN
OBJECT MODULE PLACED IN SCAN.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SCAN.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include<AT89X52.H> //加载头文件
2 #include<SJA_BCANCONF.H> //加载变量定义模块
3 #include<SJA_BCANFUNC.C> //加载子程序模块文件
4 void Init_Cpu(void);
5 void Init_T2(void);
6 void Sja_1000_Init(void);
7 unsigned char data r_data[25],temp_data[9]; //定义变量
8 unsigned char data send_data[10],rcv_data[10];
9 unsigned char data sub=0x00;
10 unsigned char bdata flag_init;
11 unsigned int data m=0,n=0,i=0,j=0,sign=0;
12 sbit rcv_flag=flag_init^0;
13 sbit err_flag=flag_init^2;
14 void main(void)
15 {
16 1 Sja_1000_Init(); //初始化CAN控制器SJA1000
17 1 Init_T2(); //初始化定时器2
18 1 Init_Cpu(); //初始化单片机
19 1 flag_init=0x00;
20 1 while(1)
21 1 {
22 2 if(rcv_flag)
23 2 {
24 3 rcv_flag=0; //有接收中断,则单片机进行处理
25 3 BCAN_DATA_RECEIVE(rcv_data);
26 3 BCAN_CMD_PRG(0X04); //清空缓冲区
27 3 }
28 2 if(err_flag) //err-flag=1表示错误中断
29 2 {
30 3 err_flag=0;
31 3 Sja_1000_Init();
32 3 }
33 2 }
34 1 }
35
36 void ex0_int(void) interrupt 0 using 1 //外部中断0服务子程序
37 {
38 1 SJA_BCANAdr=REG_INTERRUPT;
39 1 flag_init=*SJA_BCANAdr; //查看保存中断源
40 1 }
41
42 void Serial_Int(void) interrupt 4 using 2 //串口中断服务子程序
43 {
44 1 r_data[n]=SBUF;
45 1 n++;
46 1 SCON=0xd0;
47 1 if(n>=2)
48 1 {
49 2 if(r_data[n-1]==0xdb&&r_data[n-2]!=0xdc) //判断是否帧起始符
50 2 {
51 3 n=1;
52 3 r_data[0]=0xdb;
53 3 }
54 2 }
55 1 for(i=14;i<25;i++) //判断是否帧结束符
C51 COMPILER V7.06 SCAN 01/17/2006 19:13:44 PAGE 2
56 1 {
57 2 if(r_data[i]==0xde&&(i-2)==r_data[3])
58 2 {
59 3 m=i;
60 3 i=25;
61 3 }
62 2 else m=0;
63 2 }
64 1 if(m==0&&n>=15) //发现废帧或干扰帧则丢弃
65 1 {
66 2 n=0;
67 2 }
68 1 if(m!=0) //校验和
69 1 {
70 2 for(i=1;i<=m-2;i++)
71 2 {
72 3 sub=sub+r_data[i];
73 3 }
74 2 if(sub==r_data[m-1]) //校验正确则取数据
75 2 {
76 3 for(i=4;i<=m-2;)
77 3 {
78 4 if(r_data[i]==0xdc)
79 4 {
80 5 temp_data[j]=r_data[i+1];
81 5 i=i+2;j++;sign++;
82 5 }
83 4 else
84 4 {
85 5 temp_data[j]=r_data[i];
86 5 i++;j++;sign++;
87 5 }
88 4 if(sign==3)
89 4 {
90 5 send_data[0]=0xaa;
91 5 send_data[1]=0x03;
92 5 send_data[2]=temp_data[0];
93 5 send_data[3]=temp_data[1];
94 5 send_data[4]=temp_data[2];
95 5 BCAN_DATA_WRITE(send_data);
96 5 BCAN_CMD_PRG(0x01); //调发送请求
97 5 }
98 4 if(sign==6)
99 4 {
100 5 send_data[0]=0xaa;
101 5 send_data[1]=0x03;
102 5 send_data[2]=temp_data[3];
103 5 send_data[3]=temp_data[4];
104 5 send_data[4]=temp_data[5];
105 5 BCAN_DATA_WRITE(send_data);
106 5 BCAN_CMD_PRG(0x01); //调发送请求
107 5 }
108 4 if(sign==9)
109 4 {
110 5 send_data[0]=0xaa;
111 5 send_data[1]=0x03;
112 5 send_data[2]=temp_data[6];
113 5 send_data[3]=temp_data[7];
114 5 send_data[4]=temp_data[8];
115 5 BCAN_DATA_WRITE(send_data);
116 5 BCAN_CMD_PRG(0x01); //调发送请求
117 5 i=25;
C51 COMPILER V7.06 SCAN 01/17/2006 19:13:44 PAGE 3
118 5 }
119 4 }
120 3 }
121 2 for(i=0;i<25;i++) //正确帧发送完毕或遇到错误帧均清零各参数
122 2 {
123 3 r_data[i]=0;
124 3 }
125 2 sub=0x00;
126 2 n=0;
127 2 j=0;
128 2 sign=0;
129 2 }
130 1 }
131
132 void Init_Cpu(void) //开中断
133 {
134 1 EA=1;
135 1 ES=1;
136 1 EX0=1;
137 1 }
138
139 void Init_T2(void) //初始化串口和定时器2
140 {
141 1 /* SCON = 0x50; //串口工作方式1
142 1 TMOD |= 0x20; //T1,初值自动重装
143 1 TH1 = 0xe8; //波特率9600bps @ 11,0592M
144 1 TL1 = 0xe8;
145 1 TR1 = 1; //开始计数
146 1 IE |= 0x90; //开放串口中断 */
147 1
148 1 SCON=0xd0; //串口工作方式3
149 1 T2CON=0x34; //定时器2设为波特率发生器模式
150 1 RCAP2H=0xfe; //波特率1200bps,晶振11.0592MHz
151 1 RCAP2L=0xe0;
152 1 TH2=0xfe;
153 1 TL2=0xe0;
154 1 TR2=1; //定时器2开中断
155 1 }
156
157 void Sja_1000_Init(void) //CAN控制器初始化子程序
158 {
159 1 BCAN_ENTER_RETMODEL(); //申请进入复位状态
160 1 BCAN_SET_BANDRATE(0x0e); //设置波特率为1000Kb/s
161 1 BCAN_SET_OBJECT(0xaa,0xff); //设置ACR AMR
162 1 BCAN_SET_OUTCLK(0xaa,0x48); //设置输出方式禁止clkout
163 1 BCAN_QUIT_RETMODEL(); //退出复位状态
164 1 SJA_BCANAdr=REG_CONTROL; //送控制寄存器地址
165 1 *SJA_BCANAdr|=0x1e; //开放错误中断和接收中断
166 1 }
167
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1092 ----
CONSTANT SIZE = 30 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 68 5
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -