📄 subpro_ds.lst
字号:
C51 COMPILER V7.00 SUBPRO_DS 03/16/2005 20:37:51 PAGE 1
C51 COMPILER V7.00, COMPILATION OF MODULE SUBPRO_DS
OBJECT MODULE PLACED IN SubPro_ds.OBJ
COMPILER INVOKED BY: C:\PROGRA~1\Keil\C51\BIN\c51.exe SubPro_ds.c DB OE SMALL ROM(LARGE)
stmt level source
1 #include<reg51.h>
2 #include<transmit_data_h.h>
3 #include<intrins.h>
4
5 #define identity 1
6 #define columne 1
7
8 extern void delay_time_1s (void);
9
10 unsigned char code ds_id[] ={
11 0x28,0xDF,0x62,0x7A,0x00,0x00,0x00,0xDF,
12 0x28,0xCE,0x95,0x7A,0x00,0x00,0x00,0x44
13 };
14
15 unsigned char code syn_data[6]={0x55,0x55,0x55,0x55,0xff,0xaa}; //无线发送同步字节
16 unsigned char code end_data[6]={0xff,0x00,0xff,0xff,0xff,0xff}; //无线发送结束字节
17
18
19
20 ////////////////////////////////////////
21 //名称:数据无线传输
22 //功能:2051取RAM单元数据封装成数据帧发送给PC
23 ///////////////////////////////////////
24
25 //串口发送一个字节子程序
26 void send_byte_pc(unsigned char us)
27 {
28 1 SBUF =us;
29 1 while(TI==0);
30 1 TI =0;
31 1 }
32
33
34 void send_nbyt_pc(var_id) //串口发送10个字节给PC
35 unsigned char data *var_id;
36 {
37 1 unsigned char i;
38 1 for(i=0;i<4;i++)
39 1 {
40 2 send_byte_pc(*(var_id+i) );
41 2 }
42 1 }
43 //发送结束字节
44 void send_end_pc(void)
45 {
46 1 unsigned char data i;
47 1 for(i=0;i<6;i++)
48 1 {
49 2 send_byte_pc(end_data[i]);
50 2 }
51 1 }
52
53
54 //发送同步字节
55 void send_syn_pc(void)
C51 COMPILER V7.00 SUBPRO_DS 03/16/2005 20:37:51 PAGE 2
56 {
57 1 unsigned char data i;
58 1 for(i=0;i<6;i++)
59 1 {
60 2 send_byte_pc(syn_data[i]);
61 2 }
62 1 }
63
64 void send_tmp_pc(unsigned char *us) //两字节温度数据封装成数据帧发送给PC
65 {
66 1 send_syn_pc();
67 1 send_nbyt_pc(us);
68 1 send_end_pc();
69 1 }
70
71
72 void send_data_pc(void) //读取两个DS18B20温度数据,无线传送给PC
73 {
74 1 unsigned char data i,k;
75 1 unsigned char data data_rom[4];
76 1 unsigned char data index =0;
77 1
78 1 k =0;
79 1 do
80 1 {
81 2
82 2 if(!OWReset())
83 2 {
84 3 OWWriteByte(0x55); //匹配id
85 3 for(i=index;i<8+index;i++)
86 3 {
87 4 OWWriteByte(ds_id[i]);
88 4 }
89 3 OWWriteByte(0xBE); //读ScatchPad
90 3
91 3 for(i=0;i<2;i++)
92 3 {
93 4 data_rom[i+index/4] =OWReadByte();
94 4 }
95 3
96 3 }
97 2 index+=8;
98 2 k++;
99 2 }while(k<2);
100 1
101 1 send_tmp_pc(&data_rom[0]);
102 1 //test:while(1);
103 1 }
104
105 /////////////////////////////////////////
106 //名称:温度采集程序
107 //功能:命令64个DS18B20同时开始温度采集
108 ////////////////////////////////////////
109 void send_ds_cmd(void)
110 {
111 1 if(!OWReset())
112 1 {
113 2 OWWriteByte(0xCC);
114 2 OWWriteByte(0x44);
115 2 }
116 1 delay_time_1s();
117 1 delay_time_1s();
C51 COMPILER V7.00 SUBPRO_DS 03/16/2005 20:37:51 PAGE 3
118 1 }
119 ////////////////////////////////////////
120 //名称:出错处理
121 //功能:接收到PC非法命令,作显示提示
122 ////////////////////////////////////////
123 void error_set(void)
124 {
125 1 //printf("Command Error!\n");
126 1 _nop_();
127 1 _nop_();
128 1 }
129
130 ////////////////////////////////////////////
131 //名称:串口查询方式接收程序
132 //功能:中断后,关中断使能,以查询方式接收PC命令字节,
133 // 并对命令进行解析,返回命令值
134 /////////////////////////////////////////////
135 unsigned char receive_cmd(us)
136 unsigned char *us;
137 {
138 1 unsigned char i;
139 1 unsigned char data_tmp[3];
140 1 //data_tmp[0] =*(us+1);
141 1 //unsigned char data_chk[15]={0xff,0x55,0x55,0xFF,0xAA,0x01,0x01,84}; //为观察指针变量引入测试变量
142 1 //unsigned char data *us=&data_chk[0];
143 1
144 1 for(i=0;i<15;)
145 1 {
146 2 if( (*(us+i)==0xFF)&( *(us+i+1)==0xAA ) ) //识别帧同步字节
147 2 {
148 3 data_tmp[0] =*(us+i+2); // 此处采用for语句得不到正确值?
149 3 data_tmp[1] =*(us+i+3);
150 3 data_tmp[2] =*(us+i+4);
151 3
152 3 goto next;
153 3 }
154 2 i++;
155 2 }
156 1
157 1 next: if( (data_tmp[0]==identity)&(data_tmp[1]==columne) ) //判断是否为对本2051系统
-
158 1 return (data_tmp[2]); //返回控制指令
159 1 else
160 1 return (0x00);
161 1 }
162
163 ///////////////////////////////////////////
164 //名称:无线字节接收子程序
165 //功能:从串口以查询的方式接收一字节数据,数据返回
166 //////////////////////////////////////////
167 unsigned char receive_byte(void) reentrant
168 {
169 1 unsigned char pc_data;
170 1 unsigned int i,j;
171 1
172 1 while(RI==0&&j<2000)
173 1 {
174 2 i++; //等待接收一字节数据,设定超限时间值
175 2 if(i>2000)
176 2 {
177 3 i =0;
178 3 j++;
C51 COMPILER V7.00 SUBPRO_DS 03/16/2005 20:37:51 PAGE 4
179 3 }
180 2 };
181 1
182 1 while(RI==1)
183 1 {
184 2 RI=0;
185 2 pc_data =SBUF;
186 2 break;
187 2 }
188 1 return pc_data;
189 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 432 ----
CONSTANT SIZE = 28 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 13
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 + -