📄 main.lst
字号:
C51 COMPILER V7.50 MAIN 03/06/2007 20:40:55 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //korfi make this file
2 //Updata:
3 //korfi,13/09/2006:修改第一次验收时的缺点
4 //korfi,14/09/2006:添加模糊自整定pid算法
5 //korfi,15/09/2006:修正了校准办法
6 //korfi,20/09/2006:第一次实物调试后的修改,比较大的改动
7
8
9 #include "TempCtrl.h"
10
11 sfr T2MOD = 0xC9;
12
13 #define __EEPROM_DEBUG__ 0//调试用1,每次复位重新装载初始值到EEPROM
14 //产品用0, 除了第一次装载初始值外不在覆盖设定值
15 /////////////////////////////////////////
16 void main()
17 {
18 1
19 1
20 1 /////////////////////////////////////////////
21 1 //EEPROM操作
22 1
23 1 DataTemp=Read(EP_FT);
24 1 if((DataTemp!=0xaa)||__EEPROM_DEBUG__)
25 1 {//将初始化数据拷贝到EEPROM中
26 2
27 2 PassWordLock=0;
28 2
29 2 Write( EP_FT, 0xaa);//EEPROM 标记
30 2 Write( EP_Sr, 2000);//初始密码
31 2 Write( EP_Sv, Setted_Temperature);//设定值
32 2 Write( EP_SH, UpperLimit);
33 2 Write( EP_SL, LowerLimit);
34 2 Write( EP_oH, 42);//全开时间:s
35 2 Write( EP_oL, (unsigned int)MinOutputLimit);//最小输出时间:分辨率0.01s
36 2 Write( EP_P, 000);//P-->Kp*10,分辨率0.01
37 2 Write( EP_I, 500);//I-->Ti*10,分辨率0.01
38 2 Write( EP_d, 400);//d-->Td*10,分辨率0.01
39 2 Write( EP_db, (unsigned int)DeathZone);//闸位死区
40 2 Write( EP_Fd, 100);//分度号
41 2
42 2 Write(EP_FrMin,0);
43 2 Write(EP_FrMax,0);
44 2 Write(EP_FF1,LineA);
45 2 Write(EP_FF2,LineB);
46 2 Write(EP_FF3,LineC);
47 2 Write(EP_FF4,LineD);
48 2
49 2 PassWordLock=1;
50 2
51 2 }
52 1 else
53 1 {
54 2 //EEPROM 标记
55 2 //初始密码
C51 COMPILER V7.50 MAIN 03/06/2007 20:40:55 PAGE 2
56 2
57 2 Setted_Temperature=Read(EP_Sv);//设定值
58 2
59 2 UpperLimit=Read(EP_SH);//上限
60 2 LowerLimit=Read(EP_SL);
61 2 MinOutputLimit=Read(EP_oL);//
62 2
63 2 DeathZone=Read(EP_db);
64 2 LineA=Read(EP_FF1);
65 2 LineB=Read(EP_FF2);
66 2 LineC=Read(EP_FF3);
67 2 LineD=Read(EP_FF4);
68 2 }
69 1
70 1 UpdatePid();
71 1 UpdateFrZero();
72 1 /////////////////////////////////////////////
73 1 TMOD=0x15;//T0 16bit 计数器,
74 1 TH0=0x00; TL0=0x00;//
75 1 //T2 16bit 定时器
76 1 TH1=0xf6; TL1=0x3c;//T=(65536-X)*12/fosc,X=65536-T*fosc/12,T=2.5ms
77 1 ET1=1;TR1=1;
78 1 // T2MOD=0x00; //2.5ms 0.01s 0.1s max=0.131s
79 1 RCAP2H=0xec;//0xfb 0xec 0x3c
80 1 RCAP2L=0x78;//0x1e 0x78 0xb0
81 1 TR2=1;
82 1 ET2=1;
83 1
84 1 ET0=1;
85 1 TR0=1;
86 1
87 1 P1=Channel[0];//0x1f;//ch0
88 1
89 1 KeySta=0x00;
90 1 P_KEY=1;
91 1 EA=1;
92 1 AdmitFlag=1;
93 1 DataTemp=Read(EP_Sv);
94 1 InputTemp=DataTemp;
95 1
96 1 while(1)
97 1 {
98 2 Monitor();//监视按键,完成相应动作,因电路特定,显示亦在其中
99 2
100 2 if(SampleFlag)
101 2 {
102 3 ///TODO
103 3 IdTimeCnt+=1;
104 3 if(IdTimeCnt>=5)
105 3 IdTimeCnt=0;
106 3 SamplingProcess();
107 3
108 3 //显示切换
109 3 if(DlySecond>0)//&&(AdmitFlag==0))
110 3 DlySecond-=1;
111 3 else
112 3 PassWordLock=1;
113 3 if((DlySecond==1)&&(MeterSta!=STA_MAN))
114 3 {//更新一次显示
115 4 LedH(Temperature);
116 4 DPA();
117 4
C51 COMPILER V7.50 MAIN 03/06/2007 20:40:55 PAGE 3
118 4 DataTemp=Read(EP_Sv);
119 4 InputTemp=DataTemp;
120 4 InputLimit=5001; //400.0 degree is upper limit
121 4 LedL(DataTemp);
122 4 DPB();
123 4 MeterSta=STA_AUTO;
124 4 AdmitFlag=1;//允许上排数据更新
125 4 }
126 3
127 3 if(CloseOpenTimeCnt>0)
128 3 {
129 4 Output=100;
130 4 CloseOpenTimeCnt-=1;
131 4 }
132 3 else if(CloseOpenTimeCnt<0)
133 3 {
134 4 Output=-100;
135 4 CloseOpenTimeCnt+=1;
136 4 }
137 3 ///END TODO
138 3 SampleFlag=0;
139 3 }
140 2 else
141 2 for(i=0;i<50;i++);//改变此数值以改变亮度
142 2 }
143 1
144 1 }
145
146 //////////////////////////////////////////////////////////////////////////
147 void timer0()interrupt 1 using 2 //溢出记录
148 {//测频
149 1 TF0=0;
150 1 OverCnt+=1;
151 1 TH0=00;
152 1 TL0=0x00;
153 1 LedBuf[0]=LedCode[C_o];
154 1 LedBuf[1]=LedCode[C_o];
155 1 LedBuf[2]=LedCode[C_o];
156 1 LedBuf[3]=LedCode[C_o];
157 1 }
158
159 void timer2()interrupt 5 using 3//定时0.01s 可以加长
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -