📄 main.lss
字号:
92a: 85 bd out 0x25, r24 ; 37
92c: 08 95 ret
0000092e <__vector_9>:
}
//T2比较中断服务程序
//#pragma interrupt_handler timer2_comp_isr:5
//void timer2_comp_isr(void)
SIGNAL(SIG_OUTPUT_COMPARE2)
{
92e: 1f 92 push r1
930: 0f 92 push r0
932: 0f b6 in r0, 0x3f ; 63
934: 0f 92 push r0
936: 11 24 eor r1, r1
938: 8f 93 push r24
count50ms++;
93a: 80 91 26 02 lds r24, 0x0226
93e: 8f 5f subi r24, 0xFF ; 255
940: 80 93 26 02 sts 0x0226, r24
if(count50ms==3)
944: 80 91 26 02 lds r24, 0x0226
948: 83 30 cpi r24, 0x03 ; 3
94a: 09 f0 breq .+2 ; 0x94e <__vector_9+0x20>
94c: 87 c0 rjmp .+270 ; 0xa5c <__vector_9+0x12e>
{
count50ms=0;
94e: 10 92 26 02 sts 0x0226, r1
time100ms=1;
952: 80 91 5b 0a lds r24, 0x0A5B
956: 81 60 ori r24, 0x01 ; 1
958: 80 93 5b 0a sts 0x0A5B, r24
// time100ms_n++;
count500ms++;
95c: 80 91 67 0a lds r24, 0x0A67
960: 8f 5f subi r24, 0xFF ; 255
962: 80 93 67 0a sts 0x0A67, r24
if(count500ms==5)
966: 80 91 67 0a lds r24, 0x0A67
96a: 85 30 cpi r24, 0x05 ; 5
96c: 09 f0 breq .+2 ; 0x970 <__vector_9+0x42>
96e: 76 c0 rjmp .+236 ; 0xa5c <__vector_9+0x12e>
{
time500ms_n++;
970: 80 91 24 02 lds r24, 0x0224
974: 8f 5f subi r24, 0xFF ; 255
976: 80 93 24 02 sts 0x0224, r24
count500ms=0;
97a: 10 92 67 0a sts 0x0A67, r1
time500ms=1;
97e: 80 91 5b 0a lds r24, 0x0A5B
982: 82 60 ori r24, 0x02 ; 2
984: 80 93 5b 0a sts 0x0A5B, r24
count1s++;
988: 80 91 68 0a lds r24, 0x0A68
98c: 8f 5f subi r24, 0xFF ; 255
98e: 80 93 68 0a sts 0x0A68, r24
if(count1s==2)
992: 80 91 68 0a lds r24, 0x0A68
996: 82 30 cpi r24, 0x02 ; 2
998: 09 f0 breq .+2 ; 0x99c <__vector_9+0x6e>
99a: 60 c0 rjmp .+192 ; 0xa5c <__vector_9+0x12e>
{
count1s=0;
99c: 10 92 68 0a sts 0x0A68, r1
time1s=1;
9a0: 80 91 5b 0a lds r24, 0x0A5B
9a4: 84 60 ori r24, 0x04 ; 4
9a6: 80 93 5b 0a sts 0x0A5B, r24
time1s_n++;
9aa: 80 91 23 02 lds r24, 0x0223
9ae: 8f 5f subi r24, 0xFF ; 255
9b0: 80 93 23 02 sts 0x0223, r24
count3s++;
9b4: 80 91 22 02 lds r24, 0x0222
9b8: 8f 5f subi r24, 0xFF ; 255
9ba: 80 93 22 02 sts 0x0222, r24
count30s++;
9be: 80 91 21 02 lds r24, 0x0221
9c2: 8f 5f subi r24, 0xFF ; 255
9c4: 80 93 21 02 sts 0x0221, r24
count1m++;
9c8: 80 91 20 02 lds r24, 0x0220
9cc: 8f 5f subi r24, 0xFF ; 255
9ce: 80 93 20 02 sts 0x0220, r24
if(count3s==3)
9d2: 80 91 22 02 lds r24, 0x0222
9d6: 83 30 cpi r24, 0x03 ; 3
9d8: 39 f4 brne .+14 ; 0x9e8 <__vector_9+0xba>
{
count3s=0;
9da: 10 92 22 02 sts 0x0222, r1
time3s=1;
9de: 80 91 5b 0a lds r24, 0x0A5B
9e2: 88 60 ori r24, 0x08 ; 8
9e4: 80 93 5b 0a sts 0x0A5B, r24
}
if(count30s==30)
9e8: 80 91 21 02 lds r24, 0x0221
9ec: 8e 31 cpi r24, 0x1E ; 30
9ee: 39 f4 brne .+14 ; 0x9fe <__vector_9+0xd0>
{
count30s=0;
9f0: 10 92 21 02 sts 0x0221, r1
time30s=1;
9f4: 80 91 5a 0a lds r24, 0x0A5A
9f8: 80 64 ori r24, 0x40 ; 64
9fa: 80 93 5a 0a sts 0x0A5A, r24
}
if(count1m==60)
9fe: 80 91 20 02 lds r24, 0x0220
a02: 8c 33 cpi r24, 0x3C ; 60
a04: b9 f4 brne .+46 ; 0xa34 <__vector_9+0x106>
{
count1m=0;
a06: 10 92 20 02 sts 0x0220, r1
time1m=1;
a0a: 80 91 5b 0a lds r24, 0x0A5B
a0e: 80 61 ori r24, 0x10 ; 16
a10: 80 93 5b 0a sts 0x0A5B, r24
count1h++;
a14: 80 91 1f 02 lds r24, 0x021F
a18: 8f 5f subi r24, 0xFF ; 255
a1a: 80 93 1f 02 sts 0x021F, r24
if(count1h==60)
a1e: 80 91 1f 02 lds r24, 0x021F
a22: 8c 33 cpi r24, 0x3C ; 60
a24: 39 f4 brne .+14 ; 0xa34 <__vector_9+0x106>
{
count1h=0;
a26: 10 92 1f 02 sts 0x021F, r1
time1h=1;
a2a: 80 91 5b 0a lds r24, 0x0A5B
a2e: 80 62 ori r24, 0x20 ; 32
a30: 80 93 5b 0a sts 0x0A5B, r24
}
}
if(sms_t)//发送短信时,开始计时
a34: 80 91 66 0a lds r24, 0x0A66
a38: 87 ff sbrs r24, 7
a3a: 10 c0 rjmp .+32 ; 0xa5c <__vector_9+0x12e>
{
count_time_out++;
a3c: 80 91 28 02 lds r24, 0x0228
a40: 8f 5f subi r24, 0xFF ; 255
a42: 80 93 28 02 sts 0x0228, r24
if(count_time_out==15)
a46: 80 91 28 02 lds r24, 0x0228
a4a: 8f 30 cpi r24, 0x0F ; 15
a4c: 39 f4 brne .+14 ; 0xa5c <__vector_9+0x12e>
{
count_time_out=0;
a4e: 10 92 28 02 sts 0x0228, r1
timeout=1;
a52: 80 91 66 0a lds r24, 0x0A66
a56: 82 60 ori r24, 0x02 ; 2
a58: 80 93 66 0a sts 0x0A66, r24
a5c: 8f 91 pop r24
a5e: 0f 90 pop r0
a60: 0f be out 0x3f, r0 ; 63
a62: 0f 90 pop r0
a64: 1f 90 pop r1
a66: 18 95 reti
00000a68 <timer>:
}
}
}
}
}
}
//定时器初始化
void timer (void)
{
//timer0_init();
timer2_init();
a68: 0e 94 8b 04 call 0x916 <timer2_init>
a6c: 08 95 ret
00000a6e <AdcConvert>:
uint AdcConvert(uchar adc_input)
{
a6e: ff 92 push r15
a70: 0f 93 push r16
a72: 1f 93 push r17
a74: cf 93 push r28
a76: df 93 push r29
a78: cd b7 in r28, 0x3d ; 61
a7a: de b7 in r29, 0x3e ; 62
a7c: 60 97 sbiw r28, 0x10 ; 16
a7e: 0f b6 in r0, 0x3f ; 63
a80: f8 94 cli
a82: de bf out 0x3e, r29 ; 62
a84: 0f be out 0x3f, r0 ; 63
a86: cd bf out 0x3d, r28 ; 61
uint g_aAdValue[8]; //A/D转换缓冲区
uchar i;
uint ret;
uchar max_id,min_id,max_value,min_value;
ADMUX=(0xc0|adc_input);//内部2.56V参考电压,0通道
a88: 80 6c ori r24, 0xC0 ; 192
a8a: 87 b9 out 0x07, r24 ; 7
ADCSRA|=_BV(ADEN);//使能ADC,单次转换模式
a8c: 37 9a sbi 0x06, 7 ; 6
a8e: 47 e0 ldi r20, 0x07 ; 7
a90: 20 e0 ldi r18, 0x00 ; 0
a92: 30 e0 ldi r19, 0x00 ; 0
//连续转换8次
for(i=0;i<8;i++)
{
ADCSRA|=_BV(ADSC);
a94: 36 9a sbi 0x06, 6 ; 6
can be achieved.
*/
void
_delay_loop_1(uint8_t __count)
{
a96: 8c e3 ldi r24, 0x3C ; 60
__asm__ volatile (
a98: 8a 95 dec r24
a9a: f1 f7 brne .-4 ; 0xa98 <AdcConvert+0x2a>
a9c: 36 9b sbis 0x06, 6 ; 6
a9e: 05 c0 rjmp .+10 ; 0xaaa <AdcConvert+0x3c>
aa0: 8c e3 ldi r24, 0x3C ; 60
aa2: 8a 95 dec r24
aa4: f1 f7 brne .-4 ; 0xaa2 <AdcConvert+0x34>
aa6: 36 99 sbic 0x06, 6 ; 6
aa8: fb cf rjmp .-10 ; 0xaa0 <AdcConvert+0x32>
_delay_loop_1(60);
while(ADCSRA&_BV(ADSC))
_delay_loop_1(60);
ret=ADCL;
aaa: 84 b1 in r24, 0x04 ; 4
aac: 68 2f mov r22, r24
aae: 77 27 eor r23, r23
ret|=(uint)(ADCH<<8);
ab0: 85 b1 in r24, 0x05 ; 5
ab2: 99 27 eor r25, r25
ab4: 98 2f mov r25, r24
ab6: 88 27 eor r24, r24
ab8: 86 2b or r24, r22
aba: 97 2b or r25, r23
g_aAdValue[i]=ret;
abc: 8e 01 movw r16, r28
abe: 0f 5f subi r16, 0xFF ; 255
ac0: 1f 4f sbci r17, 0xFF ; 255
ac2: f9 01 movw r30, r18
ac4: e0 0f add r30, r16
ac6: f1 1f adc r31, r17
ac8: 91 83 std Z+1, r25 ; 0x01
aca: 80 83 st Z, r24
acc: 41 50 subi r20, 0x01 ; 1
ace: 2e 5f subi r18, 0xFE ; 254
ad0: 3f 4f sbci r19, 0xFF ; 255
ad2: 47 ff sbrs r20, 7
ad4: df cf rjmp .-66 ; 0xa94 <AdcConvert+0x26>
}
ret=0;
ad6: 60 e0 ldi r22, 0x00 ; 0
ad8: 70 e0 ldi r23, 0x00 ; 0
ada: 46 e0 ldi r20, 0x06 ; 6
adc: fe 01 movw r30, r28
ade: 33 96 adiw r30, 0x03 ; 3
for(i=1;i<8;i++)
ret+=g_aAdValue[i];
ae0: 81 91 ld r24, Z+
ae2: 91 91 ld r25, Z+
ae4: 68 0f add r22, r24
ae6: 79 1f adc r23, r25
ae8: 41 50 subi r20, 0x01 ; 1
aea: 47 ff sbrs r20, 7
aec: f9 cf rjmp .-14 ; 0xae0 <AdcConvert+0x72>
//找到最大和最小值索引
ret/=7;
aee: cb 01 movw r24, r22
af0: 67 e0 ldi r22, 0x07 ; 7
af2: 70 e0 ldi r23, 0x00 ; 0
af4: 0e 94 c9 1d call 0x3b92 <__udivmodhi4>
max_id=min_id=1;
af8: b1 e0 ldi r27, 0x01 ; 1
afa: fb 2e mov r15, r27
max_value=min_value=0;
afc: a0 e0 ldi r26, 0x00 ; 0
afe: 5a 2f mov r21, r26
for(i=1;i<8;i++)
b00: 4b 2f mov r20, r27
b02: f8 01 movw r30, r16
b04: 32 96 adiw r30, 0x02 ; 2
{
if(g_aAdValue[i]>ret)
b06: 20 81 ld r18, Z
b08: 31 81 ldd r19, Z+1 ; 0x01
b0a: 62 17 cp r22, r18
b0c: 73 07 cpc r23, r19
b0e: 58 f4 brcc .+22 ; 0xb26 <AdcConvert+0xb8>
{
if(g_aAdValue[i]-ret>max_value)
b10: 26 1b sub r18, r22
b12: 37 0b sbc r19, r23
b14: 85 2f mov r24, r21
b16: 99 27 eor r25, r25
b18: 82 17 cp r24, r18
b1a: 93 07 cpc r25, r19
b1c: 88 f4 brcc .+34 ; 0xb40 <AdcConvert+0xd2>
{
max_value=g_aAdValue[i]-ret;
b1e: 50 81 ld r21, Z
b20: 56 1b sub r21, r22
max_id=i;
b22: f4 2e mov r15, r20
b24: 0d c0 rjmp .+26 ; 0xb40 <AdcConvert+0xd2>
}
}
else
{
if(ret-g_aAdValue[i]>min_value)
b26: cb 01 movw r24, r22
b28: 82 1b sub r24, r18
b2a: 93 0b sbc r25, r19
b2c: 9c 01 movw r18, r24
b2e: 8a 2f mov r24, r26
b30: 99 27 eor r25, r25
b32: 82 17 cp r24, r18
b34: 93 07 cpc r25, r19
b36: 20 f4 brcc .+8 ; 0xb40 <AdcConvert+0xd2>
{
min_value=ret-g_aAdValue[i];
b38: 80 81 ld r24, Z
b3a: a6 2f mov r26, r22
b3c: a8 1b sub r26, r24
min_id=i;
b3e: b4 2f mov r27, r20
b40: 4f 5f subi r20, 0xFF ; 255
b42: 32 96 adiw r30, 0x02 ; 2
b44: 48 30 cpi r20, 0x08 ; 8
b46: f8 f2 brcs .-66 ; 0xb06 <AdcConvert+0x98>
}
}
}
//去掉第一个和最大最小值后的平均值
ret=0;
b48: 60 e0 ldi r22, 0x00 ; 0
b4a: 70 e0 ldi r23, 0x00 ; 0
for(i=1;i<8;i++)
b4c: 41 e0 ldi r20, 0x01 ; 1
b4e: f8 01 movw r30, r16
b50: 32 96 adiw r30, 0x02 ; 2
{
if((i!=min_id)&&(i!=max_id))
b52: 4b 17 cp r20, r27
b54: 31 f0 breq .+12 ; 0xb62 <AdcConvert+0xf4>
b56: 4f 15 cp r20, r15
b58: 21 f0 breq .+8 ; 0xb62 <AdcConvert+0xf4>
ret+=g_aAdValue[i];
b5a: 80 81 ld r24, Z
b5c: 91 81 ldd r25, Z+1 ; 0x01
b5e: 68 0f add r22, r24
b60: 79 1f adc r23, r25
b62: 4f 5f subi r20, 0xFF ; 255
b64: 32 96 adiw r30, 0x02 ; 2
b66: 48 30 cpi r20, 0x08 ; 8
b68: a0 f3 brcs .-24 ; 0xb52 <AdcConvert+0xe4>
}
if(min_id!=max_id)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -