📄 main.lst
字号:
C51 COMPILER V8.01 MAIN 02/25/2009 22:23:30 PAGE 1
C51 COMPILER V8.01, 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 <stdio.h>
3 #include "iic.h"
4 #include "ds18b20.h"
5
6 sbit logo=P1^0; //单片机读取标志位
7 sbit onoff=P1^6; //继电器控制开关位
8 sbit test_flag=P1^1; //数据读取正确标志
9 sbit teat_flag=P1^2; //温度写入正确标志
10 sbit scr_coil_on =P2^3;
11 sbit scr_coil_off=P2^2;
12 sbit scr_res_on =P2^5;
13 sbit scr_res_off=P2^4;
14 sbit big_r=P2^6; //大电阻继电器控制
15 sbit min_r=P2^7; //小电阻继电器控制
16
17 int k=0,ff=0,tt=0;
18 int tmax,fmax;
19 int max[6]={900,400,233,150,100,67};
20 //频率设定标准表
21 unsigned char wd=0; //温度值
22
23
24 //-----------------------
25 //********延时nms********
26 void delay(unsigned int n)
27 {
28 1 unsigned char i;
29 1 while(n--)
30 1 {
31 2 for( i=1000;i>0;i-- );
32 2 }
33 1 }
34 //-----------------------
35
36 //-----------------------
37 //********初始化*********
38 void initial(void)
39 {
40 1 onoff=0;
41 1 big_r=0;
42 1 min_r=1;
43 1 test_flag=0;
44 1 teat_flag=0;
45 1 scr_res_on=1;
46 1 scr_res_off=0;
47 1 scr_coil_on=1;
48 1 scr_coil_off=0;
49 1 IT0=1;
50 1 EA=1;
51 1 EX0=1; //中断源INT0开启
52 1 }
53 //-----------------------
54 //********初始化t0*********
55 void initial_temptimer0(unsigned char time)
C51 COMPILER V8.01 MAIN 02/25/2009 22:23:30 PAGE 2
56 {
57 1 int t;
58 1
59 1 TR0=0;
60 1 TMOD=0x11;
61 1 //定治疗时间
62 1 t=(int)time; //t/min
63 1 tmax=t*1000; //t*1min
64 1
65 1 TH0=0x15; //60ms
66 1 TL0=0x9F;
67 1 ET0=1;
68 1 TR0=1; //定时器T0开启
69 1 }
70 //-----------------------
71 //-----------------------
72 //********初始化t1*********
73 void initial_timer1(unsigned char fre)
74 {
75 1 int f;
76 1
77 1 TR1=0;
78 1 TMOD=0x11;
79 1 //定治疗频率
80 1 f=(int)fre; //f/hz
81 1 fmax=max[f-1]; //f*1hz
82 1
83 1 TH1=0xFC; //1ms
84 1 TL1=0x17;
85 1 ET1=1;
86 1 TR1=1; //定时器T1开启
87 1 }
88 //-----------------------
89
90 //-----------------------
91 //********开始缓冲********
92 void charge(void)
93 {
94 1 big_r=1; //控制大电阻继电器闭合
95 1 delay(2000); //电源通过大电阻充电
96 1 min_r=0; //控制小电阻继电器闭合
97 1 delay(50); //大电阻,小电阻电路一起充电线圈关闭状态
98 1 scr_coil_on=1;
99 1 scr_coil_off=0;
100 1 }
101 //-----------------------
102 //********开始工作********
103 void work(void)
104 {
105 1 scr_coil_on=0; //控制输出交变电压
106 1 scr_coil_off=1;
107 1 // delay(100); //1hz
108 1 delay(20);
109 1 scr_coil_on=1;
110 1 scr_coil_off=0;
111 1 delay(80);
112 1 }
113 //-----------------------
114 //********停止工作********
115 discharge(void)
116 {
117 1 scr_coil_on=1;
C51 COMPILER V8.01 MAIN 02/25/2009 22:23:30 PAGE 3
118 1 scr_coil_off=0;
119 1 min_r=1; //控制小电阻继电器开
120 1 delay(600);
121 1 big_r=0; //控制大电阻继电器开
122 1 scr_res_on=0;
123 1 scr_res_off=1;
124 1 delay(2000);
125 1 scr_res_on=1;
126 1 scr_res_off=0;
127 1 //stoptimerT0&&T1
128 1 TR0=0;
129 1 TR1=0;
130 1 ET1=0;
131 1
132 1 }
133 //-----------------------
134
135 //-----------------------
136 //********主程序*********
137 void main()
138 {
139 1 delay(200);
140 1 initial();
141 1 while(1);
142 1
143 1 }
144 //-----------------------
145
146 //-----------------------
147 //********中断程序********
148 void int0_int(void) interrupt 0
149 {
150 1 unsigned char start,stop,fre,time;
151 1
152 1 EX0=0;
153 1 onoff=1; //控制继电器位常闭状态
154 1 logo=1; //单片机读取busy
155 1 delay(5); //读开始信号
156 1 start=IRcvStr(0xa0,0x00,0xa1);
157 1 delay(5); //读停止信号
158 1 stop=IRcvStr(0xa0,0x00,0xa2);
159 1 delay(5); //读频率设定
160 1 fre=IRcvStr(0xa0,0x00,0xa3);
161 1 delay(5); //读时间设定
162 1 time=IRcvStr(0xa0,0x00,0xa4);
163 1 delay(5);
164 1 logo=0; //单片机读取free
165 1 onoff=0; //控制继电器位常开状态
166 1
167 1 if(start==0x55)
168 1 {
169 2 if((fre==0)||(time==0))
170 2 test_flag=1;
171 2 else
172 2 {
173 3 test_flag=0;
174 3 charge(); //开始充放电
175 3 initial_temptimer0(time);
176 3 initial_timer1(fre);
177 3 }
178 2 }
179 1 if(stop==0x04)
C51 COMPILER V8.01 MAIN 02/25/2009 22:23:30 PAGE 4
180 1 {
181 2 TR0=0;
182 2 TR1=0;
183 2 discharge();
184 2 }
185 1 EX0=1;
186 1 }
187 //-----------------------
188 //-----------------------
189 //********Timer0中断程序********
190 void timer0_int(void) interrupt 1
191 {
192 1 bit b0=0;
193 1
194 1 TR0=0;
195 1 TH0=0x15;
196 1 TL0=0x9F;
197 1 k++;tt++;
198 1 TR0=1;
199 1
200 1 if(tt==tmax) //治疗时间到
201 1 {
202 2 discharge();
203 2 tt=0;
204 2 }
205 1 else
206 1 {
207 2 if(k==500) //30s时间到
208 2 {
209 3 //EA=0;
210 3 wd=ds18b20();
211 3 //wd=30;
212 3 onoff=1;
213 3 logo=1;
214 3 delay(5); //读写温度
215 3 b0=ISendStr(0xa0,0x00,0xa5,wd);
216 3 delay(5);
217 3 logo=0;
218 3 onoff=0;
219 3 //EA=1;
220 3
221 3 if(b0==1)
222 3 {
223 4 teat_flag=1;
224 4 }
225 3 else
226 3 teat_flag=0;
227 3
228 3 k=0;
229 3 }
230 2 }
231 1 }
232 //-----------------------
233 //-----------------------
234 //********Timer1中断程序********
235 void timer1_int(void) interrupt 3
236 {
237 1 TR1=0;
238 1 TH1=0xFC;
239 1 TL1=0x17;
240 1 ff++;
241 1
C51 COMPILER V8.01 MAIN 02/25/2009 22:23:30 PAGE 5
242 1 if(ff==fmax) //工作频率到
243 1 {
244 2 work();
245 2 ff=0;
246 2 }
247 1
248 1 TR1=1;
249 1 }
250 //-----------------------
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1117 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 25 6
IDATA SIZE = ---- ----
BIT SIZE = 1 4
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -