📄 rs485_pc.lis
字号:
.module RS485_PC.C
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\LCU904~1\固件程序\RS485_PC.C
0000 .dbfunc e CommandReply _CommandReply fV
0000 .dbstruct 0 260 StructOfProtocol
0000 .dbfield 0 Address c
0000 .dbfield 1 Length i
0000 .dbfield 3 Command c
0000 .dbfield 4 Data A[256:256]c
0000 .dbend
0000 .dbstruct 0 4 data
0000 .dbfield 0 pc_rxd c
0000 .dbfield 1 pc_txd c
0000 .dbfield 2 c51_rxd c
0000 .dbfield 3 c51_txd c
0000 .dbend
0000 ; communication -> R20,R21
0000 ; p_buf -> R22,R23
0000 ; command -> R16
.even
0000 _CommandReply::
0000 0E940000 xcall push_xgsetF000
0004 .dbline -1
0004 .dbline 5
0004 ;
0004 ; #include"include.h"
0004 ;
0004 ; void CommandReply(unsigned char command)
0004 ; {//发送返回值给PC
0004 .dbline 8
0004 ; struct StructOfProtocol *p_buf;
0004 ; struct data *communication;
0004 ; p_buf = (struct StructOfProtocol *)Buffer485;
0004 60E0 ldi R22,<_Buffer485
0006 70E0 ldi R23,>_Buffer485
0008 .dbline 9
0008 ; p_buf->Length = 1;
0008 81E0 ldi R24,1
000A 90E0 ldi R25,0
000C FB01 movw R30,R22
000E 9283 std z+2,R25
0010 8183 std z+1,R24
0012 .dbline 10
0012 ; p_buf->Command = command;
0012 0383 std z+3,R16
0014 .dbline 11
0014 ; communication->pc_txd = 1;
0014 FA01 movw R30,R20
0016 8183 std z+1,R24
0018 .dbline -2
0018 L2:
0018 .dbline 0 ; func end
0018 0C940000 xjmp pop_xgsetF000
001C .dbsym r communication 20 pS[data]
001C .dbsym r p_buf 22 pS[StructOfProtocol]
001C .dbsym r command 16 c
001C .dbend
.area lit(rom, con, rel)
0000 _UnitID::
0000 4C4355393034302F312056332E302020 .byte 'L,'C,'U,57,48,52,48,47,49,32,'V,51,46,48,32,32
0010 .dbsym e UnitID _UnitID A[16:16]kc
.area text(rom, con, rel)
001C .dbfile C:\DOCUME~1\Administrator\桌面\LCU904~1\固件程序\RS485_PC.C
001C .dbfunc e GET_NAME _GET_NAME fV
001C ; communication -> R20,R21
001C ; p_buf -> R22,R23
.even
001C _GET_NAME::
001C 0E940000 xcall push_xgsetF000
0020 2297 sbiw R28,2
0022 .dbline -1
0022 .dbline 25
0022 ; }
0022 ; //------------------------------------------------------------------------------
0022 ; //------------------------------------------------------------------------------
0022 ; /*
0022 ; 取控制器名称和版本号
0022 ; 命令码: CMD_GET_DCUID
0022 ; 数据: NONE
0022 ; 回应数据:
0022 ; [设备名称] 10 byte(字符串形式)
0022 ; [软件版本号] 6 byte(字符串形式)
0022 ; */
0022 ; flash unsigned char UnitID[16] = { "LCU9040/1 V3.0 " }; /*设备标示代码*/
0022 ; void GET_NAME(void)
0022 ; {
0022 .dbline 28
0022 ; struct StructOfProtocol *p_buf;
0022 ; struct data *communication;
0022 ; p_buf = (struct StructOfProtocol *)Buffer485;
0022 60E0 ldi R22,<_Buffer485
0024 70E0 ldi R23,>_Buffer485
0026 .dbline 29
0026 ; if(p_buf->Address==Device_Address)
0026 20900000 lds R2,_Device_Address
002A FB01 movw R30,R22
002C 3080 ldd R3,z+0
002E 3214 cp R3,R2
0030 C9F4 brne L4
0032 X0:
0032 .dbline 30
0032 ; {
0032 .dbline 31
0032 ; if(p_buf->Length==1)
0032 8181 ldd R24,z+1
0034 9281 ldd R25,z+2
0036 8130 cpi R24,1
0038 A0E0 ldi R26,0
003A 9A07 cpc R25,R26
003C 91F4 brne L6
003E X1:
003E .dbline 32
003E ; {
003E .dbline 33
003E ; p_buf->Length = sizeof(UnitID) + 1;
003E 81E1 ldi R24,17
0040 90E0 ldi R25,0
0042 9283 std z+2,R25
0044 8183 std z+1,R24
0046 .dbline 34
0046 ; memcpy(p_buf->Data,UnitID,sizeof(UnitID));
0046 80E1 ldi R24,16
0048 9983 std y+1,R25
004A 8883 std y+0,R24
004C 20E0 ldi R18,<_UnitID
004E 30E0 ldi R19,>_UnitID
0050 8F01 movw R16,R30
0052 0C5F subi R16,252 ; offset = 4
0054 1F4F sbci R17,255
0056 0E940000 xcall _memcpy
005A .dbline 35
005A ; communication->pc_txd = 1;
005A 81E0 ldi R24,1
005C FA01 movw R30,R20
005E 8183 std z+1,R24
0060 .dbline 36
0060 ; }
0060 01C0 xjmp L7
0062 L6:
0062 .dbline 37
0062 ; else if(TEST) CommandReply(RESP_INVALID_DATA);
0062 00C0 xjmp L8
0064 L8:
0064 L7:
0064 .dbline 38
0064 ; }
0064 L4:
0064 .dbline -2
0064 L3:
0064 .dbline 0 ; func end
0064 2296 adiw R28,2
0066 0C940000 xjmp pop_xgsetF000
006A .dbsym r communication 20 pS[data]
006A .dbsym r p_buf 22 pS[StructOfProtocol]
006A .dbend
006A .dbfunc e GET_TIME _GET_TIME fV
006A ; communication -> R16,R17
006A ; p_buf -> R18,R19
.even
006A _GET_TIME::
006A .dbline -1
006A .dbline 51
006A ; }
006A ; //------------------------------------------------------------------------------
006A ; //------------------------------------------------------------------------------
006A ; /*
006A ; 取系统时间
006A ; 命令码:CMD_GET_TIME
006A ; 数据: NONE
006A ; 正常回应数据:
006A ; 日期表示: 2 bytes
006A ; 时间表示: 2 bytes
006A ; */
006A ; void GET_TIME(void)
006A ; {
006A .dbline 54
006A ; struct StructOfProtocol *p_buf;
006A ; struct data *communication;
006A ; p_buf = (struct StructOfProtocol *)Buffer485;
006A 20E0 ldi R18,<_Buffer485
006C 30E0 ldi R19,>_Buffer485
006E .dbline 55
006E ; *C51Buffer485 = *Buffer485;
006E 20900000 lds R2,_Buffer485
0072 20920000 sts _C51Buffer485,R2
0076 .dbline 56
0076 ; if(p_buf->Address == Device_Address)
0076 20900000 lds R2,_Device_Address
007A F901 movw R30,R18
007C 3080 ldd R3,z+0
007E 3214 cp R3,R2
0080 59F4 brne L11
0082 X2:
0082 .dbline 57
0082 ; {
0082 .dbline 59
0082 ;
0082 ; if(p_buf->Length==1)
0082 8181 ldd R24,z+1
0084 9281 ldd R25,z+2
0086 8130 cpi R24,1
0088 E0E0 ldi R30,0
008A 9E07 cpc R25,R30
008C 21F4 brne L13
008E X3:
008E .dbline 60
008E ; {//发送获取时间给51控制板
008E .dbline 61
008E ; communication->c51_txd = 1;
008E 81E0 ldi R24,1
0090 F801 movw R30,R16
0092 8383 std z+3,R24
0094 .dbline 62
0094 ; }
0094 01C0 xjmp L14
0096 L13:
0096 .dbline 63
0096 ; else if(TEST) CommandReply(RESP_INVALID_DATA);
0096 00C0 xjmp L15
0098 L15:
0098 L14:
0098 .dbline 64
0098 ; }
0098 L11:
0098 .dbline -2
0098 L10:
0098 .dbline 0 ; func end
0098 0895 ret
009A .dbsym r communication 16 pS[data]
009A .dbsym r p_buf 18 pS[StructOfProtocol]
009A .dbend
009A .dbfunc e SET_TIME _SET_TIME fV
009A ; p_buf -> R20,R21
.even
009A _SET_TIME::
009A 4A93 st -y,R20
009C 5A93 st -y,R21
009E .dbline -1
009E .dbline 74
009E ; }
009E ; //------------------------------------------------------------------------------
009E ; /*
009E ; 下载系统时间
009E ; 命令码:CMD_SET_TIME
009E ; 数据: 日期2字节,时间2字节
009E ; 正常回应:[OK]
009E ; */
009E ; void SET_TIME(void)
009E ; {
009E .dbline 76
009E ; struct StructOfProtocol *p_buf;
009E ; p_buf = (struct StructOfProtocol *)Buffer485;
009E 40E0 ldi R20,<_Buffer485
00A0 50E0 ldi R21,>_Buffer485
00A2 .dbline 77
00A2 ; *C51Buffer485 = *Buffer485;
00A2 20900000 lds R2,_Buffer485
00A6 20920000 sts _C51Buffer485,R2
00AA .dbline 78
00AA ; if(p_buf->Length ==5)
00AA FA01 movw R30,R20
00AC 8181 ldd R24,z+1
00AE 9281 ldd R25,z+2
00B0 8530 cpi R24,5
00B2 A0E0 ldi R26,0
00B4 9A07 cpc R25,R26
00B6 C9F4 brne L18
00B8 X4:
00B8 .dbline 79
00B8 ; {//发送设置时间给51控制板
00B8 .dbline 80
00B8 ; DayOfTime = ((unsigned int)p_buf->Data[0] << 8) | p_buf->Data[1];
00B8 2580 ldd R2,z+5
00BA 3480 ldd R3,z+4
00BC 4424 clr R4
00BE 30920100 sts _DayOfTime+1,R3
00C2 20920000 sts _DayOfTime,R2
00C6 .dbline 81
00C6 ; SecondOfTime = ((unsigned int)p_buf->Data[2] << 8) | p_buf->Data[3];
00C6 2780 ldd R2,z+7
00C8 3680 ldd R3,z+6
00CA 4424 clr R4
00CC 30920100 sts _SecondOfTime+1,R3
00D0 20920000 sts _SecondOfTime,R2
00D4 .dbline 82
00D4 ; if (p_buf->Address != 0xff)
00D4 8081 ldd R24,z+0
00D6 8F3F cpi R24,255
00D8 49F0 breq L19
00DA X5:
00DA .dbline 83
00DA ; {
00DA .dbline 84
00DA ; Cyc_manage |= 0x04;//打开更新51控制板的数据
00DA 80910000 lds R24,_Cyc_manage
00DE 8460 ori R24,4
00E0 80930000 sts _Cyc_manage,R24
00E4 .dbline 85
00E4 ; CommandReply(RESP_CMD_OK);
00E4 01E8 ldi R16,129
00E6 8CDF xcall _CommandReply
00E8 .dbline 86
00E8 ; }
00E8 .dbline 87
00E8 ; }
00E8 01C0 xjmp L19
00EA L18:
00EA .dbline 88
00EA ; else if(TEST && p_buf->Address != 0xff)
00EA 00C0 xjmp L22
00EC L22:
00EC L19:
00EC .dbline -2
00EC L17:
00EC .dbline 0 ; func end
00EC 5991 ld R21,y+
00EE 4991 ld R20,y+
00F0 0895 ret
00F2 .dbsym r p_buf 20 pS[StructOfProtocol]
00F2 .dbend
00F2 .dbfunc e GET_CARDSET _GET_CARDSET fV
00F2 ; communication -> R20,R21
00F2 ; count -> R12,R13
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -