📄 main.lst
字号:
C51 COMPILER V7.00 MAIN 10/10/2007 14:42:11 PAGE 1
C51 COMPILER V7.00, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c OPTIMIZE(SIZE) BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "reg52.h" //晶振可以用11.0592MHZ,如果用串口的话
2 //提示:在调试程序的时候晶振用12MHZ
3 #include "stdio.h"
4 #include "string.h"
5 #include "math.h"
6 #include "intrins.h"
7 //#include "bcd.h"
8 //#include "SHTXX_iic.c"
9 /**********************************************************************************/
10 #define uchar unsigned char
11 #define BIT7 0X80
12 #define BIT6 0X40
13 #define BIT5 0X20
14 #define BIT4 0X10
15 #define BIT3 0X08
16 #define BIT2 0X04
17 #define BIT1 0X02
18 #define BIT0 0X01
19 sbit SDA=P1^6; // 将p1.6口模拟数据口
20 bdata uchar canmea;
21 float hum,tem;float ftem;
22 uchar aaa,dhum[4],dtem[4];
23 int count,second;
24 uchar MeasureMode;
25 uchar rnum,tnum,tlen;uchar uartflasR,uartflasT;
26
27 #define NUM 20 // 接收和发送缓存区的深度
28 #define NUM1 7 // 接收和发送缓存区的深度
29 unsigned char idata sendbuf[NUM]; // 数据发送缓冲区
30 unsigned char idata receivebuf[NUM1]; // 数据接收缓冲区
31
32 void TxData ();
33 void Inituart();
34 void InitSHTXX();
35 void Inittimer0();
36 float CalculateHum();
37 float CalculateTem();
38 void MeasureTem();
39 void MeasureHum();
40 void measure();
41
42 /*****************************************MAIN START ******************************/
43 void main(void)
44 {
45 1 uchar okqi;
46 1 int dat;//int i;
47 1 uchar okmea;
48 1 // uchar aaa;
49 1 Inittimer0();
50 1 second=1;
51 1 while(second){}//上电延时
52 1 Inituart();
53 1 InitSHTXX();
54 1 if (F0==1)
55 1 okqi=0;//无传感器标志
C51 COMPILER V7.00 MAIN 10/10/2007 14:42:11 PAGE 2
56 1 else
57 1 okqi=1;//有传感器标志
58 1
59 1 sendbuf[0]=0X80;//起始符
60 1 // sendbuf[1]=0X01;//本机地址
61 1 sendbuf[1]=P1&0X0F;//本机地址
62 1
63 1 //receivebuf[3]=0x00;uartflasT=1;//上电发送测试数据
64 1 okmea=1;//测量
65 1 MeasureMode=1;
66 1
67 1 while (1)
68 1 {
69 2 if(uartflasR==1)//接收命令处理
70 2 {
71 3 if(rnum>3) //接收数据应大于4字节,否则帔格式不对
72 3 if(receivebuf[0]==sendbuf[1]) //本机地址才处理
73 3 switch(receivebuf[3]) //命令处理
74 3 {
75 4 case 0x12:
76 4 case 0x13:
77 4 case 0x11:{okmea=1;/*P0=~P0;*/}break;//测量湿度和温度命令
78 4 case 0x00:{uartflasT=1;}break;//检测命令
79 4 default:;
80 4 }
81 3 uartflasR=0;
82 3 }
83 2 if(uartflasT==1)//发送命令处理
84 2 {
85 3 //sendbuf[0]=0X80;//起始符
86 3 //sendbuf[1]=0X01;//本机地址
87 3 switch(receivebuf[3])//命令处理
88 3 {
89 4 case 0x11:{//测量湿度和温度命令
90 5 sendbuf[2]=0;//字节数1
91 5 sendbuf[3]=11;//字节数2
92 5 sendbuf[4]=0x11;//命令码
93 5
94 5 sendbuf[5]=0x12;//湿度数据
95 5 sendbuf[6]=dhum[0];
96 5 sendbuf[7]=dhum[1];
97 5 sendbuf[8]=dhum[2];
98 5 sendbuf[9]=dhum[3];
99 5
100 5 sendbuf[10]=0x13;//温度数据
101 5 sendbuf[11]=dtem[0];
102 5 sendbuf[12]=dtem[1];
103 5 sendbuf[13]=dtem[2];
104 5 sendbuf[14]=dtem[3];
105 5
106 5 /*sendbuf[6]=0x07;
107 5 sendbuf[7]=0x06;
108 5 sendbuf[8]=0x05;
109 5 sendbuf[9]=0x04;
110 5
111 5 sendbuf[11]=0x00;
112 5 sendbuf[12]=0x02;
113 5 sendbuf[13]=0x09;
114 5 sendbuf[14]=0x08;*/
115 5
116 5 sendbuf[15]=sendbuf[5]^sendbuf[6]^sendbuf[7]^sendbuf[8]^sendbuf[9]
117 5 ^sendbuf[10]^sendbuf[11]^sendbuf[12]^sendbuf[13]^sendbuf[14];
C51 COMPILER V7.00 MAIN 10/10/2007 14:42:11 PAGE 3
118 5
119 5 sendbuf[16]=0x7F;//停止符
120 5 tlen=17;
121 5 }break;
122 4 case 0x12:{//测量湿度命令
123 5 sendbuf[2]=0;//字节数1
124 5 sendbuf[3]=6;//字节数2
125 5 sendbuf[4]=0x11;//命令码
126 5
127 5 sendbuf[5]=0x12;//湿度数据
128 5 sendbuf[6]=dhum[0];
129 5 sendbuf[7]=dhum[1];
130 5 sendbuf[8]=dhum[2];
131 5 sendbuf[9]=dhum[3];
132 5
133 5 sendbuf[10]=sendbuf[5]^sendbuf[6]^sendbuf[7]^sendbuf[8]^sendbuf[9];
134 5
135 5 sendbuf[11]=0x7F;//停止符
136 5 tlen=12;
137 5 }break;
138 4 case 0x13:{//测量温度命令
139 5 sendbuf[2]=0;//字节数1
140 5 sendbuf[3]=6;//字节数2
141 5 sendbuf[4]=0x11;//命令码
142 5
143 5 sendbuf[5]=0x13;//温度数据
144 5 sendbuf[6]=dtem[0];
145 5 sendbuf[7]=dtem[1];
146 5 sendbuf[8]=dtem[2];
147 5 sendbuf[9]=dtem[3];
148 5
149 5 sendbuf[10]=sendbuf[5]^sendbuf[6]^sendbuf[7]^sendbuf[8]^sendbuf[9];
150 5
151 5 sendbuf[11]=0x7F;//停止符
152 5 tlen=12;
153 5 }break;
154 4 case 0x00:{//检测命令
155 5 sendbuf[2]=0;//字节数1
156 5 sendbuf[3]=1;//字节数2
157 5 sendbuf[4]=0x00;//命令码
158 5
159 5 sendbuf[5]=okqi;//传感器标志
160 5
161 5 sendbuf[6]=0x7F;//停止符
162 5 tlen=7;
163 5 }break;
164 4 default:;
165 4 }
166 3 uartflasT=0;
167 3 tnum=0;
168 3 SBUF=sendbuf[tnum];tnum++;
169 3 }
170 2
171 2
172 2 if(okmea==1)
173 2 if(okqi==0)
174 2 {
175 3 receivebuf[3]=0x00;uartflasT=1;okmea=0;
176 3 }
177 2 else
178 2 switch(MeasureMode)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -