📄 main.lss
字号:
174: 30 e0 ldi r19, 0x00 ; 0
176: a3 e0 ldi r26, 0x03 ; 3
178: b0 e0 ldi r27, 0x00 ; 0
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
17a: cd 01 movw r24, r26
17c: 01 97 sbiw r24, 0x01 ; 1
17e: f1 f7 brne .-4 ; 0x17c <Read_DS18B20+0x40>
180: 21 50 subi r18, 0x01 ; 1
182: 30 40 sbci r19, 0x00 ; 0
184: 8f ef ldi r24, 0xFF ; 255
186: 2f 3f cpi r18, 0xFF ; 255
188: 38 07 cpc r19, r24
18a: b9 f7 brne .-18 ; 0x17a <Read_DS18B20+0x3e>
18c: 5f 5f subi r21, 0xFF ; 255
18e: 58 30 cpi r21, 0x08 ; 8
190: c9 f6 brne .-78 ; 0x144 <Read_DS18B20+0x8>
192: 84 2f mov r24, r20
194: 99 27 eor r25, r25
196: 08 95 ret
00000198 <Write_DS18B20>:
198: 48 2f mov r20, r24
19a: 50 e0 ldi r21, 0x00 ; 0
19c: a3 e0 ldi r26, 0x03 ; 3
19e: b0 e0 ldi r27, 0x00 ; 0
1a0: d2 9a sbi 0x1a, 2 ; 26
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
1a2: cd 01 movw r24, r26
1a4: 01 97 sbiw r24, 0x01 ; 1
1a6: f1 f7 brne .-4 ; 0x1a4 <Write_DS18B20+0xc>
1a8: cd 01 movw r24, r26
1aa: 01 97 sbiw r24, 0x01 ; 1
1ac: f1 f7 brne .-4 ; 0x1aa <Write_DS18B20+0x12>
1ae: 40 ff sbrs r20, 0
1b0: 02 c0 rjmp .+4 ; 0x1b6 <Write_DS18B20+0x1e>
1b2: d2 98 cbi 0x1a, 2 ; 26
1b4: 01 c0 rjmp .+2 ; 0x1b8 <Write_DS18B20+0x20>
1b6: d2 9a sbi 0x1a, 2 ; 26
1b8: 2d e3 ldi r18, 0x3D ; 61
1ba: 30 e0 ldi r19, 0x00 ; 0
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
1bc: e3 e0 ldi r30, 0x03 ; 3
1be: f0 e0 ldi r31, 0x00 ; 0
1c0: cf 01 movw r24, r30
1c2: 01 97 sbiw r24, 0x01 ; 1
1c4: f1 f7 brne .-4 ; 0x1c2 <Write_DS18B20+0x2a>
1c6: 21 50 subi r18, 0x01 ; 1
1c8: 30 40 sbci r19, 0x00 ; 0
1ca: 8f ef ldi r24, 0xFF ; 255
1cc: 2f 3f cpi r18, 0xFF ; 255
1ce: 38 07 cpc r19, r24
1d0: a9 f7 brne .-22 ; 0x1bc <Write_DS18B20+0x24>
1d2: d2 98 cbi 0x1a, 2 ; 26
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
1d4: cf 01 movw r24, r30
1d6: 01 97 sbiw r24, 0x01 ; 1
1d8: f1 f7 brne .-4 ; 0x1d6 <Write_DS18B20+0x3e>
1da: 31 97 sbiw r30, 0x01 ; 1
1dc: f1 f7 brne .-4 ; 0x1da <Write_DS18B20+0x42>
1de: 5f 5f subi r21, 0xFF ; 255
1e0: 58 30 cpi r21, 0x08 ; 8
1e2: 11 f0 breq .+4 ; 0x1e8 <Write_DS18B20+0x50>
1e4: 46 95 lsr r20
1e6: dc cf rjmp .-72 ; 0x1a0 <Write_DS18B20+0x8>
1e8: 08 95 ret
000001ea <Delayus>:
1ea: 9c 01 movw r18, r24
1ec: e3 e0 ldi r30, 0x03 ; 3
1ee: f0 e0 ldi r31, 0x00 ; 0
1f0: 03 c0 rjmp .+6 ; 0x1f8 <Delayus+0xe>
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
1f2: cf 01 movw r24, r30
1f4: 01 97 sbiw r24, 0x01 ; 1
1f6: f1 f7 brne .-4 ; 0x1f4 <Delayus+0xa>
1f8: 21 50 subi r18, 0x01 ; 1
1fa: 30 40 sbci r19, 0x00 ; 0
1fc: 8f ef ldi r24, 0xFF ; 255
1fe: 2f 3f cpi r18, 0xFF ; 255
200: 38 07 cpc r19, r24
202: b9 f7 brne .-18 ; 0x1f2 <Delayus+0x8>
204: 08 95 ret
00000206 <Delayms>:
{
_delay_loop_2(3); //_delay_loop_2(1)是延时4个时钟周期,参数为3则延时12
//个时钟周期,本实验用12M晶体,则12个时钟周期为12/12=1us
}
}
//ms级别的延时函数
void Delayms(unsigned int lms)
{
206: 9c 01 movw r18, r24
208: 0d c0 rjmp .+26 ; 0x224 <Delayms+0x1e>
while(lms--)
20a: 47 ee ldi r20, 0xE7 ; 231
20c: 53 e0 ldi r21, 0x03 ; 3
20e: e3 e0 ldi r30, 0x03 ; 3
210: f0 e0 ldi r31, 0x00 ; 0
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
212: cf 01 movw r24, r30
214: 01 97 sbiw r24, 0x01 ; 1
216: f1 f7 brne .-4 ; 0x214 <Delayms+0xe>
218: 41 50 subi r20, 0x01 ; 1
21a: 50 40 sbci r21, 0x00 ; 0
21c: 8f ef ldi r24, 0xFF ; 255
21e: 4f 3f cpi r20, 0xFF ; 255
220: 58 07 cpc r21, r24
222: b9 f7 brne .-18 ; 0x212 <Delayms+0xc>
224: 21 50 subi r18, 0x01 ; 1
226: 30 40 sbci r19, 0x00 ; 0
228: 8f ef ldi r24, 0xFF ; 255
22a: 2f 3f cpi r18, 0xFF ; 255
22c: 38 07 cpc r19, r24
22e: 69 f7 brne .-38 ; 0x20a <Delayms+0x4>
230: 08 95 ret
00000232 <DS18B20_StartConvert>:
{
Delayus(1000); //延时1ms
}
}
//启动温度转换
void DS18B20_StartConvert(void)
{
232: 1f 93 push r17
unsigned char i;
DS18B20_Init(); //初始化DS18B20
234: 0e 94 69 00 call 0xd2 ; 0xd2 <DS18B20_Init>
Write_DS18B20(DS18B20_SKIP_ROM); //发送ROM指令,跳过ROM匹配
238: 8c ec ldi r24, 0xCC ; 204
23a: 0e 94 cc 00 call 0x198 ; 0x198 <Write_DS18B20>
Write_DS18B20(DS18B20_CONVERT_RAM); // 发送温度转换命令
23e: 84 e4 ldi r24, 0x44 ; 68
240: 0e 94 cc 00 call 0x198 ; 0x198 <Write_DS18B20>
244: 10 e0 ldi r17, 0x00 ; 0
for(i=0;i<50;i++) //延时1S,等转换完成
{
Delayms(20);
246: 84 e1 ldi r24, 0x14 ; 20
248: 90 e0 ldi r25, 0x00 ; 0
24a: 0e 94 03 01 call 0x206 ; 0x206 <Delayms>
24e: 1f 5f subi r17, 0xFF ; 255
250: 12 33 cpi r17, 0x32 ; 50
252: c9 f7 brne .-14 ; 0x246 <DS18B20_StartConvert+0x14>
254: 1f 91 pop r17
256: 08 95 ret
00000258 <DS18B20_GetConvert>:
}
}
//获得温度转换结果
void DS18B20_GetConvert(void)
{
258: 0e 94 69 00 call 0xd2 ; 0xd2 <DS18B20_Init>
DS18B20_Init(); //初始化DSDS18B20
Write_DS18B20(DS18B20_SKIP_ROM); //发送ROM指令,跳过ROM匹配
25c: 8c ec ldi r24, 0xCC ; 204
25e: 0e 94 cc 00 call 0x198 ; 0x198 <Write_DS18B20>
Write_DS18B20(DS18B20_READ_RAM); //发送读取暂存器指令
262: 8e eb ldi r24, 0xBE ; 190
264: 0e 94 cc 00 call 0x198 ; 0x198 <Write_DS18B20>
Temp_L = Read_DS18B20(); //获得温度的低位
268: 0e 94 9e 00 call 0x13c ; 0x13c <Read_DS18B20>
26c: 80 93 96 00 sts 0x0096, r24
Temp_H = Read_DS18B20(); //获得温度的高位
270: 0e 94 9e 00 call 0x13c ; 0x13c <Read_DS18B20>
274: 80 93 a5 00 sts 0x00A5, r24
278: 08 95 ret
0000027a <DS18B20_ReadRAM>:
}
//启动温度转换,带ROM匹配
void DS18B20_StartConvert1(void)
{
unsigned char i;
DS18B20_MatchROM();
Write_DS18B20(DS18B20_CONVERT_RAM); // 发送温度转换命令
for(i=0;i<50;i++) //延时1S,等转换完成
{
Delayms(20);
}
}
//获得温度转换结果,带ROM匹配
void DS18B20_GetConvert1(void)
{
DS18B20_MatchROM();
Write_DS18B20(DS18B20_READ_RAM); //发送读取暂存器指令
Temp_L = Read_DS18B20(); //获得温度的低位
Temp_H = Read_DS18B20(); //获得温度的高位
}
// 读取RAM内容
void DS18B20_ReadRAM(void)
{
27a: cf 93 push r28
27c: df 93 push r29
unsigned char i;
DS18B20_Init(); //初始化DSDS18B20
27e: 0e 94 69 00 call 0xd2 ; 0xd2 <DS18B20_Init>
Write_DS18B20(DS18B20_SKIP_ROM); //发送ROM指令,跳过ROM匹配
282: 8c ec ldi r24, 0xCC ; 204
284: 0e 94 cc 00 call 0x198 ; 0x198 <Write_DS18B20>
Write_DS18B20(DS18B20_READ_RAM); //发送读取暂存器指令
288: 8e eb ldi r24, 0xBE ; 190
28a: 0e 94 cc 00 call 0x198 ; 0x198 <Write_DS18B20>
28e: c7 ea ldi r28, 0xA7 ; 167
290: d0 e0 ldi r29, 0x00 ; 0
for(i = 0;i < 9;i++)
{
ReadRAM_Buff[i] = Read_DS18B20();
292: 0e 94 9e 00 call 0x13c ; 0x13c <Read_DS18B20>
296: 89 93 st Y+, r24
298: 80 e0 ldi r24, 0x00 ; 0
29a: c0 3b cpi r28, 0xB0 ; 176
29c: d8 07 cpc r29, r24
29e: c9 f7 brne .-14 ; 0x292 <DS18B20_ReadRAM+0x18>
2a0: df 91 pop r29
2a2: cf 91 pop r28
2a4: 08 95 ret
000002a6 <DS18B20_WriteRAM>:
}
}
//写温度上下限和配置寄存器到RAM
void DS18B20_WriteRAM(void)
{
2a6: 0e 94 69 00 call 0xd2 ; 0xd2 <DS18B20_Init>
DS18B20_Init(); //初始化DSDS18B20
Write_DS18B20(DS18B20_SKIP_ROM); //发送ROM指令,跳过ROM匹配
2aa: 8c ec ldi r24, 0xCC ; 204
2ac: 0e 94 cc 00 call 0x198 ; 0x198 <Write_DS18B20>
Write_DS18B20(DS18B20_WRITE_RAM); // 发送写RAM命令
2b0: 8e e4 ldi r24, 0x4E ; 78
2b2: 0e 94 cc 00 call 0x198 ; 0x198 <Write_DS18B20>
Write_DS18B20(ThrH); //写温度报警上限值
2b6: 80 91 98 00 lds r24, 0x0098
2ba: 0e 94 cc 00 call 0x198 ; 0x198 <Write_DS18B20>
Write_DS18B20(ThrL); //写温度报警下限值
2be: 80 91 99 00 lds r24, 0x0099
2c2: 0e 94 cc 00 call 0x198 ; 0x198 <Write_DS18B20>
Write_DS18B20(CFG); //写配置寄存器
2c6: 80 91 97 00 lds r24, 0x0097
2ca: 0e 94 cc 00 call 0x198 ; 0x198 <Write_DS18B20>
2ce: 08 95 ret
000002d0 <DS18B20_CopyEEPROM>:
}
//复制RAM中的温度上下线和配置寄存器到EEPROM
void DS18B20_CopyEEPROM(void)
{
2d0: 0e 94 69 00 call 0xd2 ; 0xd2 <DS18B20_Init>
DS18B20_Init(); //初始化DSDS18B20
Write_DS18B20(DS18B20_SKIP_ROM); //发送ROM指令,跳过ROM匹配
2d4: 8c ec ldi r24, 0xCC ; 204
2d6: 0e 94 cc 00 call 0x198 ; 0x198 <Write_DS18B20>
Write_DS18B20(DS18B20_COPY_RAM); // 发送复制命令
2da: 88 e4 ldi r24, 0x48 ; 72
2dc: 0e 94 cc 00 call 0x198 ; 0x198 <Write_DS18B20>
Delayms(20); // 等待复制完成
2e0: 84 e1 ldi r24, 0x14 ; 20
2e2: 90 e0 ldi r25, 0x00 ; 0
2e4: 0e 94 03 01 call 0x206 ; 0x206 <Delayms>
2e8: 08 95 ret
000002ea <DS18B20_RecallRAM>:
}
//把EEPROM中的温度上下线和配置寄存器恢复到RAM
void DS18B20_RecallRAM(void)
{
2ea: 0e 94 69 00 call 0xd2 ; 0xd2 <DS18B20_Init>
DS18B20_Init(); //初始化DSDS18B20
Write_DS18B20(DS18B20_SKIP_ROM); //发送ROM指令,跳过ROM匹配
2ee: 8c ec ldi r24, 0xCC ; 204
2f0: 0e 94 cc 00 call 0x198 ; 0x198 <Write_DS18B20>
Write_DS18B20(DS18B20_RECALL_EEPROM); // 发送温度转换命令
2f4: 88 eb ldi r24, 0xB8 ; 184
2f6: 0e 94 cc 00 call 0x198 ; 0x198 <Write_DS18B20>
Delayms(20);
2fa: 84 e1 ldi r24, 0x14 ; 20
2fc: 90 e0 ldi r25, 0x00 ; 0
2fe: 0e 94 03 01 call 0x206 ; 0x206 <Delayms>
302: 08 95 ret
00000304 <DS18B20_ReadROM>:
}
//读ROM,当总线上只有一个节点时,可以执行此操作
void DS18B20_ReadROM(void)
{
304: cf 93 push r28
306: df 93 push r29
unsigned char i;
DS18B20_Init(); //初始化DS18B20
308: 0e 94 69 00 call 0xd2 ; 0xd2 <DS18B20_Init>
Write_DS18B20(DS18B20_READ_ROM); //发送读ROM指令
30c: 83 e3 ldi r24, 0x33 ; 51
30e: 0e 94 cc 00 call 0x198 ; 0x198 <Write_DS18B20>
312: ca e9 ldi r28, 0x9A ; 154
314: d0 e0 ldi r29, 0x00 ; 0
for(i = 0;i < 8;i++)
{
ReadROM_Buff[i] = Read_DS18B20();
316: 0e 94 9e 00 call 0x13c ; 0x13c <Read_DS18B20>
31a: 89 93 st Y+, r24
31c: 80 e0 ldi r24, 0x00 ; 0
31e: c2 3a cpi r28, 0xA2 ; 162
320: d8 07 cpc r29, r24
322: c9 f7 brne .-14 ; 0x316 <DS18B20_ReadROM+0x12>
324: df 91 pop r29
326: cf 91 pop r28
328: 08 95 ret
0000032a <DS18B20_SearchROM>:
}
}
//搜索ROM,确定总线上的节点数目和ROM内容
void DS18B20_SearchROM(void)
{
32a: 0e 94 69 00 call 0xd2 ; 0xd2 <DS18B20_Init>
DS18B20_Init(); //初始化DS18B20
Write_DS18B20(DS18B20_SEARCH_ROM); //发送搜索ROM指令
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -