📄 control.lst
字号:
C51 COMPILER V8.05a CONTROL 10/28/2008 10:30:04 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE CONTROL
OBJECT MODULE PLACED IN control.OBJ
COMPILER INVOKED BY: F:\Keil C51 V8\C51\BIN\C51.EXE control.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #include "commons.h"
3
4 sbit _p32 = P3^2;
5 sbit _p30 = P3^0;
6 sbit _p25 = P2^5;
7 sbit _p26 = P2^6;
8 sbit _p27 = P2^7;
9
10 unsigned char _pcount = 0; //定时中断总次数,每100次为一个输出总周期
11 unsigned char _pout = 0; //占空比对应的定时中断次数(低电平有效的周期数)
12 float _sigma_i = 0.0; //PWM占空比
13
14 unsigned int ad();
15 void da(unsigned int value); //串口DA转变
16 unsigned int filter(unsigned int value, unsigned char flt_idx); //数字滤波函数
17 void ctrl_init(void) { //定时器中断初始化
18 1 TMOD = 0x02; //定时器0方式2
19 1 TH0 = 0;
20 1 TL0 = 0;
21 1 ET0 = 1;
22 1 TR0 = 1;
23 1 EA = 1;
24 1 }
25
26 void _ctrl_proc(void) interrupt 1 { //比例控制
27 1 if (++_pcount == 100) {
28 2 _pcount = 0;
29 2 _pout = (unsigned char)(100.0 * (1.0 - _sigma_i)); //每个总周期结束时确定下次的输出周期
30 2 }
31 1 if (_pcount < _pout) { //判断定时中断次数是否达到占空比对应的中断次数
32 2 _p25 = 1;
33 2 } else {
34 2 _p25 = 0;
35 2 }
36 1 }
37
38 void ctrl_routine(void) {
39 1 char led_buf[6];
40 1 unsigned int value;
41 1 unsigned char d;
42 1
43 1 value = filter(ad(), _menu_value[3]);//数字滤波
44 1 da(value); //D/A转换
45 1
46 1 //超限报警
47 1 if (value > _menu_value[0]) {
48 2 _p26 = 0;
49 2 _p27 = 1;
50 2 } else if (value <= _menu_value[0] && value >= _menu_value[1]) {
51 2 _p26 = 1;
52 2 _p27 = 1;
53 2 } else {
54 2 _p26 = 1;
55 2 _p27 = 0;
C51 COMPILER V8.05a CONTROL 10/28/2008 10:30:04 PAGE 2
56 2 }
57 1
58 1 //根据比例度确定输出占空比_sigma_i
59 1 if (value > _menu_value[2]) { //大于控制目标时,占空比定为0
60 2 _sigma_i = 0;
61 2 } else {
62 2 d = (int)(100.0 * (float)value / (float)_menu_value[2]); //计算是否进入临届比例度
63 2 if (d < _menu_value[4]) { //若没有进入,占空比定为100%
64 3 _sigma_i = 1.0;
65 3 } else { //否则,计算占空比
66 3 _sigma_i = (float)(100 - d) / (float)(100 - _menu_value[4]);
67 3 }
68 2 }
69 1
70 1 if (_menu_status == MENU_OFF) {
71 2 led_buf[0] = '^';
72 2 to_string(&led_buf[1], 5, value);
73 2 print(led_buf);
74 2 }
75 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 393 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 8
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 + -