📄 route0.lst
字号:
C51 COMPILER V7.00 ROUTE0 03/18/2005 10:41:38 PAGE 1
C51 COMPILER V7.00, COMPILATION OF MODULE ROUTE0
OBJECT MODULE PLACED IN route0.OBJ
COMPILER INVOKED BY: C:\PROGRA~1\Keil\C51\BIN\c51.exe route0.c DB OE SMALL ROM(LARGE)
stmt level source
1 #include<rount3.h>
2 #include<reg51.h>
3 #include<intrins.h>
4 bit page_ch_flg;
5
6 unsigned char sla_adr0;
7 unsigned char sla_adr1;
8 unsigned char init_adr0;
9 unsigned char init_adr1;
10
11 ////////////////////////////
12 //名称:延迟程序
13 //功能:根据参数延迟
14 ////////////////////////////
15 void delay_time(unsigned int us) //29us/40us/52us/64us
16 {
17 1 unsigned int data i;
18 1 for(i=0;i<=us;i++)
19 1 _nop_();
20 1 }
21
22
23 void delay_time_1s (void) //实际模拟仿真测试 /0.9s
24 {
25 1 unsigned char data i;
26 1 while(i<4)
27 1 {
28 2 delay_time(8000);
29 2 _nop_();
30 2 delay_time(8000);
31 2 i++;
32 2 }
33 1 }
34
35 //////////////////////////////////////////
36 //名称:测温子程序
37 //功能:读取64个DS18B20温度值,存放到扩展RAM区
38 //////////////////////////////////////////
39 void read_one_tmp(vs_rom) //读取ONE DS18B20温度值
40 unsigned char data *vs_rom;
41 {
42 1
43 1 unsigned char i;
44 1 unsigned char id_rom[8];
45 1
46 1 if(page_ch_flg==1)
47 1 {
48 2 sla_adr0|=pagel;
49 2 rdadr(&id_rom[0],sla_adr0,init_adr1,8);
50 2 goto next;
51 2 }
52 1 if(init_adr1==0xf8) //判断是否页溢出?
53 1 page_ch_flg =1;
54 1
55 1 rdadr(&id_rom[0],sla_adr0,init_adr1,8); //第一次发送EEPROM中DS18B20 ID存放首地址
C51 COMPILER V7.00 ROUTE0 03/18/2005 10:41:38 PAGE 2
56 1
57 1 next:init_adr1+=8;
58 1 if(!OWReset())
59 1 {
60 2 OWWriteByte(0x55); //写匹配ID命令
61 2 for(i=0;i<8;i++)
62 2 OWWriteByte(id_rom[i]); //发送8字节DS18B20 ID
63 2 OWWriteByte(0xBE);
64 2 for(i=0;i<2;i++)
65 2 *(vs_rom+i) =OWReadByte(); //读取2字节温度数据
66 2 _nop_();
67 2 }
68 1 _nop_();
69 1 }
70
71 //////////////////////////////////////////////////////////////////
72 /////////////////////////////////////////////////////////////////
73
74 void do_one_tmp(us_rom,us_rom_bcd) //将读取的温度数据转换成十进制数
75 unsigned char data *us_rom;
76 unsigned char data *us_rom_bcd;
77 {
78 1 unsigned char i =0;
79 1 unsigned char temp,shift,mode;
80 1 unsigned char us_rom_var[2];
81 1 unsigned char us_bcd_var;
82 1 float us_tmp_bcd,mode_f;
83 1 unsigned char flag;
84 1
85 1 us_rom_var[0] =*us_rom; //温度整数位
86 1 us_rom_var[1] =*(us_rom+1); //温度小数位
87 1 flag =(us_rom_var[1]>>3)&0x01;
88 1 us_rom_var[1] =((us_rom_var[1]&0x03)<<4)|((us_rom_var[0]&0xf0)>>4);
89 1 us_rom_var[0] =us_rom_var[0]&0x0f;
90 1
91 1 while(1) //计算整数值,结果存tmp_rom_bcd[1]
92 1 {
93 2 shift =0x01;
94 2 mode =1;
95 2 while(i<6)
96 2 {
97 3 temp=us_rom_var[1]&shift;
98 3 if(temp) //此位为1,加上权值
99 3 us_bcd_var+=mode;
100 3
101 3 mode=mode*2;
102 3 shift=shift<<1;
103 3 i++;
104 3 }
105 2 if(flag) //判断是否为负数?yes,整数最高位置1
106 2 us_bcd_var|=0x80;
107 2 break;
108 2 }
109 1 *(us_rom_bcd+1) =us_bcd_var; //求得温度整数位
110 1
111 1 i =0;
112 1 shift =0x01; //计算小数值,结果存tmp_rom_bcd[0]
113 1 mode_f =6.25;
114 1 while(i<4)
115 1 {
116 2 temp=us_rom_var[0]&shift;
117 2 if(temp)
C51 COMPILER V7.00 ROUTE0 03/18/2005 10:41:38 PAGE 3
118 2 us_tmp_bcd+=mode_f;
119 2
120 2 mode_f=mode_f*2;
121 2 shift=shift<<1;
122 2 i++;
123 2 }
124 1 *us_rom_bcd=us_tmp_bcd; //求得温度小数位
125 1 }
126
127 void wr_tmp_ram(vs_rom_bcd) //将BCD码温度数据存EEPROM,小数在低地址
128 unsigned char data *vs_rom_bcd;
129 {
130 1 unsigned char *p;
131 1
132 1 p =vs_rom_bcd;
133 1 wradr(p,sla_adr1,init_adr0,2);
134 1 init_adr0+=2;
135 1 }
136
137 void read_all_tmp(void) //读取64个DS18B20温度值
138 {
139 1 unsigned char i;
140 1 unsigned char tmp_rom[2];
141 1 unsigned char tmp_rom_bcd[2];
142 1 //unsigned char test_rom[8];
143 1
144 1 init_adr0 =0x00; //EEPROM存放首地址0x0000/0x0200
145 1 init_adr1 =0x00;
146 1 sla_adr0 =0xA0; //24C02硬件地址
147 1 sla_adr1 =0xA0;
148 1 sla_adr1 =sla_adr1|pageh;
149 1 page_ch_flg =0; //初始化相关变量
150 1
151 1 for(i=0;i<64;i++)
152 1 {
153 2 read_one_tmp(tmp_rom);
154 2 do_one_tmp(tmp_rom,tmp_rom_bcd);
155 2 wr_tmp_ram(tmp_rom_bcd);
156 2
157 2 }
158 1 // init_adr0 =0x00; //test
159 1 // sla_adr1 =0xA4;
160 1 // rdadr(&test_rom[0],sla_adr1,init_adr0,8);
161 1 // _nop_();
162 1 }
163 ///////////////////////////////////////////////////////////////////////////
164
165 main()
166 {
167 1 unsigned char test_rom[8];
168 1 unsigned char nxt_rom[2];
169 1
170 1 OWReset();
171 1 OWWriteByte(0xCC);
172 1 OWWriteByte(0x44);
173 1 delay_time_1s();
174 1
175 1 //page_ch_flg =0;
176 1 //init_adr0 =0x00;
177 1 //init_adr1 =0x00;
178 1 //sla_adr0 =0xA0;
179 1 //sla_adr1 =0xA4;
C51 COMPILER V7.00 ROUTE0 03/18/2005 10:41:38 PAGE 4
180 1 //read_one_tmp(test_rom,1);
181 1 //do_one_tmp(test_rom,nxt_rom);
182 1 //wr_tmp_ram(nxt_rom);
183 1 read_all_tmp();
184 1 init_adr0 =0x00; //test
185 1 sla_adr1 =0xA4;
186 1 rdadr(&test_rom[0],sla_adr1,init_adr0,8);
187 1 _nop_();
188 1
189 1 }
*** WARNING C280 IN LINE 168 OF ROUTE0.C: 'nxt_rom': unreferenced local variable
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 463 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 41
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -