⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lss

📁 458通讯
💻 LSS
📖 第 1 页 / 共 5 页
字号:
 68c:	8a df       	rcall	.-236    	; 0x5a2 <CLOSE_WaitResponsionClk>
		OPEN_USART1_ReINTERRUPT();  //关接收中断
 68e:	80 df       	rcall	.-256    	; 0x590 <OPEN_USART1_ReINTERRUPT>
 690:	01 c0       	rjmp	.+2      	; 0x694 <__vector_9+0x38>
	}
	else
	TCNT0 = 0x00;                   //重新装入计数器初值
 692:	12 be       	out	0x32, r1	; 50
 694:	ff 91       	pop	r31
 696:	ef 91       	pop	r30
 698:	bf 91       	pop	r27
 69a:	af 91       	pop	r26
 69c:	9f 91       	pop	r25
 69e:	8f 91       	pop	r24
 6a0:	7f 91       	pop	r23
 6a2:	6f 91       	pop	r22
 6a4:	5f 91       	pop	r21
 6a6:	4f 91       	pop	r20
 6a8:	3f 91       	pop	r19
 6aa:	2f 91       	pop	r18
 6ac:	0f 90       	pop	r0
 6ae:	0f be       	out	0x3f, r0	; 63
 6b0:	0f 90       	pop	r0
 6b2:	1f 90       	pop	r1
 6b4:	18 95       	reti

000006b6 <__vector_11>:
}
//==========================================================================
// USART接收中断函数
//==========================================================================
ISR(SIG_UART_RECV)    //串口接受中断
{
 6b6:	1f 92       	push	r1
 6b8:	0f 92       	push	r0
 6ba:	0f b6       	in	r0, 0x3f	; 63
 6bc:	0f 92       	push	r0
 6be:	11 24       	eor	r1, r1
 6c0:	2f 93       	push	r18
 6c2:	3f 93       	push	r19
 6c4:	4f 93       	push	r20
 6c6:	5f 93       	push	r21
 6c8:	6f 93       	push	r22
 6ca:	7f 93       	push	r23
 6cc:	8f 93       	push	r24
 6ce:	9f 93       	push	r25
 6d0:	af 93       	push	r26
 6d2:	bf 93       	push	r27
 6d4:	ef 93       	push	r30
 6d6:	ff 93       	push	r31
    BYTE Rdata;
	Rdata = UDR;
 6d8:	2c b1       	in	r18, 0x0c	; 12
	if(Rdata == EQUIPMENT_PARAMETER_TABLE[mb_infor.EQUIPMENT_NOW].EQU_ADDR)    //是当前等待帧
 6da:	80 91 98 00 	lds	r24, 0x0098
 6de:	99 27       	eor	r25, r25
 6e0:	fc 01       	movw	r30, r24
 6e2:	ee 0f       	add	r30, r30
 6e4:	ff 1f       	adc	r31, r31
 6e6:	ee 0f       	add	r30, r30
 6e8:	ff 1f       	adc	r31, r31
 6ea:	e8 0f       	add	r30, r24
 6ec:	f9 1f       	adc	r31, r25
 6ee:	e0 5a       	subi	r30, 0xA0	; 160
 6f0:	ff 4f       	sbci	r31, 0xFF	; 255
 6f2:	80 81       	ld	r24, Z
 6f4:	28 17       	cp	r18, r24
 6f6:	99 f4       	brne	.+38     	; 0x71e <__vector_11+0x68>
	{
	    WAIT_Responsion = 0;                                                    //结束超时判断
 6f8:	10 92 a3 00 	sts	0x00A3, r1
	    Receive_en = 1;                                                         //使能接收
 6fc:	81 e0       	ldi	r24, 0x01	; 1
 6fe:	80 93 a4 00 	sts	0x00A4, r24
		adu.ADULength = 0;
 702:	10 92 a1 00 	sts	0x00A1, r1
	    *(adu.RxADUBuffPtr + adu.ADULength) = Rdata;                           //为了CRC计算方便,还是要在缓冲区存储整个PDU帧
 706:	e0 91 9d 00 	lds	r30, 0x009D
 70a:	f0 91 9e 00 	lds	r31, 0x009E
 70e:	20 83       	st	Z, r18
		adu.ADULength ++;
 710:	80 91 a1 00 	lds	r24, 0x00A1
 714:	8f 5f       	subi	r24, 0xFF	; 255
 716:	80 93 a1 00 	sts	0x00A1, r24
		CLOSE_USART1_ReINTERRUPT();                                             //关接收中断
 71a:	38 df       	rcall	.-400    	; 0x58c <CLOSE_USART1_ReINTERRUPT>
		OPEN_TIMER1();                                                          //开定时器T1
 71c:	50 df       	rcall	.-352    	; 0x5be <OPEN_TIMER1>
 71e:	ff 91       	pop	r31
 720:	ef 91       	pop	r30
 722:	bf 91       	pop	r27
 724:	af 91       	pop	r26
 726:	9f 91       	pop	r25
 728:	8f 91       	pop	r24
 72a:	7f 91       	pop	r23
 72c:	6f 91       	pop	r22
 72e:	5f 91       	pop	r21
 730:	4f 91       	pop	r20
 732:	3f 91       	pop	r19
 734:	2f 91       	pop	r18
 736:	0f 90       	pop	r0
 738:	0f be       	out	0x3f, r0	; 63
 73a:	0f 90       	pop	r0
 73c:	1f 90       	pop	r1
 73e:	18 95       	reti

00000740 <MB_INFORMATION_Init>:
	}
//	delay_us(40);                   //退出时启动定时器
}
//===========================================================================
//       初始化函数
//===========================================================================
//modbus状态
void MB_INFORMATION_Init(MB_INFORMATION *MBi)
{
 740:	fc 01       	movw	r30, r24
    MBi -> EQUIPMENT_NOW = 0;                         //初始化时,从第0台设备开始
 742:	10 82       	st	Z, r1
//    MBi -> MODBUS_STATE = (enum _MODBUS_STATE)0;     
	MBi -> T15_OUT = FALSE;
 744:	11 82       	std	Z+1, r1	; 0x01
	MBi -> T35_OUT = FALSE;
 746:	12 82       	std	Z+2, r1	; 0x02
	MBi -> TO_times = 0;
 748:	13 82       	std	Z+3, r1	; 0x03
 74a:	08 95       	ret

0000074c <ADU_CONTROL_Init>:
}

void ADU_CONTROL_Init(ADU_CONTROL *adu)   
{
 74c:	fc 01       	movw	r30, r24
    adu -> Address = 0;
 74e:	10 82       	st	Z, r1
	adu -> TxADUBuffptr = TxAdu_buf;
 750:	8a ed       	ldi	r24, 0xDA	; 218
 752:	90 e0       	ldi	r25, 0x00	; 0
 754:	94 83       	std	Z+4, r25	; 0x04
 756:	83 83       	std	Z+3, r24	; 0x03
	adu -> RxADUBuffPtr = RxAdu_buf;
 758:	85 ea       	ldi	r24, 0xA5	; 165
 75a:	90 e0       	ldi	r25, 0x00	; 0
 75c:	92 83       	std	Z+2, r25	; 0x02
 75e:	81 83       	std	Z+1, r24	; 0x01
	adu -> ADULength = 0;
 760:	15 82       	std	Z+5, r1	; 0x05
	adu -> FrameOK = FALSE;
 762:	16 82       	std	Z+6, r1	; 0x06
 764:	08 95       	ret

00000766 <message_process>:
}
//================================================================================
// 接收帧的处理;
// 参数:  1.要处理帧的指针  2.要处理帧的长度
//================================================================================
MESSAGE_ERR  message_process(BYTE *Message,BYTE len)
{
 766:	0f 93       	push	r16
 768:	1f 93       	push	r17
    unsigned int CRC_data,RX_crc;
	RX_crc = *(adu.RxADUBuffPtr + adu.ADULength - 2)/*CRC高位*/*256 + *(adu.RxADUBuffPtr + adu.ADULength - 1)/*CRC低位*/;
 76a:	20 91 a1 00 	lds	r18, 0x00A1
 76e:	40 91 9d 00 	lds	r20, 0x009D
 772:	50 91 9e 00 	lds	r21, 0x009E
 776:	fa 01       	movw	r30, r20
 778:	e2 0f       	add	r30, r18
 77a:	f1 1d       	adc	r31, r1
 77c:	32 97       	sbiw	r30, 0x02	; 2
 77e:	81 91       	ld	r24, Z+
 780:	99 27       	eor	r25, r25
 782:	18 2f       	mov	r17, r24
 784:	00 27       	eor	r16, r16
 786:	80 81       	ld	r24, Z
 788:	08 0f       	add	r16, r24
 78a:	11 1d       	adc	r17, r1
	CRC_data = Get_CRC (adu.RxADUBuffPtr,adu.ADULength - 2);      //计算CRC校验
 78c:	22 50       	subi	r18, 0x02	; 2
 78e:	62 2f       	mov	r22, r18
 790:	ca 01       	movw	r24, r20
 792:	22 d0       	rcall	.+68     	; 0x7d8 <Get_CRC>
	if(CRC_data == RX_crc)                                        //CRC校验正确
 794:	80 17       	cp	r24, r16
 796:	91 07       	cpc	r25, r17
 798:	d1 f4       	brne	.+52     	; 0x7ce <message_process+0x68>
	{
		if(bit_is_clear(*(adu.RxADUBuffPtr + 1),7))              //功能码返回正确?
 79a:	e0 91 9d 00 	lds	r30, 0x009D
 79e:	f0 91 9e 00 	lds	r31, 0x009E
 7a2:	81 81       	ldd	r24, Z+1	; 0x01
 7a4:	87 fd       	sbrc	r24, 7
 7a6:	10 c0       	rjmp	.+32     	; 0x7c8 <message_process+0x62>
		{
		    if(*(adu.RxADUBuffPtr + 2) == adu.ADULength - 5)     //
 7a8:	82 81       	ldd	r24, Z+2	; 0x02
 7aa:	28 2f       	mov	r18, r24
 7ac:	33 27       	eor	r19, r19
 7ae:	80 91 a1 00 	lds	r24, 0x00A1
 7b2:	99 27       	eor	r25, r25
 7b4:	05 97       	sbiw	r24, 0x05	; 5
 7b6:	28 17       	cp	r18, r24
 7b8:	39 07       	cpc	r19, r25
 7ba:	19 f4       	brne	.+6      	; 0x7c2 <message_process+0x5c>
			{
			    return NO_ERR;
 7bc:	83 e0       	ldi	r24, 0x03	; 3
 7be:	90 e0       	ldi	r25, 0x00	; 0
 7c0:	08 c0       	rjmp	.+16     	; 0x7d2 <message_process+0x6c>
			}
			else
			return LEN_ERR;
 7c2:	82 e0       	ldi	r24, 0x02	; 2
 7c4:	90 e0       	ldi	r25, 0x00	; 0
 7c6:	05 c0       	rjmp	.+10     	; 0x7d2 <message_process+0x6c>
		}
		else
		return FUNC_ERR;
 7c8:	81 e0       	ldi	r24, 0x01	; 1
 7ca:	90 e0       	ldi	r25, 0x00	; 0
 7cc:	02 c0       	rjmp	.+4      	; 0x7d2 <message_process+0x6c>
	}
	else
	return CRC_ERR;
 7ce:	80 e0       	ldi	r24, 0x00	; 0
 7d0:	90 e0       	ldi	r25, 0x00	; 0
 7d2:	1f 91       	pop	r17
 7d4:	0f 91       	pop	r16
 7d6:	08 95       	ret

000007d8 <Get_CRC>:
} ;
/*============================================================================*/
// Procedure to check the checksum of the message
UINT16 Get_CRC ( BYTE *chkbuf, BYTE len )                       //返回CRC校验结果,测试过了
{
 7d8:	cf 93       	push	r28
 7da:	df 93       	push	r29
 7dc:	ec 01       	movw	r28, r24
   BYTE    uchCRCHi = 0xff ;
 7de:	2f ef       	ldi	r18, 0xFF	; 255
   BYTE    uchCRCLo = 0xff ;
 7e0:	a2 2f       	mov	r26, r18
   UINT16  uIndex ;
   UINT16  temp_code;

   while ( len )
      {
      uIndex = (UINT16) ( uchCRCHi ^ *chkbuf++ ) ;

      uchCRCHi = (BYTE) ( uchCRCLo ^ auchCRCHi_exp[uIndex] ) ;
      uchCRCLo = auchCRCLo_exp[uIndex] ;
      len-- ;
 7e2:	66 23       	and	r22, r22
 7e4:	71 f0       	breq	.+28     	; 0x802 <Get_CRC+0x2a>
 7e6:	89 91       	ld	r24, Y+
 7e8:	a8 27       	eor	r26, r24
 7ea:	ea 2f       	mov	r30, r26
 7ec:	ff 27       	eor	r31, r31
 7ee:	df 01       	movw	r26, r30
 7f0:	aa 5d       	subi	r26, 0xDA	; 218
 7f2:	be 4f       	sbci	r27, 0xFE	; 254
 7f4:	ac 91       	ld	r26, X
 7f6:	a2 27       	eor	r26, r18
 7f8:	ea 5d       	subi	r30, 0xDA	; 218
 7fa:	ff 4f       	sbci	r31, 0xFF	; 255
 7fc:	20 81       	ld	r18, Z
 7fe:	61 50       	subi	r22, 0x01	; 1
 800:	f0 cf       	rjmp	.-32     	; 0x7e2 <Get_CRC+0xa>
      }
   temp_code = (UINT16) uchCRCHi;
 802:	8a 2f       	mov	r24, r26
 804:	99 27       	eor	r25, r25
   temp_code = (UINT16) (temp_code << 8);
 806:	98 2f       	mov	r25, r24
 808:	88 27       	eor	r24, r24
   return(UINT16) (  temp_code | uchCRCLo ) ;
 80a:	33 27       	eor	r19, r19
}
 80c:	82 2b       	or	r24, r18
 80e:	93 2b       	or	r25, r19
 810:	df 91       	pop	r29
 812:	cf 91       	pop	r28
 814:	08 95       	ret

00000816 <InitQueue>:

void InitQueue(BYTE EUQ_num)                  
//初始化循环队列
{
    EQU_sto[EUQ_num].front = EQU_sto[EUQ_num].rear = 0;
 816:	99 27       	eor	r25, r25
 818:	fc 01       	movw	r30, r24
 81a:	ee 0f       	add	r30, r30
 81c:	ff 1f       	adc	r31, r31
 81e:	ee 0f       	add	r30, r30
 820:	ff 1f       	adc	r31, r31
 822:	e8 0f       	add	r30, r24
 824:	f9 1f       	adc	r31, r25
 826:	e8 0f       	add	r30, r24
 828:	f9 1f       	adc	r31, r25
 82a:	e1 59       	subi	r30, 0x91	; 145
 82c:	ff 4f       	sbci	r31, 0xFF	; 255
 82e:	11 82       	std	Z+1, r1	; 0x01
 830:	10 82       	st	Z, r1
 832:	08 95       	ret

00000834 <QueueLenth>:
}

BYTE QueueLenth(BYTE EUQ_num)         
//当前队列报文的个数
{
	return (EQU_sto[EUQ_num].rear - 
 834:	99 27       	eor	r25, r25
 836:	fc 01       	movw	r30, r24
 838:	ee 0f       	add	r30, r30
 83a:	ff 1f       	adc	r31, r31
 83c:	ee 0f       	add	r30, r30
 83e:	ff 1f       	adc	r31, r31
 840:	e8 0f       	add	r30, r24
 842:	f9 1f       	adc	r31, r25
 844:	e8 0f       	add	r30, r24
 846:	f9 1f       	adc	r31, r25
 848:	e1 59       	subi	r30, 0x91	; 145
 84a:	ff 4f       	sbci	r31, 0xFF	; 255
 84c:	81 81       	ldd	r24, Z+1	; 0x01
 84e:	99 27       	eor	r25, r25
 850:	20 81       	ld	r18, Z
 852:	82 1b       	sub	r24, r18
 854:	91 09       	sbc	r25, r1
 856:	24 81       	ldd	r18, Z+4	; 0x04

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -