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