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

📄 main.lss

📁 458通讯
💻 LSS
📖 第 1 页 / 共 5 页
字号:
 2ca:	ff 4f       	sbci	r31, 0xFF	; 255
 2cc:	c0 81       	ld	r28, Z
 2ce:	cc 23       	and	r28, r28
 2d0:	19 f4       	brne	.+6      	; 0x2d8 <main+0x7c>
 2d2:	82 81       	ldd	r24, Z+2	; 0x02
 2d4:	88 23       	and	r24, r24
 2d6:	11 f4       	brne	.+4      	; 0x2dc <main+0x80>
        {
		    adu.ADULength = 0;
            *(adu.TxADUBuffptr + adu.ADULength) = EQUIPMENT_PARAMETER_TABLE[mb_infor.EQUIPMENT_NOW].EQU_ADDR;
			                                                              //地址
            adu.ADULength ++;
			*(adu.TxADUBuffptr + adu.ADULength) = 0x03;                    //功能号
			adu.ADULength ++;
			*(adu.TxADUBuffptr + adu.ADULength) = 0x00;                    
			adu.ADULength ++;
			*(adu.TxADUBuffptr + adu.ADULength) = EQUIPMENT_PARAMETER_TABLE[mb_infor.EQUIPMENT_NOW]. REG_ORIGINATION;
			                                                              //起始寄存器
			adu.ADULength ++;
			*(adu.TxADUBuffptr + adu.ADULength) = 0x00;
			adu.ADULength ++;
			*(adu.TxADUBuffptr + adu.ADULength) = EQUIPMENT_PARAMETER_TABLE[mb_infor.EQUIPMENT_NOW].REG_NUM;
			                                                              //寄存器数量
		    adu.ADULength ++;
			CRC_BUF = Get_CRC ( adu.TxADUBuffptr, adu.ADULength  ) ;
			CRC_CHAR = (BYTE)CRC_BUF;                                    
			*(adu.TxADUBuffptr + adu.ADULength) = (BYTE)(CRC_BUF >> 4);   //CRC校验高四位
			adu.ADULength ++;                                         
			*(adu.TxADUBuffptr + adu.ADULength) = CRC_BUF;                 //CRC校验低四位
			adu.ADULength ++;
			*(adu.TxADUBuffptr + adu.ADULength) = '\n';                    //在帧的结尾加上‘\n’做为发送结束标志
			t_485(adu.TxADUBuffptr);                                       //发送帧
			adu.ADULength = 0;
			WAIT_Responsion = 1;                                         //使能等待标志
			OPEN_WaitResponsionClk();                                    //打开超时计数器T0中断
			OPEN_USART1_ReINTERRUPT();                                   //打开接收中断
		}
		else     //如果设备不存在或设备故障转到下一台设备
		{
			if(++mb_infor.EQUIPMENT_NOW  > MAX_EQU_NUM)        //查询完一遍?
 2d8:	82 2f       	mov	r24, r18
 2da:	28 c1       	rjmp	.+592    	; 0x52c <__stack+0xcd>
 2dc:	c0 93 a1 00 	sts	0x00A1, r28
 2e0:	e0 91 9f 00 	lds	r30, 0x009F
 2e4:	f0 91 a0 00 	lds	r31, 0x00A0
 2e8:	c0 83       	st	Z, r28
 2ea:	80 91 a1 00 	lds	r24, 0x00A1
 2ee:	8f 5f       	subi	r24, 0xFF	; 255
 2f0:	80 93 a1 00 	sts	0x00A1, r24
 2f4:	e0 91 9f 00 	lds	r30, 0x009F
 2f8:	f0 91 a0 00 	lds	r31, 0x00A0
 2fc:	e8 0f       	add	r30, r24
 2fe:	f1 1d       	adc	r31, r1
 300:	83 e0       	ldi	r24, 0x03	; 3
 302:	80 83       	st	Z, r24
 304:	80 91 a1 00 	lds	r24, 0x00A1
 308:	8f 5f       	subi	r24, 0xFF	; 255
 30a:	80 93 a1 00 	sts	0x00A1, r24
 30e:	e0 91 9f 00 	lds	r30, 0x009F
 312:	f0 91 a0 00 	lds	r31, 0x00A0
 316:	e8 0f       	add	r30, r24
 318:	f1 1d       	adc	r31, r1
 31a:	c0 83       	st	Z, r28
 31c:	80 91 a1 00 	lds	r24, 0x00A1
 320:	8f 5f       	subi	r24, 0xFF	; 255
 322:	80 93 a1 00 	sts	0x00A1, r24
 326:	a0 91 9f 00 	lds	r26, 0x009F
 32a:	b0 91 a0 00 	lds	r27, 0x00A0
 32e:	a8 0f       	add	r26, r24
 330:	b1 1d       	adc	r27, r1
 332:	80 91 98 00 	lds	r24, 0x0098
 336:	99 27       	eor	r25, r25
 338:	fc 01       	movw	r30, r24
 33a:	ee 0f       	add	r30, r30
 33c:	ff 1f       	adc	r31, r31
 33e:	ee 0f       	add	r30, r30
 340:	ff 1f       	adc	r31, r31
 342:	e8 0f       	add	r30, r24
 344:	f9 1f       	adc	r31, r25
 346:	e0 5a       	subi	r30, 0xA0	; 160
 348:	ff 4f       	sbci	r31, 0xFF	; 255
 34a:	83 81       	ldd	r24, Z+3	; 0x03
 34c:	8c 93       	st	X, r24
 34e:	80 91 a1 00 	lds	r24, 0x00A1
 352:	8f 5f       	subi	r24, 0xFF	; 255
 354:	80 93 a1 00 	sts	0x00A1, r24
 358:	e0 91 9f 00 	lds	r30, 0x009F
 35c:	f0 91 a0 00 	lds	r31, 0x00A0
 360:	e8 0f       	add	r30, r24
 362:	f1 1d       	adc	r31, r1
 364:	c0 83       	st	Z, r28
 366:	80 91 a1 00 	lds	r24, 0x00A1
 36a:	8f 5f       	subi	r24, 0xFF	; 255
 36c:	80 93 a1 00 	sts	0x00A1, r24
 370:	a0 91 9f 00 	lds	r26, 0x009F
 374:	b0 91 a0 00 	lds	r27, 0x00A0
 378:	a8 0f       	add	r26, r24
 37a:	b1 1d       	adc	r27, r1
 37c:	80 91 98 00 	lds	r24, 0x0098
 380:	99 27       	eor	r25, r25
 382:	fc 01       	movw	r30, r24
 384:	ee 0f       	add	r30, r30
 386:	ff 1f       	adc	r31, r31
 388:	ee 0f       	add	r30, r30
 38a:	ff 1f       	adc	r31, r31
 38c:	e8 0f       	add	r30, r24
 38e:	f9 1f       	adc	r31, r25
 390:	e0 5a       	subi	r30, 0xA0	; 160
 392:	ff 4f       	sbci	r31, 0xFF	; 255
 394:	84 81       	ldd	r24, Z+4	; 0x04
 396:	8c 93       	st	X, r24
 398:	80 91 a1 00 	lds	r24, 0x00A1
 39c:	8f 5f       	subi	r24, 0xFF	; 255
 39e:	80 93 a1 00 	sts	0x00A1, r24
 3a2:	68 2f       	mov	r22, r24
 3a4:	80 91 9f 00 	lds	r24, 0x009F
 3a8:	90 91 a0 00 	lds	r25, 0x00A0
 3ac:	15 d2       	rcall	.+1066   	; 0x7d8 <Get_CRC>
 3ae:	9c 01       	movw	r18, r24
 3b0:	80 91 a1 00 	lds	r24, 0x00A1
 3b4:	e0 91 9f 00 	lds	r30, 0x009F
 3b8:	f0 91 a0 00 	lds	r31, 0x00A0
 3bc:	e8 0f       	add	r30, r24
 3be:	f1 1d       	adc	r31, r1
 3c0:	c9 01       	movw	r24, r18
 3c2:	54 e0       	ldi	r21, 0x04	; 4
 3c4:	96 95       	lsr	r25
 3c6:	87 95       	ror	r24
 3c8:	5a 95       	dec	r21
 3ca:	e1 f7       	brne	.-8      	; 0x3c4 <main+0x168>
 3cc:	80 83       	st	Z, r24
 3ce:	80 91 a1 00 	lds	r24, 0x00A1
 3d2:	8f 5f       	subi	r24, 0xFF	; 255
 3d4:	80 93 a1 00 	sts	0x00A1, r24
 3d8:	e0 91 9f 00 	lds	r30, 0x009F
 3dc:	f0 91 a0 00 	lds	r31, 0x00A0
 3e0:	e8 0f       	add	r30, r24
 3e2:	f1 1d       	adc	r31, r1
 3e4:	20 83       	st	Z, r18
 3e6:	80 91 a1 00 	lds	r24, 0x00A1
 3ea:	8f 5f       	subi	r24, 0xFF	; 255
 3ec:	80 93 a1 00 	sts	0x00A1, r24
 3f0:	e0 91 9f 00 	lds	r30, 0x009F
 3f4:	f0 91 a0 00 	lds	r31, 0x00A0
 3f8:	e8 0f       	add	r30, r24
 3fa:	f1 1d       	adc	r31, r1
 3fc:	8a e0       	ldi	r24, 0x0A	; 10
 3fe:	80 83       	st	Z, r24
 400:	80 91 9f 00 	lds	r24, 0x009F
 404:	90 91 a0 00 	lds	r25, 0x00A0
 408:	a8 d0       	rcall	.+336    	; 0x55a <t_485>
 40a:	c0 93 a1 00 	sts	0x00A1, r28
 40e:	81 e0       	ldi	r24, 0x01	; 1
 410:	80 93 a3 00 	sts	0x00A3, r24
 414:	bf d0       	rcall	.+382    	; 0x594 <OPEN_WaitResponsionClk>
 416:	bc d0       	rcall	.+376    	; 0x590 <OPEN_USART1_ReINTERRUPT>
			mb_infor.EQUIPMENT_NOW = 0;                         //设备编号从0开始
			goto begin;
		}
		while(WAIT_Responsion)                                  //在接收中断中如果收到当前地址选中设备的应答则清除标志,跳出循环
		{
			if(WAIT_Time >= MAX_WAIT_TIME)                       //超时
			{
			    //CLOSE_WaitResponsionClk();                      //关闭T0;
				WAIT_Time = 0;                                  //复位WAIT_Time
			    CHAOSHI_ErrTime[mb_infor.EQUIPMENT_NOW] ++;     //超时错误计数器++
				if(CHAOSHI_ErrTime[mb_infor.EQUIPMENT_NOW] >= MAX_CHAOSHI)             //超过最大超时错误
				{
				    EQUIPMENT_PARAMETER_TABLE[mb_infor.EQUIPMENT_NOW].EQU_STATE = ERR; //修改设备参数表中的状态,以后不再查询该设备
					CHAOSHI_ErrTime[mb_infor.EQUIPMENT_NOW] = 0;                       //超时错误计数器清0
				}	
				if(++mb_infor.EQUIPMENT_NOW  > MAX_EQU_NUM)                            //设备查询过来一遍?
				mb_infor.EQUIPMENT_NOW = 0;                                             //设备编号从0开始
				WAIT_Responsion = 0;                                                    //重新初始化等待回应标志
				goto begin;
 418:	90 91 a3 00 	lds	r25, 0x00A3
 41c:	99 23       	and	r25, r25
 41e:	41 f1       	breq	.+80     	; 0x470 <__stack+0x11>
 420:	80 91 94 00 	lds	r24, 0x0094
 424:	8c 35       	cpi	r24, 0x5C	; 92
 426:	d0 f3       	brcs	.-12     	; 0x41c <main+0x1c0>
 428:	10 92 94 00 	sts	0x0094, r1
 42c:	90 91 98 00 	lds	r25, 0x0098
 430:	29 2f       	mov	r18, r25
 432:	33 27       	eor	r19, r19
 434:	d9 01       	movw	r26, r18
 436:	ab 56       	subi	r26, 0x6B	; 107
 438:	bf 4f       	sbci	r27, 0xFF	; 255
 43a:	8c 91       	ld	r24, X
 43c:	8f 5f       	subi	r24, 0xFF	; 255
 43e:	8c 93       	st	X, r24
 440:	83 30       	cpi	r24, 0x03	; 3
 442:	58 f0       	brcs	.+22     	; 0x45a <main+0x1fe>
 444:	f9 01       	movw	r30, r18
 446:	ee 0f       	add	r30, r30
 448:	ff 1f       	adc	r31, r31
 44a:	ee 0f       	add	r30, r30
 44c:	ff 1f       	adc	r31, r31
 44e:	e2 0f       	add	r30, r18
 450:	f3 1f       	adc	r31, r19
 452:	e0 5a       	subi	r30, 0xA0	; 160
 454:	ff 4f       	sbci	r31, 0xFF	; 255
 456:	12 82       	std	Z+2, r1	; 0x02
 458:	1c 92       	st	X, r1
 45a:	89 2f       	mov	r24, r25
 45c:	8f 5f       	subi	r24, 0xFF	; 255
 45e:	80 93 98 00 	sts	0x0098, r24
 462:	84 30       	cpi	r24, 0x04	; 4
 464:	10 f0       	brcs	.+4      	; 0x46a <__stack+0xb>
 466:	10 92 98 00 	sts	0x0098, r1
 46a:	10 92 a3 00 	sts	0x00A3, r1
 46e:	21 cf       	rjmp	.-446    	; 0x2b2 <main+0x56>
			}
		}
		//&&&&&&&&&&&&&&&&&&&&&&
		//接收除地址外的其他字节
		//&&&&&&&&&&&&&&&&&&&&&&
		for(;;)
		{
			while(!(UCSRA & (1<<RXC)))
			{
				if(mb_infor.T35_OUT)
				{
					mb_infor.T35_OUT = FALSE;
					WAIT_Time = 0;             //WAIT_Time复位
					goto ZHEN_OVER;
 470:	5f 99       	sbic	0x0b, 7	; 11
 472:	06 c0       	rjmp	.+12     	; 0x480 <__stack+0x21>
 474:	80 91 9a 00 	lds	r24, 0x009A
 478:	88 23       	and	r24, r24
 47a:	c1 f4       	brne	.+48     	; 0x4ac <__stack+0x4d>
 47c:	5f 9b       	sbis	0x0b, 7	; 11
 47e:	fe cf       	rjmp	.-4      	; 0x47c <__stack+0x1d>
				}
			}
			TCNT0 = 0x00;   //重新计数
 480:	12 be       	out	0x32, r1	; 50
			WAIT_Time = 0;  //中断次数清零
 482:	10 92 94 00 	sts	0x0094, r1
			delay_us(50);
 486:	82 e3       	ldi	r24, 0x32	; 50
 488:	90 e0       	ldi	r25, 0x00	; 0
 48a:	62 d0       	rcall	.+196    	; 0x550 <delay_us>
			*(adu.RxADUBuffPtr + adu.ADULength) = UDR;
 48c:	80 91 a1 00 	lds	r24, 0x00A1
 490:	e0 91 9d 00 	lds	r30, 0x009D
 494:	f0 91 9e 00 	lds	r31, 0x009E
 498:	e8 0f       	add	r30, r24
 49a:	f1 1d       	adc	r31, r1
 49c:	8c b1       	in	r24, 0x0c	; 12
 49e:	80 83       	st	Z, r24
			adu.ADULength ++;
 4a0:	80 91 a1 00 	lds	r24, 0x00A1
 4a4:	8f 5f       	subi	r24, 0xFF	; 255
 4a6:	80 93 a1 00 	sts	0x00A1, r24
 4aa:	e2 cf       	rjmp	.-60     	; 0x470 <__stack+0x11>
 4ac:	10 92 9a 00 	sts	0x009A, r1
 4b0:	10 92 94 00 	sts	0x0094, r1
		}
		ZHEN_OVER:
		CLOSE_TIMER1(); //关定时器1
 4b4:	7d d0       	rcall	.+250    	; 0x5b0 <CLOSE_TIMER1>
//================================================================
/*		           以下内容是帧处理:                            */
//================================================================
        MESSAGE_err = message_process(adu.RxADUBuffPtr,adu.ADULength);
 4b6:	60 91 a1 00 	lds	r22, 0x00A1
 4ba:	80 91 9d 00 	lds	r24, 0x009D
 4be:	90 91 9e 00 	lds	r25, 0x009E
 4c2:	51 d1       	rcall	.+674    	; 0x766 <message_process>
		switch(MESSAGE_err)
 4c4:	99 27       	eor	r25, r25
 4c6:	81 30       	cpi	r24, 0x01	; 1
 4c8:	91 05       	cpc	r25, r1
 4ca:	61 f0       	breq	.+24     	; 0x4e4 <__stack+0x85>
 4cc:	82 30       	cpi	r24, 0x02	; 2
 4ce:	91 05       	cpc	r25, r1
 4d0:	1c f4       	brge	.+6      	; 0x4d8 <__stack+0x79>
 4d2:	89 2b       	or	r24, r25
 4d4:	39 f0       	breq	.+14     	; 0x4e4 <__stack+0x85>
 4d6:	ed ce       	rjmp	.-550    	; 0x2b2 <main+0x56>
 4d8:	82 30       	cpi	r24, 0x02	; 2
 4da:	91 05       	cpc	r25, r1
 4dc:	19 f0       	breq	.+6      	; 0x4e4 <__stack+0x85>
 4de:	03 97       	sbiw	r24, 0x03	; 3
 4e0:	d1 f0       	breq	.+52     	; 0x516 <__stack+0xb7>
 4e2:	e7 ce       	rjmp	.-562    	; 0x2b2 <main+0x56>
		{
		    case  CRC_ERR:  ZHEN_ErrTime[mb_infor.EQUIPMENT_NOW] ++;     //错误计数器++
							if(ZHEN_ErrTime[mb_infor.EQUIPMENT_NOW] >= MAX_ZHENERR)                //超过最大超时错误
							{
								EQUIPMENT_PARAMETER_TABLE[mb_infor.EQUIPMENT_NOW].EQU_STATE = ERR; //修改设备参数表中的状态,以后不再查询该设备
								ZHEN_ErrTime[mb_infor.EQUIPMENT_NOW] = 0;                          //超时错误计数器清0
							}
                            goto begin;
			                break;
			case  FUNC_ERR://&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
			                //   这里要分析错误代码 找到原因
			                //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
			                ZHEN_ErrTime[mb_infor.EQUIPMENT_NOW] ++;     //错误计数器++
							if(ZHEN_ErrTime[mb_infor.EQUIPMENT_NOW] >= MAX_ZHENERR)                //超过最大超时错误
							{
								EQUIPMENT_PARAMETER_TABLE[mb_infor.EQUIPMENT_NOW].EQU_STATE = ERR; //修改设备参数表中的状态,以后不再查询该设备
								ZHEN_ErrTime[mb_infor.EQUIPMENT_NOW] = 0;                          //超时错误计数器清0
							}
			                break;
			case  LEN_ERR: ZHEN_ErrTime[mb_infor.EQUIPMENT_NOW] ++;     //错误计数器++
 4e4:	80 91 98 00 	lds	r24, 0x0098
 4e8:	28 2f       	mov	r18, r24
 4ea:	33 27       	eor	r19, r19
 4ec:	d9 01       	movw	r26, r18
 4ee:	a9 52       	subi	r26, 0x29	; 41
 4f0:	bf 4f       	sbci	r27, 0xFF	; 255
 4f2:	8c 91       	ld	r24, X
 4f4:	8f 5f       	subi	r24, 0xFF	; 255
 4f6:	8c 93       	st	X, r24
							if(ZHEN_ErrTime[mb_infor.EQUIPMENT_NOW] >= MAX_ZHENERR)                //超过最大超时错误
 4f8:	85 30       	cpi	r24, 0x05	; 5
 4fa:	08 f4       	brcc	.+2      	; 0x4fe <__stack+0x9f>
 4fc:	da ce       	rjmp	.-588    	; 0x2b2 <main+0x56>
							{
								EQUIPMENT_PARAMETER_TABLE[mb_infor.EQUIPMENT_NOW].EQU_STATE = ERR; //修改设备参数表中的状态,以后不再查询该设备
 4fe:	f9 01       	movw	r30, r18
 500:	ee 0f       	add	r30, r30
 502:	ff 1f       	adc	r31, r31
 504:	ee 0f       	add	r30, r30
 506:	ff 1f       	adc	r31, r31
 508:	e2 0f       	add	r30, r18
 50a:	f3 1f       	adc	r31, r19
 50c:	e0 5a       	subi	r30, 0xA0	; 160
 50e:	ff 4f       	sbci	r31, 0xFF	; 255
 510:	12 82       	std	Z+2, r1	; 0x02
								ZHEN_ErrTime[mb_infor.EQUIPMENT_NOW] = 0;                          //超时错误计数器清0

⌨️ 快捷键说明

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