📄 com645.lst
字号:
C51 COMPILER V8.05a COM645 04/03/2009 09:40:36 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE COM645
OBJECT MODULE PLACED IN com645.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe com645.c DB OE SMALL ROM(LARGE)
line level source
1 #include<reg52.h>
2 #define uchar unsigned char
3 #define uint unsigned int
4
5 uchar ii,flagover,flag682,flag681,flaglen,flagdata,flagadd;
6 uchar a,czm,len,temp,flagb;
7 uint comsjR[50];
8 void init()
9 {
10 1 TMOD=0x20;//设定定时器1工作方式2
11 1 TH1=0xf3;
12 1 //TL1=0xf3; //设定波特率为4800,晶振为24MHZ
13 1 TR1=1;//启动定时器1
14 1
15 1 SM0=0;//设定串口工作方式1/
16 1 SM1=1;//同上
17 1 REN=1;//允许串口接收
18 1 EA=1;//开总中断
19 1 ES=1;//开串口中断
20 1
21 1 }
22
23 void delay(uint z) //延时函数
24 {
25 1 uint x,y;
26 1 for(x=z;x>0;x--)
27 1
28 1 for(y=1;y>0;y--);
29 1 }
30
31 void comT()
32 {
33 1 uchar comta; //
34 1
35 1 for(comta=0;comta<ii;comta++)
36 1 {
37 2 ES=0;
38 2 SBUF=comsjR[comta];
39 2 comsjR[comta]=0; //接收区数组标识重新清0,用于下次数据帧接收
40 2 while(!TI);
41 2 TI=0;
42 2 ES=1;
43 2 }
44 1
45 1 }
46
47
48 void main()
49 {
50 1 init();
51 1 while(1)
52 1 {
53 2 if(0);
54 2 }
55 1 }
C51 COMPILER V8.05a COM645 04/03/2009 09:40:36 PAGE 2
56
57 void ser() interrupt 4
58 {
59 1 ES=0; //停止串口中断接收
60 1 RI=0; //接收完之后RI必须软件清0
61 1 temp=SBUF;
62 1 if(temp==0x68) //判断是否接收到帧头
63 1 {
64 2 if(!flag681)
65 2 {
66 3 comsjR[ii]=temp;
67 3 flagb=1;
68 3 ii++;
69 3 }
70 2 }
71 1
72 1 if(flag681 && (!flag682) ) //判断是否接收到第2个68
73 1 {
74 2 comsjR[ii]=temp;
75 2 if((ii==7) && (temp==0x68))
76 2 {
77 3 flagb=2;
78 3 a=0;
79 3 }
80 2 ii++;
81 2 }
82 1 if(flag681 && flag682 && !flaglen ) //接收第2个68后的两个字符,并提取数据区的长度
83 1 {
84 2 comsjR[ii]=temp;
85 2 ii++;
86 2 if(ii==10)
87 2 {
88 3 flagb=3;
89 3 czm=comsjR[ii-2];
90 3 len=comsjR[ii-1];
91 3 a=0;
92 3 }
93 2 }
94 1
95 1 if(flag681 && flag682 && flaglen && !flagdata) //接收数据区
96 1 {
97 2 comsjR[ii]=temp;
98 2 ii++;
99 2 a++;
100 2 if(a==len)
101 2 {
102 3 flagb=4;
103 3 a=0;
104 3 }
105 2 }
106 1
107 1 if(flag681 && flag682 && flaglen && flagdata && !flagover) //接收检验和和帧尾。并将缓冲区标识ii清0
108 1 {
109 2
110 2 comsjR[ii]=temp;
111 2 ii++;
112 2 if(0x16==comsjR[11+len])
113 2 {
114 3 flagb=5;
115 3 //ii=0;
116 3 }
117 2
C51 COMPILER V8.05a COM645 04/03/2009 09:40:36 PAGE 3
118 2 }
119 1 switch(flagb) //判断FLAGEB是为了防止flag681=1后执行下面的IF语句,后面的
-同理。
120 1 {
121 2 case 1: flag681 = 1; break;
122 2 case 2: flag682 = 1; break;
123 2 case 3: flaglen = 1; break;
124 2 case 4: flagdata = 1; break;
125 2 case 5:
126 2 flagover = 0;
127 2 flag681=0;
128 2 flag682 =0;
129 2 flaglen =0;
130 2 flagdata =0;
131 2 comT();
132 2 ii=0; //接收区数组标识II重新清0,用于下次数据帧接收
133 2 ///default:
134 2 ///a=1;
135 2 }
136 1
137 1 ES=1; //打开串口中断接收
138 1 }
139
140
141
142
143
144
145
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 418 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 112 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -