📄 main.lss
字号:
void delay_nus(unsigned int n) //N us延时函数
{
6f6: 20 e0 ldi r18, 0x00 ; 0
6f8: 30 e0 ldi r19, 0x00 ; 0
6fa: 03 c0 rjmp .+6 ; 0x702 <delay_nus+0xc>
6fc: 00 00 nop
unsigned int i=0;
for (i=0;i<n;i++)
6fe: 2f 5f subi r18, 0xFF ; 255
700: 3f 4f sbci r19, 0xFF ; 255
702: 28 17 cp r18, r24
704: 39 07 cpc r19, r25
706: d1 f7 brne .-12 ; 0x6fc <delay_nus+0x6>
708: 08 95 ret
0000070a <delay_1ms>:
delay_1us();
}
void delay_1ms(void) //1ms延时函数
{
70a: 08 95 ret
0000070c <delay_nms>:
unsigned int i;
for (i=0;i<1140;i++);
}
void delay_nms(unsigned int n) //N ms延时函数
{
70c: 08 95 ret
0000070e <init_1820>:
/********************************************************
DS18B20初始化
*********************************************************/
void init_1820()
{
70e: a0 9a sbi 0x14, 0 ; 20
SET_DIR_1WIRE; //设置PC2 为输出
SET_OP_1WIRE;
710: a8 9a sbi 0x15, 0 ; 21
CLR_OP_1WIRE;
712: a8 98 cbi 0x15, 0 ; 21
714: 80 e0 ldi r24, 0x00 ; 0
716: 90 e0 ldi r25, 0x00 ; 0
系统时钟:8M
********************************************************/
void delay_1us(void) //1us延时函数
{
asm("nop");
718: 00 00 nop
}
void delay_nus(unsigned int n) //N us延时函数
{
unsigned int i=0;
for (i=0;i<n;i++)
71a: 01 96 adiw r24, 0x01 ; 1
71c: 21 e0 ldi r18, 0x01 ; 1
71e: 80 3e cpi r24, 0xE0 ; 224
720: 92 07 cpc r25, r18
722: d1 f7 brne .-12 ; 0x718 <init_1820+0xa>
SET_DIR_1WIRE; //设置PC2 为输出
SET_OP_1WIRE;
CLR_OP_1WIRE;
delay_nus(480); //480us以上
SET_OP_1WIRE;
724: a8 9a sbi 0x15, 0 ; 21
CLR_DIR_1WIRE;
726: a0 98 cbi 0x14, 0 ; 20
728: 80 e0 ldi r24, 0x00 ; 0
72a: 90 e0 ldi r25, 0x00 ; 0
系统时钟:8M
********************************************************/
void delay_1us(void) //1us延时函数
{
asm("nop");
72c: 00 00 nop
}
void delay_nus(unsigned int n) //N us延时函数
{
unsigned int i=0;
for (i=0;i<n;i++)
72e: 01 96 adiw r24, 0x01 ; 1
730: 84 31 cpi r24, 0x14 ; 20
732: 91 05 cpc r25, r1
734: d9 f7 brne .-10 ; 0x72c <init_1820+0x1e>
delay_nus(480); //480us以上
SET_OP_1WIRE;
CLR_DIR_1WIRE;
delay_nus(20); //15~60us
while(CHECK_IP_1WIRE);
736: 98 99 sbic 0x13, 0 ; 19
738: fe cf rjmp .-4 ; 0x736 <init_1820+0x28>
SET_DIR_1WIRE;
73a: a0 9a sbi 0x14, 0 ; 20
SET_OP_1WIRE;
73c: a8 9a sbi 0x15, 0 ; 21
73e: 80 e0 ldi r24, 0x00 ; 0
740: 90 e0 ldi r25, 0x00 ; 0
系统时钟:8M
********************************************************/
void delay_1us(void) //1us延时函数
{
asm("nop");
742: 00 00 nop
}
void delay_nus(unsigned int n) //N us延时函数
{
unsigned int i=0;
for (i=0;i<n;i++)
744: 01 96 adiw r24, 0x01 ; 1
746: 8c 38 cpi r24, 0x8C ; 140
748: 91 05 cpc r25, r1
74a: d9 f7 brne .-10 ; 0x742 <init_1820+0x34>
74c: 08 95 ret
0000074e <write_1820>:
/********************************************************
向DS18B20写入一个字节
********************************************************/
void write_1820(unsigned char x)
{
74e: 20 e0 ldi r18, 0x00 ; 0
750: 30 e0 ldi r19, 0x00 ; 0
752: 48 2f mov r20, r24
754: 55 27 eor r21, r21
unsigned char m;
for(m=0;m<8;m++)
{
CLR_OP_1WIRE;
756: a8 98 cbi 0x15, 0 ; 21
if(x&(1<<m)) //写数据了,先写低位的!
758: ca 01 movw r24, r20
75a: 02 2e mov r0, r18
75c: 02 c0 rjmp .+4 ; 0x762 <write_1820+0x14>
75e: 95 95 asr r25
760: 87 95 ror r24
762: 0a 94 dec r0
764: e2 f7 brpl .-8 ; 0x75e <write_1820+0x10>
766: 80 ff sbrs r24, 0
768: 02 c0 rjmp .+4 ; 0x76e <write_1820+0x20>
SET_OP_1WIRE;
76a: a8 9a sbi 0x15, 0 ; 21
76c: 01 c0 rjmp .+2 ; 0x770 <write_1820+0x22>
else
{CLR_OP_1WIRE;}
76e: a8 98 cbi 0x15, 0 ; 21
770: 80 e0 ldi r24, 0x00 ; 0
772: 90 e0 ldi r25, 0x00 ; 0
系统时钟:8M
********************************************************/
void delay_1us(void) //1us延时函数
{
asm("nop");
774: 00 00 nop
}
void delay_nus(unsigned int n) //N us延时函数
{
unsigned int i=0;
for (i=0;i<n;i++)
776: 01 96 adiw r24, 0x01 ; 1
778: 88 32 cpi r24, 0x28 ; 40
77a: 91 05 cpc r25, r1
77c: d9 f7 brne .-10 ; 0x774 <write_1820+0x26>
SET_OP_1WIRE;
else
{CLR_OP_1WIRE;}
delay_nus(40); //15~60us
SET_OP_1WIRE;
77e: a8 9a sbi 0x15, 0 ; 21
780: 2f 5f subi r18, 0xFF ; 255
782: 3f 4f sbci r19, 0xFF ; 255
784: 28 30 cpi r18, 0x08 ; 8
786: 31 05 cpc r19, r1
788: 31 f7 brne .-52 ; 0x756 <write_1820+0x8>
}
SET_OP_1WIRE;
78a: a8 9a sbi 0x15, 0 ; 21
78c: 08 95 ret
0000078e <read_1820>:
}
/********************************************************
从DS18B20读出一个字节
********************************************************/
unsigned char read_1820()
{
78e: 40 e0 ldi r20, 0x00 ; 0
790: 20 e0 ldi r18, 0x00 ; 0
792: 30 e0 ldi r19, 0x00 ; 0
794: 61 e0 ldi r22, 0x01 ; 1
796: 70 e0 ldi r23, 0x00 ; 0
unsigned char temp,k,n;
temp=0;
for(n=0;n<8;n++)
{
CLR_OP_1WIRE;
798: a8 98 cbi 0x15, 0 ; 21
SET_OP_1WIRE;
79a: a8 9a sbi 0x15, 0 ; 21
CLR_DIR_1WIRE;
79c: a0 98 cbi 0x14, 0 ; 20
k=(CHECK_IP_1WIRE); //读数据,从低位开始
if(k)
79e: 98 9b sbis 0x13, 0 ; 19
7a0: 09 c0 rjmp .+18 ; 0x7b4 <read_1820+0x26>
temp|=(1<<n);
7a2: cb 01 movw r24, r22
7a4: 02 2e mov r0, r18
7a6: 02 c0 rjmp .+4 ; 0x7ac <read_1820+0x1e>
7a8: 88 0f add r24, r24
7aa: 99 1f adc r25, r25
7ac: 0a 94 dec r0
7ae: e2 f7 brpl .-8 ; 0x7a8 <read_1820+0x1a>
7b0: 48 2b or r20, r24
7b2: 09 c0 rjmp .+18 ; 0x7c6 <read_1820+0x38>
else
temp&=~(1<<n);
7b4: cb 01 movw r24, r22
7b6: 02 2e mov r0, r18
7b8: 02 c0 rjmp .+4 ; 0x7be <read_1820+0x30>
7ba: 88 0f add r24, r24
7bc: 99 1f adc r25, r25
7be: 0a 94 dec r0
7c0: e2 f7 brpl .-8 ; 0x7ba <read_1820+0x2c>
7c2: 80 95 com r24
7c4: 48 23 and r20, r24
7c6: 80 e0 ldi r24, 0x00 ; 0
7c8: 90 e0 ldi r25, 0x00 ; 0
系统时钟:8M
********************************************************/
void delay_1us(void) //1us延时函数
{
asm("nop");
7ca: 00 00 nop
}
void delay_nus(unsigned int n) //N us延时函数
{
unsigned int i=0;
for (i=0;i<n;i++)
7cc: 01 96 adiw r24, 0x01 ; 1
7ce: 82 33 cpi r24, 0x32 ; 50
7d0: 91 05 cpc r25, r1
7d2: d9 f7 brne .-10 ; 0x7ca <read_1820+0x3c>
temp|=(1<<n);
else
temp&=~(1<<n);
delay_nus(50); //60~120us
SET_DIR_1WIRE;
7d4: a0 9a sbi 0x14, 0 ; 20
7d6: 2f 5f subi r18, 0xFF ; 255
7d8: 3f 4f sbci r19, 0xFF ; 255
7da: 28 30 cpi r18, 0x08 ; 8
7dc: 31 05 cpc r19, r1
7de: e1 f6 brne .-72 ; 0x798 <read_1820+0xa>
}
return (temp);
}
7e0: 84 2f mov r24, r20
7e2: 99 27 eor r25, r25
7e4: 08 95 ret
000007e6 <gettemp>:
/********************************************************
读取温度值
返回一个字节
********************************************************/
unsigned char gettemp()
{
7e6: 1f 93 push r17
char temh,teml;
//float temper;
init_1820(); //复位18b20
7e8: 0e 94 87 03 call 0x70e ; 0x70e <init_1820>
write_1820(0xcc); // 发出转换命令
7ec: 8c ec ldi r24, 0xCC ; 204
7ee: 0e 94 a7 03 call 0x74e ; 0x74e <write_1820>
write_1820(0x44);
7f2: 84 e4 ldi r24, 0x44 ; 68
7f4: 0e 94 a7 03 call 0x74e ; 0x74e <write_1820>
// delay_nms(800); //不延时也好使,不知道怎么回事!
init_1820();
7f8: 0e 94 87 03 call 0x70e ; 0x70e <init_1820>
write_1820(0xcc); //发出读命令
7fc: 8c ec ldi r24, 0xCC ; 204
7fe: 0e 94 a7 03 call 0x74e ; 0x74e <write_1820>
write_1820(0xbe);
802: 8e eb ldi r24, 0xBE ; 190
804: 0e 94 a7 03 call 0x74e ; 0x74e <write_1820>
teml=read_1820(); //读数据
808: 0e 94 c7 03 call 0x78e ; 0x78e <read_1820>
80c: 18 2f mov r17, r24
temh=read_1820();
80e: 0e 94 c7 03 call 0x78e ; 0x78e <read_1820>
812: 82 95 swap r24
814: 80 7f andi r24, 0xF0 ; 240
816: 80 77 andi r24, 0x70 ; 112
818: 12 95 swap r17
81a: 1f 70 andi r17, 0x0F ; 15
81c: 81 2b or r24, r17
//temp_int= (( temh << 4 )& 0x70 )|(( teml >> 4 )& 0x0f );
//temper = (teml&0xf)*0.0625;
//temp_point=(unsigned char)temper*100;
return (( temh << 4 )& 0x70 )|(( teml >> 4 )& 0x0f );
}
81e: 99 27 eor r25, r25
820: 1f 91 pop r17
822: 08 95 ret
00000824 <main>:
#include "sound.h"
#include "ds18b20.h"
#include<avr/io.h>
void main()
{
824: 1f 93 push r17
char data;
DDRC|=0x01;
826: a0 9a sbi 0x14, 0 ; 20
data=gettemp(); //DS18B20初始值为85度,先读出来丢掉
828: 0e 94 f3 03 call 0x7e6 ; 0x7e6 <gettemp>
delay_nms(270);
82c: 8e e0 ldi r24, 0x0E ; 14
82e: 91 e0 ldi r25, 0x01 ; 1
830: 0e 94 86 03 call 0x70c ; 0x70c <delay_nms>
init_lcd(); //初始化
834: 0e 94 ec 00 call 0x1d8 ; 0x1d8 <init_lcd>
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
838: 81 e0 ldi r24, 0x01 ; 1
83a: 90 e0 ldi r25, 0x00 ; 0
83c: 01 97 sbiw r24, 0x01 ; 1
83e: f1 f7 brne .-4 ; 0x83c <main+0x18>
_delay_ms(0.0001); //延时
clear_panel(); //清屏
840: 0e 94 b2 01 call 0x364 ; 0x364 <clear_panel>
while (1)
{
data=gettemp(); //读温度
844: 0e 94 f3 03 call 0x7e6 ; 0x7e6 <gettemp>
848: 18 2f mov r17, r24
if(data>=ALARM_TEMP) //如果大于警报温度就报警
84a: 84 31 cpi r24, 0x14 ; 20
84c: 10 f0 brcs .+4 ; 0x852 <main+0x2e>
sound();
84e: 0e 94 71 03 call 0x6e2 ; 0x6e2 <sound>
templetrue=data;
852: 10 93 7c 00 sts 0x007C, r17
disp_lcd();
856: 0e 94 0b 03 call 0x616 ; 0x616 <disp_lcd>
85a: f4 cf rjmp .-24 ; 0x844 <main+0x20>
0000085c <__udivmodqi4>:
85c: 99 1b sub r25, r25
85e: 79 e0 ldi r23, 0x09 ; 9
860: 04 c0 rjmp .+8 ; 0x86a <__udivmodqi4_ep>
00000862 <__udivmodqi4_loop>:
862: 99 1f adc r25, r25
864: 96 17 cp r25, r22
866: 08 f0 brcs .+2 ; 0x86a <__udivmodqi4_ep>
868: 96 1b sub r25, r22
0000086a <__udivmodqi4_ep>:
86a: 88 1f adc r24, r24
86c: 7a 95 dec r23
86e: c9 f7 brne .-14 ; 0x862 <__udivmodqi4_loop>
870: 80 95 com r24
872: 08 95 ret
00000874 <__divmodhi4>:
874: 97 fb bst r25, 7
876: 09 2e mov r0, r25
878: 07 26 eor r0, r23
87a: 0a d0 rcall .+20 ; 0x890 <__divmodhi4_neg1>
87c: 77 fd sbrc r23, 7
87e: 04 d0 rcall .+8 ; 0x888 <__divmodhi4_neg2>
880: 0c d0 rcall .+24 ; 0x89a <__udivmodhi4>
882: 06 d0 rcall .+12 ; 0x890 <__divmodhi4_neg1>
884: 00 20 and r0, r0
886: 1a f4 brpl .+6 ; 0x88e <__divmodhi4_exit>
00000888 <__divmodhi4_neg2>:
888: 70 95 com r23
88a: 61 95 neg r22
88c: 7f 4f sbci r23, 0xFF ; 255
0000088e <__divmodhi4_exit>:
88e: 08 95 ret
00000890 <__divmodhi4_neg1>:
890: f6 f7 brtc .-4 ; 0x88e <__divmodhi4_exit>
892: 90 95 com r25
894: 81 95 neg r24
896: 9f 4f sbci r25, 0xFF ; 255
898: 08 95 ret
0000089a <__udivmodhi4>:
89a: aa 1b sub r26, r26
89c: bb 1b sub r27, r27
89e: 51 e1 ldi r21, 0x11 ; 17
8a0: 07 c0 rjmp .+14 ; 0x8b0 <__udivmodhi4_ep>
000008a2 <__udivmodhi4_loop>:
8a2: aa 1f adc r26, r26
8a4: bb 1f adc r27, r27
8a6: a6 17 cp r26, r22
8a8: b7 07 cpc r27, r23
8aa: 10 f0 brcs .+4 ; 0x8b0 <__udivmodhi4_ep>
8ac: a6 1b sub r26, r22
8ae: b7 0b sbc r27, r23
000008b0 <__udivmodhi4_ep>:
8b0: 88 1f adc r24, r24
8b2: 99 1f adc r25, r25
8b4: 5a 95 dec r21
8b6: a9 f7 brne .-22 ; 0x8a2 <__udivmodhi4_loop>
8b8: 80 95 com r24
8ba: 90 95 com r25
8bc: bc 01 movw r22, r24
8be: cd 01 movw r24, r26
8c0: 08 95 ret
000008c2 <_exit>:
8c2: ff cf rjmp .-2 ; 0x8c2 <_exit>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -