📄 measure.lst
字号:
C51 COMPILER V7.06 MEASURE 01/17/2008 16:19:15 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MEASURE
OBJECT MODULE PLACED IN measure.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE measure.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //-----------------------------------------------------------------------------
2 //
3 //文件名: measure.c
4 //
5 //编写人:ywq
6 //
7 //编写时间:2008/01/14
8 //
9 //目标器件: C8051F310
10 //
11 //编译工具: keil c
12 //
13 //程序说明: 用于测量当前的状态。
14 //
15 //包括电池的电压、温度测量、外部电网的电压检测
16 //
17 //
18 //-----------------------------------------------------------------------------
19 // Includes
20 //
21 //------------------------------------------------------------------------------------
22 #include "measure.h"
23 #include "delay.h"
24
25 unsigned int time;
26 unsigned int sourceresulth;
27 unsigned int sourceresultl;
28
29
30 void battery()
31 {
32 1 // unsigned int grade;
33 1 AMX0P=0x04; /*设置AD正输入端口*/
34 1 AMX0N=0x1f; /*设置AD负输入端口*/
35 1 ADC0CN |=0xc0; /*ADC0使能,向AD0BUSY写1开始转换*/
36 1 //REF0CN |=0x04; /*内部电压基准提供从VREF脚输出,ADC0电压基准取自VREF0*/
37 1 ADC0CF |=0x50; /*转换周期和增益为1*/
38 1 //AMX0CF |=0x00; /*单端输入*/
39 1 //EIE2 |=0x02;
40 1 AD0BUSY=1; //启动AD转换
41 1 //delay(1000);
42 1 while(!AD0INT)
43 1 {
44 2 delay(100);
45 2 }
46 1 AD0INT=0;
47 1 adresultl=ADC0L; //读出转换结果
48 1 adresulth=ADC0H&03;
49 1 if(adresulth<0x01)
50 1 {
51 2 // grade=1;
52 2 vbattery=1; //电池电量处于过放状态
53 2 }
54 1 else if((adresulth>0x01)&&(adresulth<0x02))
55 1 {
C51 COMPILER V7.06 MEASURE 01/17/2008 16:19:15 PAGE 2
56 2 // grade=2;
57 2 vbattery=2; //电池低电量
58 2 }
59 1 else if((adresulth>0x02)&&(adresulth<0x03))
60 1 {
61 2 // grade=3;
62 2 vbattery=3; //电池高电量
63 2 }
64 1 else
65 1 {
66 2 // grade=4;
67 2 vbattery=4; //电池过充
68 2 }
69 1 }
70 void charge()
71 {
72 1 switch (vbattery)
73 1 {
74 2 case 1: //快速充电
75 2 //PCA_Init();
76 2 PCA0CPL0=0x80;
77 2 PCA0CPH0=0x80;
78 2 PCA0CPM0=0xcb;
79 2 break;
80 2
81 2 case 2: //一般充电
82 2 //PCA_Init();
83 2 PCA0CPL0=0x00;
84 2 PCA0CPH0=0x80;
85 2 PCA0CPM0=0xcb;
86 2 break;
87 2
88 2 case 3: //一般充电
89 2 //PCA_Init();
90 2 PCA0CPL0=0x80;
91 2 PCA0CPH0=0x00;
92 2 PCA0CPM0=0xcb;
93 2 break;
94 2
95 2 case 4: //不充电
96 2 //PCA_Init();
97 2 //PCA0CPL1=0x00;
98 2 //PCA0CPH1=0x80;
99 2 //PCA0CPM1=0xcb;
100 2 //redlighton(); //显示过充状态
101 2 P2_0=0; //关断充电口
102 2 PCA0CPM0=0x00;
103 2 break;
104 2
105 2 default:
106 2 break;
107 2 }
108 1 }
109
110 void sourcemeasure()
111 {
112 1 unsigned int highvoltage;
113 1 unsigned int lowvoltage;
114 1 //unsigned int grade;
115 1 AMX0P=0xe7; /*设置AD正输入端口*/
116 1 AMX0N=0x1f; /*设置AD负输入端口*/
117 1 ADC0CN |=0xc0; /*ADC0使能,向AD0BUSY写1开始转换*/
C51 COMPILER V7.06 MEASURE 01/17/2008 16:19:15 PAGE 3
118 1 //REF0CN |=0x04; /*内部电压基准提供从VREF脚输出,ADC0电压基准取自VREF0*/
119 1 ADC0CF |=0x50; /*转换周期和增益为1*/
120 1 //ADC0GTH =0x00;
121 1 //ADC0GTL =0xff;
122 1 //ADC0LTH =0x00;
123 1 //ADC0LTL =0x80;
124 1 //AMX0CF |=0x00; /*单端输入*/
125 1 //EIE1 |=0x04;
126 1 AD0BUSY=1;
127 1 while(!AD0INT)
128 1 {
129 2 delay(100);
130 2 }
131 1 AD0INT=0;
132 1 sourceresulth=ADC0L;
133 1 sourceresultl=ADC0H&03;
134 1 highvoltage=0x10;
135 1 lowvoltage=0x00;
136 1 if(highvoltage<sourceresulth)
137 1 {
138 2 vsource=1;
139 2 }
140 1 else if(highvoltage>sourceresulth)
141 1 {
142 2 vsource=0;
143 2 }
144 1 else
145 1 {
146 2 if(lowvoltage<sourceresultl)
147 2 {
148 3 vsource=1;
149 3 }
150 2 else
151 2 {
152 3 vsource=0;
153 3 }
154 2 }
155 1 }
156
157
158
159 void testtemperature(void) //温度检测
160 {
161 1 TH0=0x00;
162 1 TL0=0x00;
163 1 CPT1MX=0xEC;
164 1 CPT1MD=0x20;
165 1 CPT1CN |=0x80;
166 1 P1_1=1;
167 1 TR0=1;
168 1
169 1 }
170
171 void temp() interrupt 13 //比较中断
172 {
173 1 TR0=0;
174 1 CPT1CN |=0x80;
175 1 time=TH1*100+TH0;
176 1
177 1 }
178
179 void calculator() //温度计算
C51 COMPILER V7.06 MEASURE 01/17/2008 16:19:15 PAGE 4
180 {
181 1 unsigned int R;
182 1 time=time/12;
183 1 R=time*1000000/470;
184 1 ///////////////////////////////////////
185 1 //添加阻值与温度的关系代码
186 1 //
187 1 //
188 1 //
189 1 ////////////////////////////////////////
190 1
191 1
192 1 }
193
194 void pca() interrupt 11
195 {
196 1 CF=0;
197 1 CCF0=0;
198 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 391 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 2
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 + -