📄 rxr_cs.lst
字号:
C51 COMPILER V7.06 RXR_CS 06/26/2006 22:51:01 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE RXR_CS
OBJECT MODULE PLACED IN rxr_cs.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE rxr_cs.c ROM(COMPACT) OPTIMIZE(9,SPEED) REGFILE(.\rxr_cs.ORC) BROWSE DEBUG
-OBJECTEXTEND
stmt level source
1 #include "STC89C51RC_RD_PLUS.h"
2 #include "math.h"
3 #include "intrins.h"
4
5
6 #define uchar unsigned char
7 #define uint unsigned int
8 #define ulong unsigned long
9
10 extern volatile uchar IN_IO,OUT_IO; //定义IO输入输出映射
11 extern void input_io(void); //输入处理函数
12 extern void jd_on(uchar x); //接通继电器函数
13 extern void jd_off(uchar x); //断开继电器函数
14 extern uint CRC16(uchar *pushMsg,unsigned short usDataLen);//modbus crc 函数
15 extern uchar *pushMsg; /*要进行CRC校验的消息*/
16
17 uchar idata recebuf[16]=0; //接收数据缓冲区
18 uchar idata recebuf_com[16]=0; //接收命令数据缓冲区
19 uchar idata command_Len=0; //待处理命令消息字节长度
20 uchar idata command_ok=0; //接收到一个命令结束,等待处理时为1;否则为0.
21 uchar idata sendbuf[16]=0; //发送数据缓冲区
22 uchar idata send_Len=1; //发送数据长度
23 uchar idata rece_Len=0; //接收数据长度
24
25 uint idata ad1,ad2,ad3,ad4; //模拟量输入寄存器
26 uint idata ad_1[5],ad_2[5],ad_3[5],ad_4[5]; //模拟量滤波器
27 uchar idata addr; //本机地址
28 uint idata crc_z; //crc校验结果
29 uchar idata timer0_cn=0;
30 uchar code check=1; //奇偶校验。check=0时,偶校验;check=1时;奇校验
31 uchar idata js_check=0; //奇偶校验检查位。js_check=1时正确,js_check=2时错误!
32
33 uint TLC2543(uchar prot);//AD转换函数
34 void group_out_ad(void); //数据上传函数
35 void group_out_io(void); //数据上传函数
36 void delay(uchar x); //短延时函数
37 void AV_in(void); //模拟量输入函数
38 void Serial(void); //串口配置函数
39 void chenck_fun(uchar x);//
40 void command(void); //接收到的消息命令处理函数
41 void command_01(void);
42 void command_02(void);
43 void command_03(void);
44 void command_04(void);
45 void command_05(void);
46 void command_06(void);
47
48 void jc(void);
49
50 /*以下定义LED指示状态*/
51 sbit XJ=P3^7;
52 sbit RUN=P3^6;
53
54 /*以下定义为TLC2543 SPI口软件模拟及转换表数组*/
C51 COMPILER V7.06 RXR_CS 06/26/2006 22:51:01 PAGE 2
55 sbit cs=P3^5;
56 sbit clk=P3^2;
57 sbit din=P3^3;
58 sbit dout=P3^4;
59 uint code r[8]={128,64,32,16,8,4,2,1};
60
61 /*====延时函数=====*/
62 void delay(uchar x)
63 {
64 1 uchar i;
65 1 while(x--){for(i=0;i<25;i++);}
66 1 }
67
68
69 /*======================*/
70 /*======AD转换函数======*/
71 /* prot:通道号 */
72 /* return:函数返回值 */
73 /*======================*/
74 uint TLC2543(uchar prot)
75 {
76 1 uchar i;
77 1 uchar ad_reg; //通道号寄存器
78 1 uint rdsh=0,rdsl=0;
79 1 cs=0; //使能AD转换
80 1 ad_reg=prot; //取通道号
81 1 ad_reg=ad_reg<<4;
82 1 /*先写入通道号*/
83 1 for(i=0;i<8;i++)
84 1 {
85 2 din=(bit)(ad_reg&0x80);
86 2 clk=1;clk=0;
87 2 ad_reg=ad_reg<<1;
88 2 }
89 1 for(i=0;i<4;i++){din=0;clk=1;clk=0;} //补4个时钟
90 1 cs=1;delay(1);cs=0; //等待转换
91 1 ad_reg=prot; //取通道号
92 1 ad_reg=ad_reg<<4;
93 1 /*读AD转换结果*/
94 1 for(i=0;i<8;i++)
95 1 {
96 2 if(dout==1){rdsh+=r[i];}
97 2 din=1;
98 2 clk=1;clk=0;ad_reg=ad_reg<<1;
99 2 }
100 1 for(i=0;i<4;i++)
101 1 {
102 2 if(dout==1){rdsl+=r[i];}
103 2 din=0;
104 2 clk=1;clk=0;
105 2 }
106 1 cs=1;
107 1 return((rdsh<<4)+(rdsl>>4));
108 1 }
109 /*=========================*/
110 /*======模拟量输入函数=====*/
111 /*===4路模拟量读取及滤波===*/
112 /*=========================*/
113 void AV_in(void)
114 {
115 1 uchar i;
116 1 uint result;
C51 COMPILER V7.06 RXR_CS 06/26/2006 22:51:01 PAGE 3
117 1
118 1 for(i=0;i<=3;i++){ad_1[i]=ad_1[i+1];}
119 1 ad_1[4]=TLC2543(0);
120 1 result=0;
121 1 for(i=0;i<=4;i++){result+=ad_1[i];}
122 1 ad1=(result/5);
123 1
124 1 for(i=0;i<=3;i++){ad_2[i]=ad_2[i+1];}
125 1 ad_2[4]=TLC2543(1);
126 1 result=0;
127 1 for(i=0;i<=4;i++){result+=ad_2[i];}
128 1 ad2=(result/5);
129 1
130 1 for(i=0;i<=3;i++){ad_3[i]=ad_3[i+1];}
131 1 ad_3[4]=TLC2543(2);
132 1 result=0;
133 1 for(i=0;i<=4;i++){result+=ad_3[i];}
134 1 ad3=(result/5);
135 1
136 1 for(i=0;i<=3;i++){ad_4[i]=ad_4[i+1];}
137 1 ad_4[4]=TLC2543(3);
138 1 result=0;
139 1 for(i=0;i<=4;i++){result+=ad_4[i];}
140 1 ad4=(result/5);
141 1 }
142
143 /*===========================*/
144 /*=====下位机发送数据函数====*/
145 /*===========================*/
146 void group_out_ad(void)
147 {
148 1 uchar i;
149 1 uint k;
150 1 pushMsg=&sendbuf[0];
151 1 crc_z=CRC16(pushMsg,send_Len);
152 1 k=crc_z;
153 1 sendbuf[send_Len]=(uchar)(crc_z>>8); //+CRC_Hi
154 1 send_Len++;
155 1 sendbuf[send_Len]=(uchar)k; //+CRC_Li
156 1 EA=0;
157 1 for(i=0;i<=send_Len;i++)
158 1 {
159 2 chenck_fun(sendbuf[send_Len]);
160 2 SBUF=sendbuf[i];while(!TI);TI=0;
161 2 }
162 1 EA=1;
163 1 send_Len=send_Len-2; //恢复
164 1 RUN=1;
165 1 }
166
167
168 /*==============*/
169 /*==系统主函数==*/
170 /*==============*/
171 void main (void)
172 {
173 1 AUXR = 0x01;
174 1 Serial();
175 1 IE =0x92;
176 1 IP =0x00;
177 1 TR0=1;RUN=1;XJ=1;
178 1 jd_off(0xff);
C51 COMPILER V7.06 RXR_CS 06/26/2006 22:51:01 PAGE 4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -