?? main.lst
字號(hào):
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 //提示:在調(diào)試程序的時(shí)候晶振用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口模擬數(shù)據(jù)口
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 // 接收和發(fā)送緩存區(qū)的深度
28 #define NUM1 7 // 接收和發(fā)送緩存區(qū)的深度
29 unsigned char idata sendbuf[NUM]; // 數(shù)據(jù)發(fā)送緩沖區(qū)
30 unsigned char idata receivebuf[NUM1]; // 數(shù)據(jù)接收緩沖區(qū)
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){}//上電延時(shí)
52 1 Inituart();
53 1 InitSHTXX();
54 1 if (F0==1)
55 1 okqi=0;//無(wú)傳感器標(biāo)志
C51 COMPILER V7.00 MAIN 10/10/2007 14:42:11 PAGE 2
56 1 else
57 1 okqi=1;//有傳感器標(biāo)志
58 1
59 1 sendbuf[0]=0X80;//起始符
60 1 // sendbuf[1]=0X01;//本機(jī)地址
61 1 sendbuf[1]=P1&0X0F;//本機(jī)地址
62 1
63 1 //receivebuf[3]=0x00;uartflasT=1;//上電發(fā)送測(cè)試數(shù)據(jù)
64 1 okmea=1;//測(cè)量
65 1 MeasureMode=1;
66 1
67 1 while (1)
68 1 {
69 2 if(uartflasR==1)//接收命令處理
70 2 {
71 3 if(rnum>3) //接收數(shù)據(jù)應(yīng)大于4字節(jié),否則帔格式不對(duì)
72 3 if(receivebuf[0]==sendbuf[1]) //本機(jī)地址才處理
73 3 switch(receivebuf[3]) //命令處理
74 3 {
75 4 case 0x12:
76 4 case 0x13:
77 4 case 0x11:{okmea=1;/*P0=~P0;*/}break;//測(cè)量濕度和溫度命令
78 4 case 0x00:{uartflasT=1;}break;//檢測(cè)命令
79 4 default:;
80 4 }
81 3 uartflasR=0;
82 3 }
83 2 if(uartflasT==1)//發(fā)送命令處理
84 2 {
85 3 //sendbuf[0]=0X80;//起始符
86 3 //sendbuf[1]=0X01;//本機(jī)地址
87 3 switch(receivebuf[3])//命令處理
88 3 {
89 4 case 0x11:{//測(cè)量濕度和溫度命令
90 5 sendbuf[2]=0;//字節(jié)數(shù)1
91 5 sendbuf[3]=11;//字節(jié)數(shù)2
92 5 sendbuf[4]=0x11;//命令碼
93 5
94 5 sendbuf[5]=0x12;//濕度數(shù)據(jù)
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;//溫度數(shù)據(jù)
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:{//測(cè)量濕度命令
123 5 sendbuf[2]=0;//字節(jié)數(shù)1
124 5 sendbuf[3]=6;//字節(jié)數(shù)2
125 5 sendbuf[4]=0x11;//命令碼
126 5
127 5 sendbuf[5]=0x12;//濕度數(shù)據(jù)
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:{//測(cè)量溫度命令
139 5 sendbuf[2]=0;//字節(jié)數(shù)1
140 5 sendbuf[3]=6;//字節(jié)數(shù)2
141 5 sendbuf[4]=0x11;//命令碼
142 5
143 5 sendbuf[5]=0x13;//溫度數(shù)據(jù)
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:{//檢測(cè)命令
155 5 sendbuf[2]=0;//字節(jié)數(shù)1
156 5 sendbuf[3]=1;//字節(jié)數(shù)2
157 5 sendbuf[4]=0x00;//命令碼
158 5
159 5 sendbuf[5]=okqi;//傳感器標(biāo)志
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)
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -