📄 main.lss
字号:
0000011c <WriteOneChar>:
/**********************************************************/
/* */
/* 写一个字节 */
/* */
/**********************************************************/
void WriteOneChar(unsigned char dat)
{
11c: 1f 93 push r17
11e: cf 93 push r28
120: c8 2f mov r28, r24
unsigned char i = 0;
for (i = 8; i > 0; i--)
122: 18 e0 ldi r17, 0x08 ; 8
{
PORTD&=~_BV(DQ);
124: 93 98 cbi 0x12, 3 ; 18
if(dat&0x01)
126: c0 ff sbrs r28, 0
128: 02 c0 rjmp .+4 ; 0x12e
PORTD|=_BV(DQ); //写"1"
12a: 93 9a sbi 0x12, 3 ; 18
12c: 01 c0 rjmp .+2 ; 0x130
else
PORTD&=~_BV(DQ); //写"0"
12e: 93 98 cbi 0x12, 3 ; 18
Delay(70);
130: 86 e4 ldi r24, 0x46 ; 70
132: 90 e0 ldi r25, 0x00 ; 0
134: 9c df rcall .-200 ; 0x6e
PORTD|=_BV(DQ);
136: 93 9a sbi 0x12, 3 ; 18
dat>>=1;
138: c6 95 lsr r28
13a: 11 50 subi r17, 0x01 ; 1
13c: 99 f7 brne .-26 ; 0x124
13e: cf 91 pop r28
140: 1f 91 pop r17
142: 08 95 ret
00000144 <Read_Temperature>:
}
}
/*********************************************************/
/* */
/* 读取温度 */
/* */
/*********************************************************/
void Read_Temperature(void)
{
144: cf 93 push r28
Init_DS18B20();
146: b6 df rcall .-148 ; 0xb4
if(presence==1)
148: c0 91 84 00 lds r28, 0x0084
14c: c1 30 cpi r28, 0x01 ; 1
14e: 21 f4 brne .+8 ; 0x158
{ beep();flash=1;}
150: 93 df rcall .-218 ; 0x78
152: c0 93 83 00 sts 0x0083, r28
156: 11 c0 rjmp .+34 ; 0x17a
else
{
flash=0;
158: 10 92 83 00 sts 0x0083, r1
WriteOneChar(0xCC); // 跳过读序号列号的操作
15c: 8c ec ldi r24, 0xCC ; 204
15e: de df rcall .-68 ; 0x11c
WriteOneChar(0x44); // 启动温度转换
160: 84 e4 ldi r24, 0x44 ; 68
162: dc df rcall .-72 ; 0x11c
Init_DS18B20();
164: a7 df rcall .-178 ; 0xb4
WriteOneChar(0xCC); //跳过读序号列号的操作
166: 8c ec ldi r24, 0xCC ; 204
168: d9 df rcall .-78 ; 0x11c
WriteOneChar(0xBE); //读取温度寄存器
16a: 8e eb ldi r24, 0xBE ; 190
16c: d7 df rcall .-82 ; 0x11c
temp_data[0] = ReadOneChar(); //温度低8位
16e: c0 df rcall .-128 ; 0xf0
170: 80 93 81 00 sts 0x0081, r24
temp_data[1] = ReadOneChar(); //温度高8位
174: bd df rcall .-134 ; 0xf0
176: 80 93 82 00 sts 0x0082, r24
17a: cf 91 pop r28
17c: 08 95 ret
0000017e <Disp_Temperature>:
}
}
/*********************************************************/
/* */
/* 数据处理与温度显示 */
/* */
/*********************************************************/
void Disp_Temperature(void)
{
display[4]=temp_data[0]&0x0f;
17e: 90 91 81 00 lds r25, 0x0081
182: 89 2f mov r24, r25
184: 8f 70 andi r24, 0x0F ; 15
display[0]=ditab[display[4]]; //查表得小数位的值
186: e8 2f mov r30, r24
188: ff 27 eor r31, r31
18a: e0 5a subi r30, 0xA0 ; 160
18c: ff 4f sbci r31, 0xFF ; 255
18e: 80 81 ld r24, Z
190: 80 93 7c 00 sts 0x007C, r24
display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);
194: 29 2f mov r18, r25
196: 33 27 eor r19, r19
198: 44 e0 ldi r20, 0x04 ; 4
19a: 36 95 lsr r19
19c: 27 95 ror r18
19e: 4a 95 dec r20
1a0: e1 f7 brne .-8 ; 0x19a
1a2: 80 91 82 00 lds r24, 0x0082
1a6: 99 27 eor r25, r25
1a8: 8f 70 andi r24, 0x0F ; 15
1aa: 90 70 andi r25, 0x00 ; 0
1ac: 34 e0 ldi r19, 0x04 ; 4
1ae: 88 0f add r24, r24
1b0: 99 1f adc r25, r25
1b2: 3a 95 dec r19
1b4: e1 f7 brne .-8 ; 0x1ae
1b6: 28 2b or r18, r24
1b8: 20 93 80 00 sts 0x0080, r18
display[3]=display[4]/100;
1bc: 82 2f mov r24, r18
1be: 64 e6 ldi r22, 0x64 ; 100
1c0: 6e d0 rcall .+220 ; 0x29e
1c2: 38 2f mov r19, r24
1c4: 80 93 7f 00 sts 0x007F, r24
display[1]=display[4]%100;
1c8: 82 2f mov r24, r18
1ca: 69 d0 rcall .+210 ; 0x29e
1cc: 29 2f mov r18, r25
display[2]=display[1]/10;
1ce: 4a e0 ldi r20, 0x0A ; 10
1d0: 89 2f mov r24, r25
1d2: 64 2f mov r22, r20
1d4: 64 d0 rcall .+200 ; 0x29e
1d6: 58 2f mov r21, r24
1d8: 80 93 7e 00 sts 0x007E, r24
display[1]=display[1]%10;
1dc: 82 2f mov r24, r18
1de: 5f d0 rcall .+190 ; 0x29e
1e0: 90 93 7d 00 sts 0x007D, r25
if(!display[3]) //高位为0,不显示
1e4: 33 23 and r19, r19
1e6: 31 f4 brne .+12 ; 0x1f4
{
display[3]=0x0a;
1e8: 40 93 7f 00 sts 0x007F, r20
if(!display[2]) //次高位为0,不显示
1ec: 55 23 and r21, r21
1ee: 11 f4 brne .+4 ; 0x1f4
display[2]=0x0a;
1f0: 40 93 7e 00 sts 0x007E, r20
}
PORTA = 0xc6; //显示 C
1f4: 86 ec ldi r24, 0xC6 ; 198
1f6: 8b bb out 0x1b, r24 ; 27
PORTC = 0x7f;
1f8: 8f e7 ldi r24, 0x7F ; 127
1fa: 85 bb out 0x15, r24 ; 21
delay_nms(1);
1fc: 81 e0 ldi r24, 0x01 ; 1
1fe: 90 e0 ldi r25, 0x00 ; 0
200: 2b df rcall .-426 ; 0x58
PORTA = 0x9c; //显示 °
202: 8c e9 ldi r24, 0x9C ; 156
204: 8b bb out 0x1b, r24 ; 27
PORTC = 0xbf;
206: 8f eb ldi r24, 0xBF ; 191
208: 85 bb out 0x15, r24 ; 21
delay_nms(1);
20a: 81 e0 ldi r24, 0x01 ; 1
20c: 90 e0 ldi r25, 0x00 ; 0
20e: 24 df rcall .-440 ; 0x58
PORTA =LEDData[display[0]]; //显示小数位
210: 80 91 7c 00 lds r24, 0x007C
214: e8 2f mov r30, r24
216: ff 27 eor r31, r31
218: e0 59 subi r30, 0x90 ; 144
21a: ff 4f sbci r31, 0xFF ; 255
21c: 80 81 ld r24, Z
21e: 8b bb out 0x1b, r24 ; 27
PORTC = 0xdf;
220: 8f ed ldi r24, 0xDF ; 223
222: 85 bb out 0x15, r24 ; 21
delay_nms(1);
224: 81 e0 ldi r24, 0x01 ; 1
226: 90 e0 ldi r25, 0x00 ; 0
228: 17 df rcall .-466 ; 0x58
PORTA =LEDData[display[1]]; //显示个位
22a: 80 91 7d 00 lds r24, 0x007D
22e: e8 2f mov r30, r24
230: ff 27 eor r31, r31
232: e0 59 subi r30, 0x90 ; 144
234: ff 4f sbci r31, 0xFF ; 255
236: 80 81 ld r24, Z
238: 8b bb out 0x1b, r24 ; 27
PORTA &=~_BV(PA7); //显示小数点
23a: df 98 cbi 0x1b, 7 ; 27
PORTC = 0xef;
23c: 8f ee ldi r24, 0xEF ; 239
23e: 85 bb out 0x15, r24 ; 21
delay_nms(1);
240: 81 e0 ldi r24, 0x01 ; 1
242: 90 e0 ldi r25, 0x00 ; 0
244: 09 df rcall .-494 ; 0x58
PORTA =LEDData[display[2]]; //显示十位
246: 80 91 7e 00 lds r24, 0x007E
24a: e8 2f mov r30, r24
24c: ff 27 eor r31, r31
24e: e0 59 subi r30, 0x90 ; 144
250: ff 4f sbci r31, 0xFF ; 255
252: 80 81 ld r24, Z
254: 8b bb out 0x1b, r24 ; 27
PORTC = 0xf7;
256: 87 ef ldi r24, 0xF7 ; 247
258: 85 bb out 0x15, r24 ; 21
delay_nms(1);
25a: 81 e0 ldi r24, 0x01 ; 1
25c: 90 e0 ldi r25, 0x00 ; 0
25e: fc de rcall .-520 ; 0x58
PORTA =LEDData[display[3]]; //显示十位
260: 80 91 7f 00 lds r24, 0x007F
264: e8 2f mov r30, r24
266: ff 27 eor r31, r31
268: e0 59 subi r30, 0x90 ; 144
26a: ff 4f sbci r31, 0xFF ; 255
26c: 80 81 ld r24, Z
26e: 8b bb out 0x1b, r24 ; 27
PORTC = 0xfb;
270: 8b ef ldi r24, 0xFB ; 251
272: 85 bb out 0x15, r24 ; 21
delay_nms(1);
274: 81 e0 ldi r24, 0x01 ; 1
276: 90 e0 ldi r25, 0x00 ; 0
278: ef de rcall .-546 ; 0x58
PORTC = 0xff; //关闭显示
27a: 8f ef ldi r24, 0xFF ; 255
27c: 85 bb out 0x15, r24 ; 21
27e: 08 95 ret
00000280 <main>:
}
/********************************************************/
/* */
/* 主函数 */
/* */
/********************************************************/
int main(void)
{
280: cf e5 ldi r28, 0x5F ; 95
282: d2 e0 ldi r29, 0x02 ; 2
284: de bf out 0x3e, r29 ; 62
286: cd bf out 0x3d, r28 ; 61
init_io(); //初始化端口
288: 0b df rcall .-490 ; 0xa0
while(1)
{
Read_Temperature(); //读取温度
28a: 5c df rcall .-328 ; 0x144
if(flash)
28c: 80 91 83 00 lds r24, 0x0083
290: 88 23 and r24, r24
292: 19 f0 breq .+6 ; 0x29a
PORTC=0xff; //DS18B20不正常关闭显示
294: 8f ef ldi r24, 0xFF ; 255
296: 85 bb out 0x15, r24 ; 21
298: f8 cf rjmp .-16 ; 0x28a
else
Disp_Temperature(); //显示温度
29a: 71 df rcall .-286 ; 0x17e
29c: f6 cf rjmp .-20 ; 0x28a
0000029e <__udivmodqi4>:
29e: 99 1b sub r25, r25
2a0: 79 e0 ldi r23, 0x09 ; 9
2a2: 04 c0 rjmp .+8 ; 0x2ac
000002a4 <__udivmodqi4_loop>:
2a4: 99 1f adc r25, r25
2a6: 96 17 cp r25, r22
2a8: 08 f0 brcs .+2 ; 0x2ac
2aa: 96 1b sub r25, r22
000002ac <__udivmodqi4_ep>:
2ac: 88 1f adc r24, r24
2ae: 7a 95 dec r23
2b0: c9 f7 brne .-14 ; 0x2a4
2b2: 80 95 com r24
2b4: 08 95 ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -