📄 main.lss
字号:
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 + -