📄 main.lss
字号:
3e8: c8 01 movw r24, r16
3ea: b7 01 movw r22, r14
3ec: 20 e8 ldi r18, 0x80 ; 128
3ee: 36 e9 ldi r19, 0x96 ; 150
3f0: 48 e9 ldi r20, 0x98 ; 152
3f2: 50 e0 ldi r21, 0x00 ; 0
3f4: 5a d4 rcall .+2228 ; 0xcaa <__udivmodsi4>
3f6: 7b 01 movw r14, r22
3f8: 8c 01 movw r16, r24
buff[1] = pdata/1000000; // BCD码第7位
3fa: 20 e4 ldi r18, 0x40 ; 64
3fc: 32 e4 ldi r19, 0x42 ; 66
3fe: 4f e0 ldi r20, 0x0F ; 15
400: 50 e0 ldi r21, 0x00 ; 0
402: 53 d4 rcall .+2214 ; 0xcaa <__udivmodsi4>
404: 29 83 std Y+1, r18 ; 0x01
pdata %= 1000000;
406: c8 01 movw r24, r16
408: b7 01 movw r22, r14
40a: 20 e4 ldi r18, 0x40 ; 64
40c: 32 e4 ldi r19, 0x42 ; 66
40e: 4f e0 ldi r20, 0x0F ; 15
410: 50 e0 ldi r21, 0x00 ; 0
412: 4b d4 rcall .+2198 ; 0xcaa <__udivmodsi4>
414: 7b 01 movw r14, r22
416: 8c 01 movw r16, r24
buff[2] = pdata/100000; // BCD码第6位
418: 20 ea ldi r18, 0xA0 ; 160
41a: 36 e8 ldi r19, 0x86 ; 134
41c: 41 e0 ldi r20, 0x01 ; 1
41e: 50 e0 ldi r21, 0x00 ; 0
420: 44 d4 rcall .+2184 ; 0xcaa <__udivmodsi4>
422: 2a 83 std Y+2, r18 ; 0x02
pdata %= 100000;
424: c8 01 movw r24, r16
426: b7 01 movw r22, r14
428: 20 ea ldi r18, 0xA0 ; 160
42a: 36 e8 ldi r19, 0x86 ; 134
42c: 41 e0 ldi r20, 0x01 ; 1
42e: 50 e0 ldi r21, 0x00 ; 0
430: 3c d4 rcall .+2168 ; 0xcaa <__udivmodsi4>
432: 7b 01 movw r14, r22
434: 8c 01 movw r16, r24
buff[3] = pdata/10000; // BCD码第5位
436: 20 e1 ldi r18, 0x10 ; 16
438: 37 e2 ldi r19, 0x27 ; 39
43a: 40 e0 ldi r20, 0x00 ; 0
43c: 50 e0 ldi r21, 0x00 ; 0
43e: 35 d4 rcall .+2154 ; 0xcaa <__udivmodsi4>
440: 2b 83 std Y+3, r18 ; 0x03
pdata %= 10000;
442: c8 01 movw r24, r16
444: b7 01 movw r22, r14
446: 20 e1 ldi r18, 0x10 ; 16
448: 37 e2 ldi r19, 0x27 ; 39
44a: 40 e0 ldi r20, 0x00 ; 0
44c: 50 e0 ldi r21, 0x00 ; 0
44e: 2d d4 rcall .+2138 ; 0xcaa <__udivmodsi4>
450: 7b 01 movw r14, r22
452: 8c 01 movw r16, r24
buff[4] = pdata/1000; // BCD码第4位
454: 28 ee ldi r18, 0xE8 ; 232
456: 33 e0 ldi r19, 0x03 ; 3
458: 40 e0 ldi r20, 0x00 ; 0
45a: 50 e0 ldi r21, 0x00 ; 0
45c: 26 d4 rcall .+2124 ; 0xcaa <__udivmodsi4>
45e: 2c 83 std Y+4, r18 ; 0x04
pdata %= 1000;
460: c8 01 movw r24, r16
462: b7 01 movw r22, r14
464: 28 ee ldi r18, 0xE8 ; 232
466: 33 e0 ldi r19, 0x03 ; 3
468: 40 e0 ldi r20, 0x00 ; 0
46a: 50 e0 ldi r21, 0x00 ; 0
46c: 1e d4 rcall .+2108 ; 0xcaa <__udivmodsi4>
46e: 7b 01 movw r14, r22
470: 8c 01 movw r16, r24
buff[5] = pdata/100; // BCD码第3位
472: 24 e6 ldi r18, 0x64 ; 100
474: 30 e0 ldi r19, 0x00 ; 0
476: 40 e0 ldi r20, 0x00 ; 0
478: 50 e0 ldi r21, 0x00 ; 0
47a: 17 d4 rcall .+2094 ; 0xcaa <__udivmodsi4>
47c: 2d 83 std Y+5, r18 ; 0x05
pdata %= 100;
47e: c8 01 movw r24, r16
480: b7 01 movw r22, r14
482: 24 e6 ldi r18, 0x64 ; 100
484: 30 e0 ldi r19, 0x00 ; 0
486: 40 e0 ldi r20, 0x00 ; 0
488: 50 e0 ldi r21, 0x00 ; 0
48a: 0f d4 rcall .+2078 ; 0xcaa <__udivmodsi4>
48c: 7b 01 movw r14, r22
48e: 8c 01 movw r16, r24
buff[6] = pdata/10; // BCD码第2位
490: 2a e0 ldi r18, 0x0A ; 10
492: 30 e0 ldi r19, 0x00 ; 0
494: 40 e0 ldi r20, 0x00 ; 0
496: 50 e0 ldi r21, 0x00 ; 0
498: 08 d4 rcall .+2064 ; 0xcaa <__udivmodsi4>
49a: 2e 83 std Y+6, r18 ; 0x06
pdata %= 10;
buff[7] = pdata; // BCD码第1位
49c: c8 01 movw r24, r16
49e: b7 01 movw r22, r14
4a0: 2a e0 ldi r18, 0x0A ; 10
4a2: 30 e0 ldi r19, 0x00 ; 0
4a4: 40 e0 ldi r20, 0x00 ; 0
4a6: 50 e0 ldi r21, 0x00 ; 0
4a8: 00 d4 rcall .+2048 ; 0xcaa <__udivmodsi4>
4aa: 6f 83 std Y+7, r22 ; 0x07
4ac: 81 e0 ldi r24, 0x01 ; 1
4ae: 90 e0 ldi r25, 0x00 ; 0
4b0: 02 c0 rjmp .+4 ; 0x4b6 <htobcd8+0x102>
4b2: 80 e0 ldi r24, 0x00 ; 0
4b4: 90 e0 ldi r25, 0x00 ; 0
4b6: df 91 pop r29
4b8: cf 91 pop r28
4ba: 1f 91 pop r17
4bc: 0f 91 pop r16
4be: ff 90 pop r15
4c0: ef 90 pop r14
4c2: 08 95 ret
000004c4 <htobcd5>:
}
return 1;
}
// buff: BCD的数据指针,指向8单元的数组
// pdata: 数据最大99999
// 转换正确返回: 1
u8_t htobcd5(u8_t *buff, u32_t pdata) {
4c4: ef 92 push r14
4c6: ff 92 push r15
4c8: 0f 93 push r16
4ca: 1f 93 push r17
4cc: cf 93 push r28
4ce: df 93 push r29
4d0: ec 01 movw r28, r24
4d2: 7a 01 movw r14, r20
4d4: 8b 01 movw r16, r22
if (pdata > 99999) {
4d6: 40 3a cpi r20, 0xA0 ; 160
4d8: 86 e8 ldi r24, 0x86 ; 134
4da: 58 07 cpc r21, r24
4dc: 81 e0 ldi r24, 0x01 ; 1
4de: 68 07 cpc r22, r24
4e0: 80 e0 ldi r24, 0x00 ; 0
4e2: 78 07 cpc r23, r24
4e4: 08 f0 brcs .+2 ; 0x4e8 <htobcd5+0x24>
4e6: 40 c0 rjmp .+128 ; 0x568 <htobcd5+0xa4>
return 0;
}
else {
buff[0] = pdata/10000; // BCD码第5位
4e8: cb 01 movw r24, r22
4ea: ba 01 movw r22, r20
4ec: 20 e1 ldi r18, 0x10 ; 16
4ee: 37 e2 ldi r19, 0x27 ; 39
4f0: 40 e0 ldi r20, 0x00 ; 0
4f2: 50 e0 ldi r21, 0x00 ; 0
4f4: da d3 rcall .+1972 ; 0xcaa <__udivmodsi4>
4f6: 28 83 st Y, r18
pdata %= 10000;
4f8: c8 01 movw r24, r16
4fa: b7 01 movw r22, r14
4fc: 20 e1 ldi r18, 0x10 ; 16
4fe: 37 e2 ldi r19, 0x27 ; 39
500: 40 e0 ldi r20, 0x00 ; 0
502: 50 e0 ldi r21, 0x00 ; 0
504: d2 d3 rcall .+1956 ; 0xcaa <__udivmodsi4>
506: 7b 01 movw r14, r22
508: 8c 01 movw r16, r24
buff[1] = pdata/1000; // BCD码第4位
50a: 28 ee ldi r18, 0xE8 ; 232
50c: 33 e0 ldi r19, 0x03 ; 3
50e: 40 e0 ldi r20, 0x00 ; 0
510: 50 e0 ldi r21, 0x00 ; 0
512: cb d3 rcall .+1942 ; 0xcaa <__udivmodsi4>
514: 29 83 std Y+1, r18 ; 0x01
pdata %= 1000;
516: c8 01 movw r24, r16
518: b7 01 movw r22, r14
51a: 28 ee ldi r18, 0xE8 ; 232
51c: 33 e0 ldi r19, 0x03 ; 3
51e: 40 e0 ldi r20, 0x00 ; 0
520: 50 e0 ldi r21, 0x00 ; 0
522: c3 d3 rcall .+1926 ; 0xcaa <__udivmodsi4>
524: 7b 01 movw r14, r22
526: 8c 01 movw r16, r24
buff[2] = pdata/100; // BCD码第3位
528: 24 e6 ldi r18, 0x64 ; 100
52a: 30 e0 ldi r19, 0x00 ; 0
52c: 40 e0 ldi r20, 0x00 ; 0
52e: 50 e0 ldi r21, 0x00 ; 0
530: bc d3 rcall .+1912 ; 0xcaa <__udivmodsi4>
532: 2a 83 std Y+2, r18 ; 0x02
pdata %= 100;
534: c8 01 movw r24, r16
536: b7 01 movw r22, r14
538: 24 e6 ldi r18, 0x64 ; 100
53a: 30 e0 ldi r19, 0x00 ; 0
53c: 40 e0 ldi r20, 0x00 ; 0
53e: 50 e0 ldi r21, 0x00 ; 0
540: b4 d3 rcall .+1896 ; 0xcaa <__udivmodsi4>
542: 7b 01 movw r14, r22
544: 8c 01 movw r16, r24
buff[3] = pdata/10; // BCD码第2位
546: 2a e0 ldi r18, 0x0A ; 10
548: 30 e0 ldi r19, 0x00 ; 0
54a: 40 e0 ldi r20, 0x00 ; 0
54c: 50 e0 ldi r21, 0x00 ; 0
54e: ad d3 rcall .+1882 ; 0xcaa <__udivmodsi4>
550: 2b 83 std Y+3, r18 ; 0x03
pdata %= 10;
buff[4] = pdata; // BCD码第1位
552: c8 01 movw r24, r16
554: b7 01 movw r22, r14
556: 2a e0 ldi r18, 0x0A ; 10
558: 30 e0 ldi r19, 0x00 ; 0
55a: 40 e0 ldi r20, 0x00 ; 0
55c: 50 e0 ldi r21, 0x00 ; 0
55e: a5 d3 rcall .+1866 ; 0xcaa <__udivmodsi4>
560: 6c 83 std Y+4, r22 ; 0x04
562: 81 e0 ldi r24, 0x01 ; 1
564: 90 e0 ldi r25, 0x00 ; 0
566: 02 c0 rjmp .+4 ; 0x56c <htobcd5+0xa8>
568: 80 e0 ldi r24, 0x00 ; 0
56a: 90 e0 ldi r25, 0x00 ; 0
56c: df 91 pop r29
56e: cf 91 pop r28
570: 1f 91 pop r17
572: 0f 91 pop r16
574: ff 90 pop r15
576: ef 90 pop r14
578: 08 95 ret
0000057a <checksum>:
#include "cc.h"
u8_t checksum(u8_t *mbuf, u8_t len){
57a: fc 01 movw r30, r24
u8_t sum8;
u16_t sum16, tmp;
for (sum16 = 0; len > 0; len--){
57c: 66 23 and r22, r22
57e: 91 f0 breq .+36 ; 0x5a4 <checksum+0x2a>
580: 40 e0 ldi r20, 0x00 ; 0
582: 50 e0 ldi r21, 0x00 ; 0
sum16 += (u16_t)*mbuf++;
584: 81 91 ld r24, Z+
586: 48 0f add r20, r24
588: 51 1d adc r21, r1
58a: 61 50 subi r22, 0x01 ; 1
58c: d9 f7 brne .-10 ; 0x584 <checksum+0xa>
58e: 25 2f mov r18, r21
590: 33 27 eor r19, r19
592: 24 0f add r18, r20
594: 31 1d adc r19, r1
596: 83 2f mov r24, r19
598: 99 27 eor r25, r25
59a: 82 0f add r24, r18
59c: 91 1d adc r25, r1
59e: 80 95 com r24
5a0: 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;
}
5a2: 08 95 ret
5a4: 8f ef ldi r24, 0xFF ; 255
5a6: 90 e0 ldi r25, 0x00 ; 0
5a8: 08 95 ret
000005aa <proc_calculate>:
// =========================================================================
void proc_calculate(void) {
5aa: ef 92 push r14
5ac: ff 92 push r15
5ae: 0f 93 push r16
5b0: 1f 93 push r17
u32_t tmp1, tmp2, tmp3;
if ((flag0 & _BV(FLAG0_T1)) == 0) {
5b2: 80 91 07 01 lds r24, 0x0107
5b6: 81 ff sbrs r24, 1
5b8: 99 c0 rjmp .+306 ; 0x6ec <proc_calculate+0x142>
return; // 没到1秒,等待采样
}
else {
flag0 &= ~_BV(FLAG0_T1); // 清标志
5ba: 80 91 07 01 lds r24, 0x0107
5be: 8d 7f andi r24, 0xFD ; 253
5c0: 80 93 07 01 sts 0x0107, r24
}
// 警告:类型不匹配的计算将导致意外的结果!
// 计算采样显示电压(伏)
tmp1 = (u32_t)sample_v;
5c4: 60 91 0c 01 lds r22, 0x010C
5c8: 70 91 0d 01 lds r23, 0x010D
5cc: 88 27 eor r24, r24
5ce: 99 27 eor r25, r25
tmp1 *= C_DIS_U;
5d0: 28 e2 ldi r18, 0x28 ; 40
5d2: 33 e2 ldi r19, 0x23 ; 35
5d4: 40 e0 ldi r20, 0x00 ; 0
5d6: 50 e0 ldi r21, 0x00 ; 0
5d8: 35 d3 rcall .+1642 ; 0xc44 <__mulsi3>
tmp1 /= C_SMP_U;
5da: 22 e1 ldi r18, 0x12 ; 18
5dc: 30 e2 ldi r19, 0x20 ; 32
5de: 40 e0 ldi r20, 0x00 ; 0
5e0: 50 e0 ldi r21, 0x00 ; 0
5e2: 63 d3 rcall .+1734 ; 0xcaa <__udivmodsi4>
5e4: 79 01 movw r14, r18
5e6: 8a 01 movw r16, r20
disbuf.u = tmp1;
5e8: 20 93 1c 01 sts 0x011C, r18
5ec: 30 93 1d 01 sts 0x011D, r19
5f0: 40 93 1e 01 sts 0x011E, r20
5f4: 50 93 1f 01 sts 0x011F, r21
// 测试计算结果
//htobcd5(&bcd_buf[0], disbuf.u);
// 计算采样显示电流(千安)
tmp2 = (u32_t)sample_i;
5f8: 60 91 02 01 lds r22, 0x0102
5fc: 70 91 03 01 lds r23, 0x0103
600: 88 27 eor r24, r24
602: 99 27 eor r25, r25
tmp2 *= C_DIS_I;
604: 20 e4 ldi r18, 0x40 ; 64
606: 3f e1 ldi r19, 0x1F ; 31
608: 40 e0 ldi r20, 0x00 ; 0
60a: 50 e0 ldi r21, 0x00 ; 0
60c: 1b d3 rcall .+1590 ; 0xc44 <__mulsi3>
tmp2 /= C_SMP_I;
60e: 22 e1 ldi r18, 0x12 ; 18
610: 30 e2 ldi r19, 0x20 ; 32
612: 40 e0 ldi r20, 0x00 ; 0
614: 50 e0 ldi r21, 0x00 ; 0
616: 49 d3 rcall .+1682 ; 0xcaa <__udivmodsi4>
disbuf.i = tmp2;
618: 20 93 20 01 sts 0x0120, r18
61c: 30 93 21 01 sts 0x0121, r19
620: 40 93 22 01 sts 0x0122, r20
624: 50 93 23 01 sts 0x0123, r21
// 测试计算结果
//htobcd5(&bcd_buf[0], disbuf.i);
// 计算显示功率(兆瓦)
tmp3 = tmp1;
tmp3 *= tmp2;
628: c8 01 movw r24, r16
62a: b7 01 movw r22, r14
62c: 0b d3 rcall .+1558 ; 0xc44 <__mulsi3>
tmp3 /= 1000;
62e: 28 ee ldi r18, 0xE8 ; 232
630: 33 e0 ldi r19, 0x03 ; 3
632: 40 e0 ldi r20, 0x00 ; 0
634: 50 e0 ldi r21, 0x00 ; 0
636: 39 d3 rcall .+1650 ; 0xcaa <__udivmodsi4>
disbuf.p = tmp3;
638: 20 93 24 01 sts 0x0124, r18
63c: 30 93 25 01 sts 0x0125, r19
640: 40 93 26 01 sts 0x0126, r20
644: 50 93 27 01 sts 0x0127, r21
// 测试计算结果
//htobcd8(&bcd_buf[5], disbuf.p);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -