📄 zhudanyuan.lst
字号:
C51 COMPILER V7.02b ZHUDANYUAN 08/29/2008 14:57:54 PAGE 1
C51 COMPILER V7.02b, COMPILATION OF MODULE ZHUDANYUAN
OBJECT MODULE PLACED IN zhudanyuan.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe zhudanyuan.c DB OE
stmt level source
1 #include <c8051f020.h>
2 #include <stdio.h>
3 #include <math.h>
4 #include <absacc.h>
5 #include <intrins.h>
6
7
8 //C8051F020的16位SFR定义
9 /*sfr16 DP = 0x82; // 数据指针
10 sfr16 TMR3RL = 0x92; // 定时器T3重装值
11 sfr16 TMR3 = 0x94; // 定时器T3计数器
12 sfr16 ADC0 = 0xbe; // ADC0数据
13 sfr16 ADC0GT = 0xc4; // ADC0大于窗口
14 sfr16 ADC0LT = 0xc6; // ADC0小于窗口
15 sfr16 RCAP2 = 0xca; // 定时器T2捕捉/重装
16 sfr16 T2 = 0xcc; // 定时器T2
17 sfr16 RCAP4 = 0xe4; // 定时器T4捕捉/重装
18 sfr16 T4 = 0xf4; // 定时器T4
19 sfr16 DAC0 = 0xd2; // DAC0数据
20 sfr16 DAC1 = 0xd5; // DAC1数据*/
21
22 #define DELAY _nop_();_nop_();_nop_();_nop_();
23 #define uint unsigned int
24 #define uchar unsigned char
25 #define ulong unsigned long
26 #define BAUDRATE 5600 // UART波特率(bps)
27 #define SYSCLK 24000000 // 系统时钟频率(Hz)
28 #define SAMPLE_RATE 50000 // 采样频率(Hz)
29 #define N0 5
30 #define N1 5
31
32
33
34
35 //********************************* ***** 系统参数设定 **************************************/
36 #define CUR_SHG 0.00036 //SHG温控恒流源360uA
37 #define CUR_THG 0.001000 //THG温控恒流源1000uA
38 #define SHGSetL 5000 //50摄氏度
39 #define SHGSetH 7500 //75摄氏度
40 #define THGSetL 13000 //130摄氏度
41 #define THGSetH 16000 //160摄氏度
42 #define DAC_dat 0x012000
43 #define DAC_cha1 0x000000
44 #define DAC_cha2 0x002000
45
46 uint SHGSet; //SHG晶体设定温度*100
47 uint SHGAct; //SHG晶体实际温度*100
48 uint THGSet; //THG晶体设定温度*100
49 uint THGAct; //THG晶体实际温度*100
50
51 uint xdata filter0_buf[N0];
52 uint xdata filter1_buf[N1];
53 uchar xdata array0,array1;
54
55 void delay(uint i);
C51 COMPILER V7.02b ZHUDANYUAN 08/29/2008 14:57:54 PAGE 2
56 void long_delay(void);
57 void short_delay(void);
58 void PCA_Init (void);
59 void PCA_ISR (void);
60 void StoreData(void);
61 void Receiveing(uchar in_byte);
62 void ReceiveingPC(uchar in_byte);
63 void Send_data( uchar out_byte);
64 void Send_dataPC(uchar out_byte);
65 void Spi_Write( uint DACcode);
66 void GetSHG(uchar channel,float current);
67 void GetTHG(uchar channel,float current);
68 uint GetADCData(uchar channel);
69 uint filter(uchar channel); //递推平均滤波法
70 uint Set_SHG(uint tem);
71 uint Set_THG(uint a);
72
73 sbit LIGHTH = P2^6;
74 sbit LIGHTL = P2^7;
75 //MAX125功能口定义
76 sbit MAX_CS = P2^0;
77 sbit MAX_CON = P2^1;
78 sbit MAX_RD = P2^2;
79 sbit MAX_WR = P2^3;
80 sbit MAX_INT = P2^4;
81 sbit MAX_CLK = P2^5;
82
83
84 //DAC8164功能口定义
85 sbit DAC_LDAC = P3^0;
86 sbit DAC_ENAB = P3^1;
87 sbit DAC_A0 = P3^2;
88 sbit DAC_SYNC = P3^3;
89 sbit DAC_SCLK = P3^4;
90 sbit DAC_DIN = P3^5;
91
92
93 void send_byte( uchar out_byte);
94 void SYSCLK_Init (void);
95 void PORT_Init (void);
96 void UART0_Init (void);
97 void UART1_Init (void);
98 void PCA_Init (void);
99 void DAC8164_Init (void);
100 void MAX125_Init (void);
101 void Timer3_Init (int counts);
102 void DAC8164_ISRA (void);
103 void DAC8164_ISRB (void);
104 void Pwm(void);
105
106 //主程序
107 void main (void)
108 {
109 1 unsigned int ch1mv,ch2mv;
*** ERROR C100 IN LINE 109 OF ZHUDANYUAN.C: unprintable character 0xA3 skipped
*** ERROR C100 IN LINE 109 OF ZHUDANYUAN.C: unprintable character 0xAC skipped
110 1 unsigned long a;
111 1 WDTCN = 0xde;
112 1 WDTCN = 0xad; // 禁止看门狗
113 1
114 1 SYSCLK_Init (); // 初始化振荡器
115 1 PORT_Init (); // 初始化数据交叉开关和通用I/O口
C51 COMPILER V7.02b ZHUDANYUAN 08/29/2008 14:57:54 PAGE 3
116 1 UART0_Init (); // 初始化UART0
117 1 UART1_Init (); // 初始化UART1
118 1 Timer3_Init (SYSCLK/SAMPLE_RATE); // 初始化Timer3
119 1 DAC8164_Init (); // 初始化DAC8164
120 1 MAX125_Init (); // 初始化MAX125
121 1 PCA_Init (); // PCA初始化成8位脉宽调置
122 1
123 1 for(a=0;a<0xffff;a++)
124 1 {
125 2 LIGHTH = 1;
126 2 LIGHTL = 0;
127 2 delay(999999);
128 2 LIGHTH = 0;
129 2 LIGHTL = 1;
130 2 }
131 1 Set_SHG(SHGSet); //SHG温度设定
132 1 delay(1000);
133 1 Set_THG(THGSet); //THG温度设定
134 1 delay(1000);
135 1 DAC8164_ISRA (ch1mv); //A/D转换通道A
*** ERROR C202 IN LINE 135 OF ZHUDANYUAN.C: 'ch1mv': undefined identifier
136 1 delay(1000);
137 1 DAC8164_ISRB (ch2mv); //A/D转换通道B
*** ERROR C202 IN LINE 137 OF ZHUDANYUAN.C: 'ch2mv': undefined identifier
138 1 delay(1000);
139 1 GetADCData(); //D/A数据采集
140 1 }
141
142
143 //系统时钟初始化
144 void SYSCLK_Init (void)
145 {
146 1 int i; //延时计数器
147 1 OSCXCN = 0x67; //启动外部振荡器
148 1 for (i=0;i<256;i++) ; //等待振荡器启动
149 1 while (!(OSCXCN & 0x80)); //等待晶体振荡器稳定
150 1 OSCICN = 0x88; //选择外部振荡器为系统时钟源并使能丢失时钟检测器
151 1 }
152
153 //I/O口初始化,配置数据交叉开关和通用I/O口
154 void PORT_Init (void)
155 {
156 1 XBR0 = 0x03; // 使能CEX0,CEX1,CEX2,UART0和SPI0
157 1 XBR1 = 0x80; // 使能T1
158 1 XBR2 = 0x44; // 使能数据交叉开关和UART1
159 1 P1MDIN = 0xff;
160 1 P1MDOUT= 0xfc; // P1.0,P1.1设为漏开方式,P1.2-P1.7设为推挽方式
161 1 P2MDOUT= 0xff; // P2口设为推挽方式
162 1 P3MDOUT= 0xff; // P3口设为推挽方式
163 1 P74OUT = 0xf0; // P4,P5口设为漏开方式
164 1 P4 = 0Xff;
165 1 }
166
167 //配置PCA的CEX0,CEX1,CEX2输出8位PWM信号
168 void PCA_Init (void)
169 {
170 1 PCA0CN = 0x40; //允许PCA0
171 1 PCA0CPM0 = 0x42; //使能PCA0的PWM输出
172 1 PCA0MD = 0x02; //系统时钟的4分频
173 1 PCA0CPL0 = 0x00;
174 1 PCA0CPH0 = 0x7e; //占空比50%
175 1 }
C51 COMPILER V7.02b ZHUDANYUAN 08/29/2008 14:57:54 PAGE 4
176
177
178 //UART0配置
179 void UART0_Init (void)
180 {
181 1 SCON0 = 0x50; // UART0工作模式1, 8-bit UART, 使能RX
182 1 T2CON = 0x30; // 定时器 2, UART0波特率发生器
183 1 TR2 = 1; // 启动Timer2
184 1 CKCON |= 0x20; // Timer2使用系统时钟
185 1 PCON |= 0x90; // 禁止UART0及UART1的波特率/2
186 1 TI0 = 1; // 表示 TX0 就绪
187 1 }
188
189 //UART1配置
190 void UART1_Init (void)
191 {
192 1 SCON1 = 0x50; // UART1工作模式1, 8-bit UART, 使能RX
193 1 TMOD = 0x20; //定时器 1, 模式 2, 8-bit 重装载
194 1 TH1 = -(SYSCLK/BAUDRATE/16); //设定定时器1为重装载模式
195 1 TR1 = 1; // 启动Timer1
196 1 CKCON |= 0x10; // Timer1使用系统时钟
197 1 }
198
199
200
201 //MAX125初始化
202 void MAX125_Init (void)
203 {
204 1 MAX_CS =01;
205 1 MAX_CON =01;
206 1 MAX_RD = 1;
207 1 MAX_WR = 1;
208 1 delay(100);
209 1 MAX_CS = 0;
210 1 MAX_WR = 0;
211 1 P4 = 0X01;
212 1 MAX_CS = 1;
213 1 MAX_WR = 1;
214 1
215 1 }
216
217
218 //DAC8164初始化
219 void DAC8164_Init (void)
220 {
221 1 unsigned int dat;
222 1 DAC_LDAC = 0;
223 1 DAC_ENAB = 1;
224 1 DAC_A0 = 0;
225 1 DAC_SYNC = 1;
226 1 dat = DAC_dat;
227 1 Spi_Write(dat);
228 1 }
229
230
231
232
233
234 //----------SHG与THG的温度设定-------------//
235 unsigned int Set_SHG(uint tem) //SHG 50 -70 度
236 {
237 1 unsigned int dat;
C51 COMPILER V7.02b ZHUDANYUAN 08/29/2008 14:57:54 PAGE 5
238 1 float a,b;
239 1 float t;
240 1 float v;
241 1 float r;
242 1 tem = 6000;
243 1 t = tem/100.0;
244 1 a = 1/(273.15+t)-1/298.15;
245 1 b = exp(3.940009*a*1000)*10;
246 1 r = 1.01*b-0.03187;
247 1 v = r * CUR_SHG*1000;
248 1 dat = (uint)(16384/5*v);
249 1 if(dat>16383)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -