📄 main.lss
字号:
3f6: 48 e9 ldi r20, 0x98 ; 152
3f8: 50 e0 ldi r21, 0x00 ; 0
3fa: 87 d5 rcall .+2830 ; 0xf0a <__udivmodsi4>
3fc: 7b 01 movw r14, r22
3fe: 8c 01 movw r16, r24
buff[1] = pdata/1000000; // BCD码第7位
400: 20 e4 ldi r18, 0x40 ; 64
402: 32 e4 ldi r19, 0x42 ; 66
404: 4f e0 ldi r20, 0x0F ; 15
406: 50 e0 ldi r21, 0x00 ; 0
408: 80 d5 rcall .+2816 ; 0xf0a <__udivmodsi4>
40a: 29 83 std Y+1, r18 ; 0x01
pdata %= 1000000;
40c: c8 01 movw r24, r16
40e: b7 01 movw r22, r14
410: 20 e4 ldi r18, 0x40 ; 64
412: 32 e4 ldi r19, 0x42 ; 66
414: 4f e0 ldi r20, 0x0F ; 15
416: 50 e0 ldi r21, 0x00 ; 0
418: 78 d5 rcall .+2800 ; 0xf0a <__udivmodsi4>
41a: 7b 01 movw r14, r22
41c: 8c 01 movw r16, r24
buff[2] = pdata/100000; // BCD码第6位
41e: 20 ea ldi r18, 0xA0 ; 160
420: 36 e8 ldi r19, 0x86 ; 134
422: 41 e0 ldi r20, 0x01 ; 1
424: 50 e0 ldi r21, 0x00 ; 0
426: 71 d5 rcall .+2786 ; 0xf0a <__udivmodsi4>
428: 2a 83 std Y+2, r18 ; 0x02
pdata %= 100000;
42a: c8 01 movw r24, r16
42c: b7 01 movw r22, r14
42e: 20 ea ldi r18, 0xA0 ; 160
430: 36 e8 ldi r19, 0x86 ; 134
432: 41 e0 ldi r20, 0x01 ; 1
434: 50 e0 ldi r21, 0x00 ; 0
436: 69 d5 rcall .+2770 ; 0xf0a <__udivmodsi4>
438: 7b 01 movw r14, r22
43a: 8c 01 movw r16, r24
buff[3] = pdata/10000; // BCD码第5位
43c: 20 e1 ldi r18, 0x10 ; 16
43e: 37 e2 ldi r19, 0x27 ; 39
440: 40 e0 ldi r20, 0x00 ; 0
442: 50 e0 ldi r21, 0x00 ; 0
444: 62 d5 rcall .+2756 ; 0xf0a <__udivmodsi4>
446: 2b 83 std Y+3, r18 ; 0x03
pdata %= 10000;
448: c8 01 movw r24, r16
44a: b7 01 movw r22, r14
44c: 20 e1 ldi r18, 0x10 ; 16
44e: 37 e2 ldi r19, 0x27 ; 39
450: 40 e0 ldi r20, 0x00 ; 0
452: 50 e0 ldi r21, 0x00 ; 0
454: 5a d5 rcall .+2740 ; 0xf0a <__udivmodsi4>
456: 7b 01 movw r14, r22
458: 8c 01 movw r16, r24
buff[4] = pdata/1000; // BCD码第4位
45a: 28 ee ldi r18, 0xE8 ; 232
45c: 33 e0 ldi r19, 0x03 ; 3
45e: 40 e0 ldi r20, 0x00 ; 0
460: 50 e0 ldi r21, 0x00 ; 0
462: 53 d5 rcall .+2726 ; 0xf0a <__udivmodsi4>
464: 2c 83 std Y+4, r18 ; 0x04
pdata %= 1000;
466: c8 01 movw r24, r16
468: b7 01 movw r22, r14
46a: 28 ee ldi r18, 0xE8 ; 232
46c: 33 e0 ldi r19, 0x03 ; 3
46e: 40 e0 ldi r20, 0x00 ; 0
470: 50 e0 ldi r21, 0x00 ; 0
472: 4b d5 rcall .+2710 ; 0xf0a <__udivmodsi4>
474: 7b 01 movw r14, r22
476: 8c 01 movw r16, r24
buff[5] = pdata/100; // BCD码第3位
478: 24 e6 ldi r18, 0x64 ; 100
47a: 30 e0 ldi r19, 0x00 ; 0
47c: 40 e0 ldi r20, 0x00 ; 0
47e: 50 e0 ldi r21, 0x00 ; 0
480: 44 d5 rcall .+2696 ; 0xf0a <__udivmodsi4>
482: 2d 83 std Y+5, r18 ; 0x05
pdata %= 100;
484: c8 01 movw r24, r16
486: b7 01 movw r22, r14
488: 24 e6 ldi r18, 0x64 ; 100
48a: 30 e0 ldi r19, 0x00 ; 0
48c: 40 e0 ldi r20, 0x00 ; 0
48e: 50 e0 ldi r21, 0x00 ; 0
490: 3c d5 rcall .+2680 ; 0xf0a <__udivmodsi4>
492: 7b 01 movw r14, r22
494: 8c 01 movw r16, r24
buff[6] = pdata/10; // BCD码第2位
496: 2a e0 ldi r18, 0x0A ; 10
498: 30 e0 ldi r19, 0x00 ; 0
49a: 40 e0 ldi r20, 0x00 ; 0
49c: 50 e0 ldi r21, 0x00 ; 0
49e: 35 d5 rcall .+2666 ; 0xf0a <__udivmodsi4>
4a0: 2e 83 std Y+6, r18 ; 0x06
pdata %= 10;
buff[7] = pdata; // BCD码第1位
4a2: c8 01 movw r24, r16
4a4: b7 01 movw r22, r14
4a6: 2a e0 ldi r18, 0x0A ; 10
4a8: 30 e0 ldi r19, 0x00 ; 0
4aa: 40 e0 ldi r20, 0x00 ; 0
4ac: 50 e0 ldi r21, 0x00 ; 0
4ae: 2d d5 rcall .+2650 ; 0xf0a <__udivmodsi4>
4b0: 6f 83 std Y+7, r22 ; 0x07
4b2: 81 e0 ldi r24, 0x01 ; 1
4b4: 90 e0 ldi r25, 0x00 ; 0
4b6: 02 c0 rjmp .+4 ; 0x4bc <htobcd8+0x102>
4b8: 80 e0 ldi r24, 0x00 ; 0
4ba: 90 e0 ldi r25, 0x00 ; 0
4bc: df 91 pop r29
4be: cf 91 pop r28
4c0: 1f 91 pop r17
4c2: 0f 91 pop r16
4c4: ff 90 pop r15
4c6: ef 90 pop r14
4c8: 08 95 ret
000004ca <htobcd5>:
}
return 1;
}
// buff: BCD的数据指针,指向8单元的数组
// pdata: 数据最大99999
// 转换正确返回: 1
u8_t htobcd5(u8_t *buff, u32_t pdata) {
4ca: ef 92 push r14
4cc: ff 92 push r15
4ce: 0f 93 push r16
4d0: 1f 93 push r17
4d2: cf 93 push r28
4d4: df 93 push r29
4d6: ec 01 movw r28, r24
4d8: 7a 01 movw r14, r20
4da: 8b 01 movw r16, r22
if (pdata > 99999) {
4dc: 40 3a cpi r20, 0xA0 ; 160
4de: 86 e8 ldi r24, 0x86 ; 134
4e0: 58 07 cpc r21, r24
4e2: 81 e0 ldi r24, 0x01 ; 1
4e4: 68 07 cpc r22, r24
4e6: 80 e0 ldi r24, 0x00 ; 0
4e8: 78 07 cpc r23, r24
4ea: 08 f0 brcs .+2 ; 0x4ee <htobcd5+0x24>
4ec: 40 c0 rjmp .+128 ; 0x56e <htobcd5+0xa4>
return 0;
}
else {
buff[0] = pdata/10000; // BCD码第5位
4ee: cb 01 movw r24, r22
4f0: ba 01 movw r22, r20
4f2: 20 e1 ldi r18, 0x10 ; 16
4f4: 37 e2 ldi r19, 0x27 ; 39
4f6: 40 e0 ldi r20, 0x00 ; 0
4f8: 50 e0 ldi r21, 0x00 ; 0
4fa: 07 d5 rcall .+2574 ; 0xf0a <__udivmodsi4>
4fc: 28 83 st Y, r18
pdata %= 10000;
4fe: c8 01 movw r24, r16
500: b7 01 movw r22, r14
502: 20 e1 ldi r18, 0x10 ; 16
504: 37 e2 ldi r19, 0x27 ; 39
506: 40 e0 ldi r20, 0x00 ; 0
508: 50 e0 ldi r21, 0x00 ; 0
50a: ff d4 rcall .+2558 ; 0xf0a <__udivmodsi4>
50c: 7b 01 movw r14, r22
50e: 8c 01 movw r16, r24
buff[1] = pdata/1000; // BCD码第4位
510: 28 ee ldi r18, 0xE8 ; 232
512: 33 e0 ldi r19, 0x03 ; 3
514: 40 e0 ldi r20, 0x00 ; 0
516: 50 e0 ldi r21, 0x00 ; 0
518: f8 d4 rcall .+2544 ; 0xf0a <__udivmodsi4>
51a: 29 83 std Y+1, r18 ; 0x01
pdata %= 1000;
51c: c8 01 movw r24, r16
51e: b7 01 movw r22, r14
520: 28 ee ldi r18, 0xE8 ; 232
522: 33 e0 ldi r19, 0x03 ; 3
524: 40 e0 ldi r20, 0x00 ; 0
526: 50 e0 ldi r21, 0x00 ; 0
528: f0 d4 rcall .+2528 ; 0xf0a <__udivmodsi4>
52a: 7b 01 movw r14, r22
52c: 8c 01 movw r16, r24
buff[2] = pdata/100; // BCD码第3位
52e: 24 e6 ldi r18, 0x64 ; 100
530: 30 e0 ldi r19, 0x00 ; 0
532: 40 e0 ldi r20, 0x00 ; 0
534: 50 e0 ldi r21, 0x00 ; 0
536: e9 d4 rcall .+2514 ; 0xf0a <__udivmodsi4>
538: 2a 83 std Y+2, r18 ; 0x02
pdata %= 100;
53a: c8 01 movw r24, r16
53c: b7 01 movw r22, r14
53e: 24 e6 ldi r18, 0x64 ; 100
540: 30 e0 ldi r19, 0x00 ; 0
542: 40 e0 ldi r20, 0x00 ; 0
544: 50 e0 ldi r21, 0x00 ; 0
546: e1 d4 rcall .+2498 ; 0xf0a <__udivmodsi4>
548: 7b 01 movw r14, r22
54a: 8c 01 movw r16, r24
buff[3] = pdata/10; // BCD码第2位
54c: 2a e0 ldi r18, 0x0A ; 10
54e: 30 e0 ldi r19, 0x00 ; 0
550: 40 e0 ldi r20, 0x00 ; 0
552: 50 e0 ldi r21, 0x00 ; 0
554: da d4 rcall .+2484 ; 0xf0a <__udivmodsi4>
556: 2b 83 std Y+3, r18 ; 0x03
pdata %= 10;
buff[4] = pdata; // BCD码第1位
558: c8 01 movw r24, r16
55a: b7 01 movw r22, r14
55c: 2a e0 ldi r18, 0x0A ; 10
55e: 30 e0 ldi r19, 0x00 ; 0
560: 40 e0 ldi r20, 0x00 ; 0
562: 50 e0 ldi r21, 0x00 ; 0
564: d2 d4 rcall .+2468 ; 0xf0a <__udivmodsi4>
566: 6c 83 std Y+4, r22 ; 0x04
568: 81 e0 ldi r24, 0x01 ; 1
56a: 90 e0 ldi r25, 0x00 ; 0
56c: 02 c0 rjmp .+4 ; 0x572 <htobcd5+0xa8>
56e: 80 e0 ldi r24, 0x00 ; 0
570: 90 e0 ldi r25, 0x00 ; 0
572: df 91 pop r29
574: cf 91 pop r28
576: 1f 91 pop r17
578: 0f 91 pop r16
57a: ff 90 pop r15
57c: ef 90 pop r14
57e: 08 95 ret
00000580 <checksum>:
#include "cc.h"
u8_t checksum(u8_t *mbuf, u8_t len){
580: fc 01 movw r30, r24
u8_t sum8;
u16_t sum16, tmp;
for (sum16 = 0; len > 0; len--){
582: 66 23 and r22, r22
584: 91 f0 breq .+36 ; 0x5aa <checksum+0x2a>
586: 40 e0 ldi r20, 0x00 ; 0
588: 50 e0 ldi r21, 0x00 ; 0
sum16 += (u16_t)*mbuf++;
58a: 81 91 ld r24, Z+
58c: 48 0f add r20, r24
58e: 51 1d adc r21, r1
590: 61 50 subi r22, 0x01 ; 1
592: d9 f7 brne .-10 ; 0x58a <checksum+0xa>
594: 25 2f mov r18, r21
596: 33 27 eor r19, r19
598: 24 0f add r18, r20
59a: 31 1d adc r19, r1
59c: 83 2f mov r24, r19
59e: 99 27 eor r25, r25
5a0: 82 0f add r24, r18
5a2: 91 1d adc r25, r1
5a4: 80 95 com r24
5a6: 99 27 eor r25, r25
}
// First: proccess CY
tmp = (sum16 >> 8) & 0x00ff;
sum16 = (sum16 & 0x00ff) + tmp;
// Second: since CY may be happend , proccess CY again
tmp = (sum16 >> 8) & 0x00ff;
sum16 = (sum16 & 0x00ff) + tmp;
// if len <= 0xff, CY must be not happend, reassuring to get checksum
sum8 = (u8_t)sum16;
return ~sum8;
}
5a8: 08 95 ret
5aa: 8f ef ldi r24, 0xFF ; 255
5ac: 90 e0 ldi r25, 0x00 ; 0
5ae: 08 95 ret
000005b0 <proc_calculate>:
// =========================================================================
void proc_calculate(void) {
5b0: ef 92 push r14
5b2: ff 92 push r15
5b4: 0f 93 push r16
5b6: 1f 93 push r17
u32_t tmp1, tmp2, tmp3;
if ((flag0 & _BV(FLAG0_T1)) == 0) {
5b8: 80 91 07 01 lds r24, 0x0107
5bc: 81 ff sbrs r24, 1
5be: c3 c0 rjmp .+390 ; 0x746 <proc_calculate+0x196>
return; // 没到1秒,等待采样
}
else {
flag0 &= ~_BV(FLAG0_T1); // 清标志
5c0: 80 91 07 01 lds r24, 0x0107
5c4: 8d 7f andi r24, 0xFD ; 253
5c6: 80 93 07 01 sts 0x0107, r24
}
// 警告:类型不匹配的计算将导致意外的结果!
// 计算采样显示电压(伏)
tmp1 = (u32_t)sample_i;
5ca: 60 91 02 01 lds r22, 0x0102
5ce: 70 91 03 01 lds r23, 0x0103
tmp1 *= C_DIS_U;
5d2: 88 27 eor r24, r24
5d4: 99 27 eor r25, r25
5d6: c3 d3 rcall .+1926 ; 0xd5e <__floatsisf>
5d8: 27 e4 ldi r18, 0x47 ; 71
5da: 35 e5 ldi r19, 0x55 ; 85
5dc: 40 ed ldi r20, 0xD0 ; 208
5de: 55 e4 ldi r21, 0x45 ; 69
5e0: 35 d4 rcall .+2154 ; 0xe4c <__mulsf3>
5e2: a0 d3 rcall .+1856 ; 0xd24 <__fixsfsi>
tmp1 /= C_SMP_U;
if (tmp1-C_DIS_U*0.1 >= 0){
5e4: 24 e4 ldi r18, 0x44 ; 68
5e6: 30 e2 ldi r19, 0x20 ; 32
5e8: 40 e0 ldi r20, 0x00 ; 0
5ea: 50 e0 ldi r21, 0x00 ; 0
5ec: 8e d4 rcall .+2332 ; 0xf0a <__udivmodsi4>
5ee: 57 fd sbrc r21, 7
5f0: 93 c0 rjmp .+294 ; 0x718 <proc_calculate+0x168>
5f2: ca 01 movw r24, r20
5f4: b9 01 movw r22, r18
5f6: b3 d3 rcall .+1894 ; 0xd5e <__floatsisf>
5f8: 2f e9 ldi r18, 0x9F ; 159
5fa: 3a ea ldi r19, 0xAA ; 170
5fc: 46 e2 ldi r20, 0x26 ; 38
5fe: 54 e4 ldi r21, 0x44 ; 68
600: 4e d3 rcall .+1692 ; 0xc9e <__subsf3>
602: 7b 01 movw r14, r22
604: 8c 01 movw r16, r24
606: 20 e0 ldi r18, 0x00 ; 0
608: 30 e0 ldi r19, 0x00 ; 0
60a: 40 e0 ldi r20, 0x00 ; 0
60c: 50 e0 ldi r21, 0x00 ; 0
60e: b4 d3 rcall .+1896 ; 0xd78 <__gesf2>
610: 87 fd sbrc r24, 7
612: 95 c0 rjmp .+298 ; 0x73e <proc_calculate+0x18e>
tmp1 -= C_DIS_U*0.1;
614: c8 01 movw r24, r16
616: b7 01 movw r22, r14
618: 85 d3 rcall .+1802 ; 0xd24 <__fixsfsi>
61a: 7b 01 movw r14, r22
61c: 8c 01 movw r16, r24
}
else {
tmp1 = 0 ;
}
disbuf.u = tmp1;
61e: e0 92 1c 01 sts 0x011C, r14
622: f0 92 1d 01 sts 0x011D, r15
626: 00 93 1e 01 sts 0x011E, r16
62a: 10 93 1f 01 sts 0x011F, r17
// 测试计算结果
//htobcd5(&bcd_buf[0], disbuf.u);
// 计算采样显示电流(千安)
tmp2 = (u32_t)sample_v;
62e: 60 91 0c 01 lds r22, 0x010C
632: 70 91 0d 01 lds r23, 0x010D
tmp2 *= C_DIS_I;
636: 88 27 eor r24, r24
638: 99 27 eor r25, r25
63a: 91 d3 rcall .+1826 ; 0xd5e <__floatsisf>
63c: 25 e8 ldi r18, 0x85 ; 133
63e: 33 ee ldi r19, 0xE3 ; 227
640: 4a e8 ldi r20, 0x8A ; 138
642: 55 e4 ldi r21, 0x45 ; 69
644: 03 d4 rcall .+2054 ; 0xe4c <__mulsf3>
646: 6e d3 rcall .+1756 ; 0xd24 <__fixsfsi>
tmp2 /= C_SMP_I;
disbuf.i = tmp2;
648: 27 eb ldi r18, 0xB7 ; 183
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -