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

📄 rs485_pc.lis

📁 电梯楼层采集器代码
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .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 + -