📄 main.lss
字号:
3f2: 20 e8 ldi r18, 0x80 ; 128
3f4: 36 e9 ldi r19, 0x96 ; 150
3f6: 48 e9 ldi r20, 0x98 ; 152
3f8: 50 e0 ldi r21, 0x00 ; 0
3fa: 56 d4 rcall .+2220 ; 0xca8 <__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: 4f d4 rcall .+2206 ; 0xca8 <__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: 47 d4 rcall .+2190 ; 0xca8 <__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: 40 d4 rcall .+2176 ; 0xca8 <__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: 38 d4 rcall .+2160 ; 0xca8 <__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: 31 d4 rcall .+2146 ; 0xca8 <__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: 29 d4 rcall .+2130 ; 0xca8 <__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: 22 d4 rcall .+2116 ; 0xca8 <__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: 1a d4 rcall .+2100 ; 0xca8 <__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: 13 d4 rcall .+2086 ; 0xca8 <__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: 0b d4 rcall .+2070 ; 0xca8 <__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: 04 d4 rcall .+2056 ; 0xca8 <__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: fc d3 rcall .+2040 ; 0xca8 <__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: d6 d3 rcall .+1964 ; 0xca8 <__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: ce d3 rcall .+1948 ; 0xca8 <__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: c7 d3 rcall .+1934 ; 0xca8 <__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: bf d3 rcall .+1918 ; 0xca8 <__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: b8 d3 rcall .+1904 ; 0xca8 <__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: b0 d3 rcall .+1888 ; 0xca8 <__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: a9 d3 rcall .+1874 ; 0xca8 <__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: a1 d3 rcall .+1858 ; 0xca8 <__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: 99 c0 rjmp .+306 ; 0x6f2 <proc_calculate+0x142>
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_v;
5ca: 60 91 0c 01 lds r22, 0x010C
5ce: 70 91 0d 01 lds r23, 0x010D
5d2: 88 27 eor r24, r24
5d4: 99 27 eor r25, r25
tmp1 *= C_DIS_U;
5d6: 28 e2 ldi r18, 0x28 ; 40
5d8: 33 e2 ldi r19, 0x23 ; 35
5da: 40 e0 ldi r20, 0x00 ; 0
5dc: 50 e0 ldi r21, 0x00 ; 0
5de: 31 d3 rcall .+1634 ; 0xc42 <__mulsi3>
tmp1 /= C_SMP_U;
5e0: 27 ea ldi r18, 0xA7 ; 167
5e2: 30 e2 ldi r19, 0x20 ; 32
5e4: 40 e0 ldi r20, 0x00 ; 0
5e6: 50 e0 ldi r21, 0x00 ; 0
5e8: 5f d3 rcall .+1726 ; 0xca8 <__udivmodsi4>
5ea: 79 01 movw r14, r18
5ec: 8a 01 movw r16, r20
disbuf.u = tmp1;
5ee: 20 93 1c 01 sts 0x011C, r18
5f2: 30 93 1d 01 sts 0x011D, r19
5f6: 40 93 1e 01 sts 0x011E, r20
5fa: 50 93 1f 01 sts 0x011F, r21
// 测试计算结果
//htobcd5(&bcd_buf[0], disbuf.u);
// 计算采样显示电流(千安)
tmp2 = (u32_t)sample_i;
5fe: 60 91 02 01 lds r22, 0x0102
602: 70 91 03 01 lds r23, 0x0103
606: 88 27 eor r24, r24
608: 99 27 eor r25, r25
tmp2 *= C_DIS_I;
60a: 20 e4 ldi r18, 0x40 ; 64
60c: 3f e1 ldi r19, 0x1F ; 31
60e: 40 e0 ldi r20, 0x00 ; 0
610: 50 e0 ldi r21, 0x00 ; 0
612: 17 d3 rcall .+1582 ; 0xc42 <__mulsi3>
tmp2 /= C_SMP_I;
614: 22 e1 ldi r18, 0x12 ; 18
616: 30 e2 ldi r19, 0x20 ; 32
618: 40 e0 ldi r20, 0x00 ; 0
61a: 50 e0 ldi r21, 0x00 ; 0
61c: 45 d3 rcall .+1674 ; 0xca8 <__udivmodsi4>
disbuf.i = tmp2;
61e: 20 93 20 01 sts 0x0120, r18
622: 30 93 21 01 sts 0x0121, r19
626: 40 93 22 01 sts 0x0122, r20
62a: 50 93 23 01 sts 0x0123, r21
// 测试计算结果
//htobcd5(&bcd_buf[0], disbuf.i);
// 计算显示功率(兆瓦)
tmp3 = tmp1;
tmp3 *= tmp2;
62e: c8 01 movw r24, r16
630: b7 01 movw r22, r14
632: 07 d3 rcall .+1550 ; 0xc42 <__mulsi3>
tmp3 /= 1000;
634: 28 ee ldi r18, 0xE8 ; 232
636: 33 e0 ldi r19, 0x03 ; 3
638: 40 e0 ldi r20, 0x00 ; 0
63a: 50 e0 ldi r21, 0x00 ; 0
63c: 35 d3 rcall .+1642 ; 0xca8 <__udivmodsi4>
disbuf.p = tmp3;
63e: 20 93 24 01 sts 0x0124, r18
642: 30 93 25 01 sts 0x0125, r19
646: 40 93 26 01 sts 0x0126, r20
64a: 50 93 27 01 sts 0x0127, r21
// 测试计算结果
//htobcd8(&bcd_buf[5], disbuf.p);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -