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 + -
显示快捷键?