main.lss
来自「avr当中的一个简单的温度测试程序和学习avr中的一些笔记」· LSS 代码 · 共 975 行 · 第 1/3 页
LSS
975 行
116: 80 93 8e 00 sts 0x008E, r24
11a: 25 ea ldi r18, 0xA5 ; 165
11c: 31 e0 ldi r19, 0x01 ; 1
11e: e3 e0 ldi r30, 0x03 ; 3
120: f0 e0 ldi r31, 0x00 ; 0
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
122: cf 01 movw r24, r30
124: 01 97 sbiw r24, 0x01 ; 1
126: f1 f7 brne .-4 ; 0x124 <DS18B20_Init+0x52>
128: 21 50 subi r18, 0x01 ; 1
12a: 30 40 sbci r19, 0x00 ; 0
12c: 8f ef ldi r24, 0xFF ; 255
12e: 2f 3f cpi r18, 0xFF ; 255
130: 38 07 cpc r19, r24
132: b9 f7 brne .-18 ; 0x122 <DS18B20_Init+0x50>
134: 80 91 8e 00 lds r24, 0x008E
138: 99 27 eor r25, r25
13a: 08 95 ret
0000013c <Read_DS18B20>:
13c: 50 e0 ldi r21, 0x00 ; 0
13e: 40 e0 ldi r20, 0x00 ; 0
140: e3 e0 ldi r30, 0x03 ; 3
142: f0 e0 ldi r31, 0x00 ; 0
144: d2 9a sbi 0x1a, 2 ; 26
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
146: cf 01 movw r24, r30
148: 01 97 sbiw r24, 0x01 ; 1
14a: f1 f7 brne .-4 ; 0x148 <Read_DS18B20+0xc>
14c: cf 01 movw r24, r30
14e: 01 97 sbiw r24, 0x01 ; 1
150: f1 f7 brne .-4 ; 0x14e <Read_DS18B20+0x12>
152: d2 98 cbi 0x1a, 2 ; 26
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
154: cf 01 movw r24, r30
156: 01 97 sbiw r24, 0x01 ; 1
158: f1 f7 brne .-4 ; 0x156 <Read_DS18B20+0x1a>
15a: cf 01 movw r24, r30
15c: 01 97 sbiw r24, 0x01 ; 1
15e: f1 f7 brne .-4 ; 0x15c <Read_DS18B20+0x20>
160: cf 01 movw r24, r30
162: 01 97 sbiw r24, 0x01 ; 1
164: f1 f7 brne .-4 ; 0x162 <Read_DS18B20+0x26>
166: cf 01 movw r24, r30
168: 01 97 sbiw r24, 0x01 ; 1
16a: f1 f7 brne .-4 ; 0x168 <Read_DS18B20+0x2c>
16c: 46 95 lsr r20
16e: ca 99 sbic 0x19, 2 ; 25
170: 40 68 ori r20, 0x80 ; 128
172: 2d e3 ldi r18, 0x3D ; 61
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 86 00 sts 0x0086, r24
Temp_H = Read_DS18B20(); //获得温度的高位
270: 0e 94 9e 00 call 0x13c ; 0x13c <Read_DS18B20>
274: 80 93 8d 00 sts 0x008D, r24
278: 08 95 ret
0000027a <DS18B20_ReadRAM>:
}
// 读取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: cf e8 ldi r28, 0x8F ; 143
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: c8 39 cpi r28, 0x98 ; 152
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 88 00 lds r24, 0x0088
2ba: 0e 94 cc 00 call 0x198 ; 0x198 <Write_DS18B20>
Write_DS18B20(ThrL); //写温度报警下限值
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?