1p1s5.lss
来自「cs5460a做功率表用 cs5460a做功率表用 cs5460a做功率表」· LSS 代码 · 共 1,717 行 · 第 1/5 页
LSS
1,717 行
4d0: 81 50 subi r24, 0x01 ; 1
4d2: 87 ff sbrs r24, 7
4d4: fc cf rjmp .-8 ; 0x4ce <HexToBcd+0x6>
while (temp >= 1000){temp -= 1000; pBuf[3]++;}
4d6: 83 e0 ldi r24, 0x03 ; 3
4d8: 68 3e cpi r22, 0xE8 ; 232
4da: 78 07 cpc r23, r24
4dc: 48 f0 brcs .+18 ; 0x4f0 <HexToBcd+0x28>
4de: 83 81 ldd r24, Z+3 ; 0x03
4e0: 68 5e subi r22, 0xE8 ; 232
4e2: 73 40 sbci r23, 0x03 ; 3
4e4: 8f 5f subi r24, 0xFF ; 255
4e6: 93 e0 ldi r25, 0x03 ; 3
4e8: 68 3e cpi r22, 0xE8 ; 232
4ea: 79 07 cpc r23, r25
4ec: c8 f7 brcc .-14 ; 0x4e0 <HexToBcd+0x18>
4ee: 83 83 std Z+3, r24 ; 0x03
while (temp >= 100) {temp -= 100; pBuf[2]++;}
4f0: 64 36 cpi r22, 0x64 ; 100
4f2: 71 05 cpc r23, r1
4f4: 40 f0 brcs .+16 ; 0x506 <HexToBcd+0x3e>
4f6: 82 81 ldd r24, Z+2 ; 0x02
4f8: 64 56 subi r22, 0x64 ; 100
4fa: 70 40 sbci r23, 0x00 ; 0
4fc: 8f 5f subi r24, 0xFF ; 255
4fe: 64 36 cpi r22, 0x64 ; 100
500: 71 05 cpc r23, r1
502: d0 f7 brcc .-12 ; 0x4f8 <HexToBcd+0x30>
504: 82 83 std Z+2, r24 ; 0x02
while (temp >= 10) {temp -= 10; pBuf[1]++;}
506: 6a 30 cpi r22, 0x0A ; 10
508: 71 05 cpc r23, r1
50a: 40 f0 brcs .+16 ; 0x51c <HexToBcd+0x54>
50c: 81 81 ldd r24, Z+1 ; 0x01
50e: 6a 50 subi r22, 0x0A ; 10
510: 70 40 sbci r23, 0x00 ; 0
512: 8f 5f subi r24, 0xFF ; 255
514: 6a 30 cpi r22, 0x0A ; 10
516: 71 05 cpc r23, r1
518: d0 f7 brcc .-12 ; 0x50e <HexToBcd+0x46>
51a: 81 83 std Z+1, r24 ; 0x01
pBuf[0] = temp;
51c: 60 83 st Z, r22
51e: 08 95 ret
00000520 <DealZero>:
}
//---------------------------------
void DealZero(uint8 *pBuf)
{
uint8 i;
for(i=3;i!=0;i--)
520: 23 e0 ldi r18, 0x03 ; 3
522: 3f e2 ldi r19, 0x2F ; 47
524: fc 01 movw r30, r24
526: 33 96 adiw r30, 0x03 ; 3
{
if (pBuf[i] == 0)
528: 80 81 ld r24, Z
52a: 88 23 and r24, r24
52c: 29 f4 brne .+10 ; 0x538 <DealZero+0x18>
{
pBuf[i] = HIDE;
52e: 30 83 st Z, r19
530: 21 50 subi r18, 0x01 ; 1
532: 31 97 sbiw r30, 0x01 ; 1
534: 22 23 and r18, r18
536: c1 f7 brne .-16 ; 0x528 <DealZero+0x8>
538: 08 95 ret
0000053a <DoPot>:
}
else
{
break;
}
}
}
//---------------------------------
void DoPot(uint8 *pBuf,uint32 temp)
{
53a: 1f 93 push r17
53c: cf 93 push r28
53e: df 93 push r29
540: ec 01 movw r28, r24
542: 9a 01 movw r18, r20
544: ab 01 movw r20, r22
uint8 i = 3;
546: 13 e0 ldi r17, 0x03 ; 3
while (temp >= 10000) //小数点处理
{
temp /= 10;
i--;
548: 20 31 cpi r18, 0x10 ; 16
54a: 87 e2 ldi r24, 0x27 ; 39
54c: 38 07 cpc r19, r24
54e: 80 e0 ldi r24, 0x00 ; 0
550: 48 07 cpc r20, r24
552: 80 e0 ldi r24, 0x00 ; 0
554: 58 07 cpc r21, r24
556: 48 f0 brcs .+18 ; 0x56a <DoPot+0x30>
558: ca 01 movw r24, r20
55a: b9 01 movw r22, r18
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: 55 dc rcall .-1878 ; 0xfffffe10 <__eeprom_end+0xff7efe10>
566: 11 50 subi r17, 0x01 ; 1
568: ef cf rjmp .-34 ; 0x548 <DoPot+0xe>
}
HexToBcd(pBuf,temp);
56a: b9 01 movw r22, r18
56c: ce 01 movw r24, r28
56e: ac df rcall .-168 ; 0x4c8 <HexToBcd>
if (i != 0)
570: 11 23 and r17, r17
572: 31 f0 breq .+12 ; 0x580 <DoPot+0x46>
{
pBuf[i] += 10; //添加小数点
574: fe 01 movw r30, r28
576: e1 0f add r30, r17
578: f1 1d adc r31, r1
57a: 80 81 ld r24, Z
57c: 86 5f subi r24, 0xF6 ; 246
57e: 80 83 st Z, r24
580: df 91 pop r29
582: cf 91 pop r28
584: 1f 91 pop r17
586: 08 95 ret
00000588 <DealRms>:
}
}
//----------------------------------
uint16 DealRms(uint8 *pBuf,uint32 Kval)
{
588: ef 92 push r14
58a: ff 92 push r15
58c: 0f 93 push r16
58e: 1f 93 push r17
590: fc 01 movw r30, r24
592: 7a 01 movw r14, r20
594: 8b 01 movw r16, r22
uint16 temp1;
uint32 temp2;
temp1 = (uint16)(*pBuf) << 8;
596: 81 91 ld r24, Z+
598: 99 27 eor r25, r25
59a: 98 2f mov r25, r24
59c: 88 27 eor r24, r24
pBuf++;
temp1 += *pBuf;
59e: 20 81 ld r18, Z
5a0: 82 0f add r24, r18
5a2: 91 1d adc r25, r1
temp2 = temp1 * Kval;
5a4: aa 27 eor r26, r26
5a6: bb 27 eor r27, r27
5a8: bc 01 movw r22, r24
5aa: cd 01 movw r24, r26
5ac: a8 01 movw r20, r16
5ae: 97 01 movw r18, r14
5b0: 10 dc rcall .-2016 ; 0xfffffdd2 <__eeprom_end+0xff7efdd2>
5b2: dc 01 movw r26, r24
5b4: cb 01 movw r24, r22
temp1 = temp2 >> 16;
5b6: cd 01 movw r24, r26
5b8: aa 27 eor r26, r26
5ba: bb 27 eor r27, r27
5bc: 1f 91 pop r17
5be: 0f 91 pop r16
5c0: ff 90 pop r15
5c2: ef 90 pop r14
5c4: 08 95 ret
000005c6 <OSQCreat>:
uint8 OSQQuery(OS_Q *pEvent);
//-----------------------------------------------
OS_Q *OSQCreat(OS_Q *pEvent,uint8 *start,uint8 size) //创建一个消息队列
{
5c6: fc 01 movw r30, r24
pEvent->OSQStart = start;
5c8: 71 83 std Z+1, r23 ; 0x01
5ca: 60 83 st Z, r22
pEvent->OSQEnd = &start[size];
5cc: cb 01 movw r24, r22
5ce: 84 0f add r24, r20
5d0: 91 1d adc r25, r1
5d2: 93 83 std Z+3, r25 ; 0x03
5d4: 82 83 std Z+2, r24 ; 0x02
pEvent->OSQIn = start;
5d6: 75 83 std Z+5, r23 ; 0x05
5d8: 64 83 std Z+4, r22 ; 0x04
pEvent->OSQOut = start;
5da: 77 83 std Z+7, r23 ; 0x07
5dc: 66 83 std Z+6, r22 ; 0x06
pEvent->OSQSize = size;
5de: 40 87 std Z+8, r20 ; 0x08
pEvent->OSQCnt = 0;
5e0: 11 86 std Z+9, r1 ; 0x09
return (pEvent);
}
5e2: cf 01 movw r24, r30
5e4: 08 95 ret
000005e6 <OSQPost>:
//------------------------------------------------
uint8 OSQPost (OS_Q *pEvent,uint8 msg) //向消息队列发送一则消息
{
5e6: cf 93 push r28
5e8: df 93 push r29
5ea: dc 01 movw r26, r24
if (pEvent == (OS_Q *)0) //无效事件
5ec: 89 2b or r24, r25
5ee: 19 f4 brne .+6 ; 0x5f6 <OSQPost+0x10>
{
return (OS_ERR_PEVENT_NULL);
5f0: 85 e0 ldi r24, 0x05 ; 5
5f2: 90 e0 ldi r25, 0x00 ; 0
5f4: 36 c0 rjmp .+108 ; 0x662 <OSQPost+0x7c>
}
OS_CLOSE_INT();
5f6: f8 94 cli
5f8: 80 91 f7 00 lds r24, 0x00F7
5fc: 8f 5f subi r24, 0xFF ; 255
5fe: 80 93 f7 00 sts 0x00F7, r24
if (pEvent->OSQCnt >= pEvent->OSQSize) //时件长度超过所给长度,已满
602: ed 01 movw r28, r26
604: 99 85 ldd r25, Y+9 ; 0x09
606: 88 85 ldd r24, Y+8 ; 0x08
608: 98 17 cp r25, r24
60a: 68 f0 brcs .+26 ; 0x626 <OSQPost+0x40>
{
OS_OPEN_INT();
60c: 80 91 f7 00 lds r24, 0x00F7
610: 81 50 subi r24, 0x01 ; 1
612: 80 93 f7 00 sts 0x00F7, r24
616: 80 91 f7 00 lds r24, 0x00F7
61a: 88 23 and r24, r24
61c: 09 f4 brne .+2 ; 0x620 <OSQPost+0x3a>
61e: 78 94 sei
return (OS_Q_FULL);
620: 82 e0 ldi r24, 0x02 ; 2
622: 90 e0 ldi r25, 0x00 ; 0
624: 1e c0 rjmp .+60 ; 0x662 <OSQPost+0x7c>
}
*pEvent->OSQIn++ = msg; //OSQIn++ = msg
626: ed 01 movw r28, r26
628: ec 81 ldd r30, Y+4 ; 0x04
62a: fd 81 ldd r31, Y+5 ; 0x05
62c: 61 93 st Z+, r22
62e: fd 83 std Y+5, r31 ; 0x05
630: ec 83 std Y+4, r30 ; 0x04
pEvent->OSQCnt++;
632: 89 85 ldd r24, Y+9 ; 0x09
634: 8f 5f subi r24, 0xFF ; 255
636: 89 87 std Y+9, r24 ; 0x09
if (pEvent->OSQIn == pEvent->OSQEnd) //如果已满则重新开始
638: 8a 81 ldd r24, Y+2 ; 0x02
63a: 9b 81 ldd r25, Y+3 ; 0x03
63c: e8 17 cp r30, r24
63e: f9 07 cpc r31, r25
640: 21 f4 brne .+8 ; 0x64a <OSQPost+0x64>
{
pEvent->OSQIn = pEvent->OSQStart;
642: 8d 91 ld r24, X+
644: 9c 91 ld r25, X
646: 9d 83 std Y+5, r25 ; 0x05
648: 8c 83 std Y+4, r24 ; 0x04
}
OS_OPEN_INT();
64a: 80 91 f7 00 lds r24, 0x00F7
64e: 81 50 subi r24, 0x01 ; 1
650: 80 93 f7 00 sts 0x00F7, r24
654: 80 91 f7 00 lds r24, 0x00F7
658: 88 23 and r24, r24
65a: 09 f4 brne .+2 ; 0x65e <OSQPost+0x78>
65c: 78 94 sei
return (OS_Q_OK);
65e: 81 e0 ldi r24, 0x01 ; 1
660: 90 e0 ldi r25, 0x00 ; 0
662: df 91 pop r29
664: cf 91 pop r28
666: 08 95 ret
00000668 <OSQAccept>:
}
//------------------------------------------------
uint8 OSQAccept (OS_Q *pEvent,uint8 * const msg) //从消息队列中取出消息
{
668: cf 93 push r28
66a: df 93 push r29
66c: dc 01 movw r26, r24
66e: eb 01 movw r28, r22
if (pEvent == (OS_Q *)0)
670: 89 2b or r24, r25
672: 19 f4 brne .+6 ; 0x67a <OSQAccept+0x12>
{
return (OS_ERR_PEVENT_NULL);
674: 85 e0 ldi r24, 0x05 ; 5
676: 90 e0 ldi r25, 0x00 ; 0
678: 3b c0 rjmp .+118 ; 0x6f0 <OSQAccept+0x88>
}
OS_CLOSE_INT();
67a: f8 94 cli
67c: 80 91 f7 00 lds r24, 0x00F7
680: 8f 5f subi r24, 0xFF ; 255
682: 80 93 f7 00 sts 0x00F7, r24
if (pEvent->OSQCnt > 0)
686: fd 01 movw r30, r26
688: 81 85 ldd r24, Z+9 ; 0x09
68a: 88 23 and r24, r24
68c: 29 f1 breq .+74 ; 0x6d8 <OSQAccept+0x70>
{
*msg = *pEvent->OSQOut;
68e: 86 81 ldd r24, Z+6 ; 0x06
690: 97 81 ldd r25, Z+7 ; 0x07
692: fc 01 movw r30, r24
694: 80 81 ld r24, Z
696: 88 83 st Y, r24
pEvent->OSQOut++;
698: fd 01 movw r30, r26
69a: 26 81 ldd r18, Z+6 ; 0x06
69c: 37 81 ldd r19, Z+7 ; 0x07
69e: 2f 5f subi r18, 0xFF ; 255
6a0: 3f 4f sbci r19, 0xFF ; 255
6a2: 37 83 std Z+7, r19 ; 0x07
6a4: 26 83 std Z+6, r18 ; 0x06
pEvent->OSQCnt--;
6a6: 81 85 ldd r24, Z+9 ; 0x09
6a8: 81 50 subi r24, 0x01 ; 1
6aa: 81 87 std Z+9, r24 ; 0x09
if (pEvent->OSQOut == pEvent->OSQEnd)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?