📄 main.lst
字号:
C51 COMPILER V7.50 MAIN 06/06/2006 16:03:20 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 #include <IO_define.h>
3 #include <intrins.h>
4 #define uchar unsigned char
5 #define uint unsigned int
6 #define max_len 0x10//最大长度
7 //void delay10ms(uint count);
8 uchar send_buf[max_len]={0x3a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0d,0x0a};
-//发送缓冲区
9 uchar recv_buf[max_len]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
-//接收缓冲区
10
11 uchar count_s;//发送计数
12 uchar count_r;//接收计数
13 bit flag1;
14 bit sflag;
15 send(void);
16 getout();
17 receive();
18 restio();
19 extern write_bit(uchar line,bit value);
20 extern control(void);
21 outio(void);
22 //主程序..........................................................................................
23 void main()
24 {
25 1 P1=0;//取消片选
26 1 P0=0xff;
27 1 count_s=0;
28 1 count_r=0;
29 1 //系统初始化
30 1 TMOD= 0x21;// 定时器0工作模式1, 16位定时方式// 定时器1工作于8位自动重载模式, 用于产生波特率
31 1 TCON= 0x05;
32 1 TH0 = 0xfd;
33 1 TL0 = 0xfe;
34 1 EA = 1;
35 1 ET0 = 0;
36 1 ET1 = 0;
37 1
38 1 IP = 0x10;
39 1 TR0 = 0;
40 1 //串口设置
41 1 TH1=250;
42 1 TL1=250;
43 1 TR1=1;
44 1 PCON=0X80;//SMOD=1,速率加倍
45 1 SCON=0X50;//工作方式1,9600
46 1
47 1 ES=1;//开串口中断
48 1
49 1 while(1)//主循环................................................................................
50 1 {
51 2 outio();
52 2 // control();//调用控制子程序
53 2
C51 COMPILER V7.50 MAIN 06/06/2006 16:03:20 PAGE 2
54 2 sflag=0;//一秒一次标志位清零
55 2 if(fsec==0)flag1=1;//0.5秒执行一次程序
56 2 if((fsec==1)&&(flag1==1))//一秒钟执行一次程序
57 2 {
58 3 flag1=0;
59 3 sflag=1;
60 3 }
61 2 if(sflag)
62 2 {
63 3 ;
64 3 }
65 2 }
66 1 }//主程序结束...................................................................................
67
68 //接收数据处理..................................................................................
69 receive()
70 {
71 1 uchar i,j;
72 1 uint lrc;
73 1 if((recv_buf[0]==0x3a)&(recv_buf[1]==0x01))
74 1 {
75 2 for(i=1;i<=11;i++)
76 2 {
77 3 lrc+=recv_buf[i];
78 3 }
79 2 i=lrc;
80 2 lrc=_irol_(lrc,8);
81 2 j=lrc;
82 2 lrc=0;
83 2 if((i==recv_buf[12])&(j==recv_buf[13]))
84 2 {
85 3 send_buf[1]=0x02;
86 3 send_buf[2]=0x01;
87 3 send_buf[12]=0x03;
88 3 send();
89 3 getout();
90 3 }
91 2 else
92 2 {
93 3 send_buf[1]=0x02;
94 3 send_buf[2]=0x02;
95 3 send_buf[12]=0x04;
96 3 send_buf[13]=0x00;
97 3 send();
98 3 }
99 2 }
100 1 else
101 1 {
102 2 send_buf[1]=0x02;
103 2 send_buf[2]=0x02;
104 2 send_buf[12]=0x04;
105 2 send_buf[13]=0x00;
106 2 send();
107 2 }
108 1
109 1 }
110 //将收到的数据送io口
111 getout()
112 {
113 1 uchar i;
114 1 restio();
115 1 outio();
C51 COMPILER V7.50 MAIN 06/06/2006 16:03:20 PAGE 3
116 1 for(i=2;i<=11;i++)
117 1 {
118 2 write_bit(recv_buf[i],0);
119 2 }
120 1 }
121 send()
122 {
123 1 count_r=0;
124 1 count_s=0;
125 1 SBUF=send_buf[count_s];//发送第一个数据
126 1 count_s++;
127 1 }
128 restio()
129 {
130 1 qw1=0xff;
131 1 qw2=0xff;
132 1 qw3=0xff;
133 1 qw4=0xff;
134 1 qw5=0xff;
135 1 qw6=0xff;
136 1 qw7=0xff;
137 1 qw8=0xff;
138 1 qw9=0xff;
139 1 }
140 //串口中断处理...................................................................................
141 void serial_int() interrupt 4 using 2
142 {
143 1 if(TI)//发送中断
144 1 {
145 2 if(count_s<max_len)
146 2 {
147 3 TI=0;
148 3 SBUF=send_buf[count_s];
149 3 count_s++;
150 3 }
151 2 else
152 2 {
153 3 count_s=0;
154 3 TI=0;
155 3 }
156 2 }
157 1 if(RI)//接收中断
158 1 {
159 2 if(count_r<(max_len-1))
160 2 {
161 3 recv_buf[count_r]=SBUF;
162 3 count_r++;
163 3 RI=0;
164 3 }
165 2 else
166 2 {
167 3 RI=0;
168 3 recv_buf[count_r]=SBUF;
169 3 receive();
170 3 return;
171 3 }
172 2 }
173 1 }
174 //T0中断子程序:.............................................................................
175 void timer0() interrupt 1 using 1
176 {
177 1 //T0 reroad
C51 COMPILER V7.50 MAIN 06/06/2006 16:03:20 PAGE 4
178 1 TH0 = 252;
179 1 TL0 = 17;
180 1
181 1 //产生秒信号
182 1 if(++msec >= 449)
183 1 {
184 2 msec=0;
185 2 if (++fsec >= 2)
186 2 {
187 3 fsec=0;
188 3 if (++sec >= 60)
189 3 {
190 4 sec=0;
191 4 if(++min >= 60)
192 4 {
193 5 min=0;
194 5 if(++hour >= 24)
195 5 {
196 6 hour=0;
197 6 }
198 5 }
199 4 }
200 3 }
201 2 }
202 1 }
203 /*void delay10ms(uint count)
204 {
205 uint i,j;
206 for(i=0;i<count;i++)
207 {
208 for(j=0;j<10000;j++);
209 }
210 }*/
211
212
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 453 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 49 3
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -