📄 rs485_pc.s
字号:
.dbline -2
L141:
.dbline 0 ; func end
adiw R28,1
ld R21,y+
ld R20,y+
ret
.dbsym r p_buf 20 pS[StructOfProtocol]
.dbend
.dbfunc e GET_UNIT_STATUS _GET_UNIT_STATUS fV
; communication -> R16,R17
; p_buf -> R18,R19
.even
_GET_UNIT_STATUS::
.dbline -1
.dbline 472
; CommandReply(RESP_INVALID_DATA);
; }
; //------------------------------------------------------------------------------
; //------------------------------------------------------------------------------
; /*取控制器状态*/
; void GET_UNIT_STATUS(void)
; {
.dbline 475
; struct StructOfProtocol *p_buf;
; struct data *communication;
; p_buf = (struct StructOfProtocol *)Buffer485;
ldi R18,<_Buffer485
ldi R19,>_Buffer485
.dbline 476
; if (p_buf->Address == Device_Address) /*本机地址响应*/
lds R2,_Device_Address
movw R30,R18
ldd R3,z+0
cp R3,R2
brne L149
X62:
.dbline 477
; {
.dbline 478
; if (p_buf->Length == 1) /*接收数据包长度确认*/
ldd R24,z+1
ldd R25,z+2
cpi R24,1
ldi R26,0
cpc R25,R26
brne L151
X63:
.dbline 479
; {
.dbline 480
; p_buf->Length = 4;
ldi R24,4
ldi R25,0
std z+2,R25
std z+1,R24
.dbline 481
; p_buf->Data[0] = WorkingMode; /*工作模式状态*/
lds R2,_WorkingMode
std z+4,R2
.dbline 482
; p_buf->Data[1] = StopSwitchStatus; /*停止开关状态*/
lds R2,_StopSwitchStatus
std z+5,R2
.dbline 483
; p_buf->Data[2] = FireSwitchStatus; /*火警开关状态*/
lds R2,_FireSwitchStatus
std z+6,R2
.dbline 484
; communication->pc_txd = 1;
ldi R24,1
movw R30,R16
std z+1,R24
.dbline 485
; }
L151:
.dbline 486
; }
L149:
.dbline -2
L148:
.dbline 0 ; func end
ret
.dbsym r communication 16 pS[data]
.dbsym r p_buf 18 pS[StructOfProtocol]
.dbend
.dbfunc e SET_UNIT_STATUS _SET_UNIT_STATUS fV
.even
_SET_UNIT_STATUS::
.dbline -1
.dbline 491
; }
; //------------------------------------------------------------------------------
; /*设置控制器状态*/
; void SET_UNIT_STATUS(void)
; {
.dbline -2
L153:
.dbline 0 ; func end
ret
.dbend
.dbfunc e GET_EVENT _GET_EVENT fV
.even
_GET_EVENT::
.dbline -1
.dbline 550
; /*
; struct StructOfProtocol *p_buf;
; struct Device51_StructOfProtocol *C51_buf;
; struct ControlStream *p_stream;
; p_buf = (struct StructOfProtocol *)Buffer485;
; C51_buf = (struct Device51_StructOfProtocol *)Buffer485;
; if (p_buf->Length == 3) //接收数据包长度确认
; {
; p_stream = (struct ControlStream *)p_buf->Data;
; if (!p_stream->Device_Address) //复位控制器
; {
; if (!p_stream->Status)
; {
; b_reset = 1;
; EventRecord(MSG_WARM_RESET);
; if (p_buf->Address != 0xff)
; CommandReply(RESP_CMD_OK);
; }
; else if (p_stream->Status == 1)
; {
; CleanDatabase();
; EventRecord(MSG_COLD_RESET);
; b_reset = 1;
; }
; }
; else if (p_stream->Address == 1) //设置工作模式
; {
; if (p_stream->Status == SLEEP_MODE ||
; p_stream->Status == UNLOCK_MODE || p_stream->Status == SAFETY_MODE)
; {
; tmp = WorkingMode & ~MANUAL;
; WorkingMode = p_stream->Status | MANUAL;
; if (!(tmp & MANUAL) || p_stream->Status != (tmp & 0x0f))
; {
; EventRecord(MSG_WORKING_MODE_CHANGED);
; if (p_stream->Status == UNLOCK_MODE)
; {
; if (SystemConfig.FirstKeyUnlock) b_unlock = 0;
; else b_unlock = 1;
; }
; }
; }
; else WorkingMode = MANUAL;
; b_minute = 1;
; if (p_buf->Address != 0xff)
; CommandReply(RESP_CMD_OK);
; }
; else if (TEST && p_buf->Address != 0xff)
; CommandReply(RESP_INVALID_DATA);
; }
; else if (TEST && p_buf->Address != 0xff)
; CommandReply(RESP_INVALID_DATA);
; */
; }
; //------------------------------------------------------------------------------
; //------------------------------------------------------------------------------
; /*取控制器历史事件*/
; void GET_EVENT(void)
; {
.dbline -2
L154:
.dbline 0 ; func end
ret
.dbend
.dbfunc e communication_with_pc _communication_with_pc fV
; p_buf -> R20,R21
; communication -> R22,R23
.even
_communication_with_pc::
xcall push_xgsetF000
.dbline -1
.dbline 606
;
; /*
;
; if (p_buf->Address == Address)
; {
; if (p_buf->Length == 3) //接收数据包长度确认
; {
; tmp = p_buf->Data[0]; //取删除记录数
; if (tmp == 0xff) //删除所有记录
; {
; Record.TopPoint = Record.BottomPoint = Record.Overflow = 0;
; SequentialWrite((unsigned char *)&Record,OFFSET_RECORD_POINT,sizeof(Record));
; }
; else if (p_buf->Data[1] == (unsigned char)Record.BottomPoint)//数据包标志比较
; {
; count = GetRecordNumber(); //计算现有记录数
; if (tmp) //删除部分记录
; {
; if (tmp <= count && tmp <= ((sizeof(Buffer485) - 10) / sizeof(struct StructOfRecord)))
; {
; count = tmp + Record.BottomPoint;
; if (count < MAX_RECORD_NUMBER) Record.BottomPoint = count;
; else Record.BottomPoint = count - MAX_RECORD_NUMBER;
; Record.Overflow = 0;
; SequentialWrite((unsigned char *)&Record,OFFSET_RECORD_POINT,sizeof(Record));
; }
; else if (TEST) //删除记录数据异常
; {
; CommandReply(RESP_INVALID_DATA);
; break;
; }
; }
; }
; count = GetRecordNumber(); //计算删除后的记录数
; if (count)
; {
; if (count > ((sizeof(Buffer485) - 10) / sizeof(struct StructOfRecord)))
; count = (sizeof(Buffer485) - 10) / sizeof(struct StructOfRecord);
; count *= sizeof(struct StructOfRecord);
; p_buf->Length = count + 2;
; p_buf->Data[0] = (unsigned char)Record.BottomPoint; //回应包号
; point = OFFSET_EVENT_RECORD + Record.BottomPoint * sizeof(struct StructOfRecord);
; MemoryRead((unsigned char *)&p_buf->Data[1],point,count);
; b_rts = 1; //置发送请求标志
; }
; else CommandReply(RESP_NULL); //无记录数据
; }
; else if(TEST) CommandReply(RESP_INVALID_DATA); //包长度异常
; }
;
; */
; }
; //------------------------------------------------------------------------------
; //------------------------------------------------------------------------------
; void communication_with_pc(void)
; {
.dbline 609
; struct StructOfProtocol *p_buf;
; struct data *communication;
; p_buf = (struct StructOfProtocol *)Buffer485;
ldi R20,<_Buffer485
ldi R21,>_Buffer485
.dbline 610
; if(communication->pc_txd)
movw R30,R22
ldd R2,z+1
tst R2
breq L156
X64:
.dbline 611
; {//发送数据给PC
.dbline 612
; communication->pc_txd = 0;
clr R2
std z+1,R2
.dbline 613
; p_buf->Address = Device_Address;
lds R2,_Device_Address
movw R30,R20
std z+0,R2
.dbline 614
; UDR = BOOT_CODE;
ldi R24,254
out 0xc,R24
.dbline 615
; }
L156:
.dbline 616
; if(communication->pc_rxd)
movw R30,R22
ldd R2,z+0
tst R2
brne X89
xjmp L158
X89:
X65:
.dbline 617
; {//pc发送给采集板的数据
.dbline 618
; communication->pc_rxd = 0;
clr R2
std z+0,R2
.dbline 619
; if((p_buf->Address==Device_Address)||(p_buf->Address == 0xff))
movw R30,R20
ldd R2,z+0
clr R3
movw R4,R2
lds R2,_Device_Address
cp R4,R2
breq L162
X66:
mov R24,R4
cpi R24,255
breq X90
xjmp L160
X90:
X67:
L162:
.dbline 620
; {
.dbline 621
; switch(p_buf->Command)
movw R30,R20
ldd R20,z+3
clr R21
cpi R20,31
ldi R30,0
cpc R21,R30
brne X91
xjmp L179
X91:
X68:
cpi R20,34
ldi R30,0
cpc R21,R30
brne X92
xjmp L168
X92:
X69:
cpi R20,35
ldi R30,0
cpc R21,R30
brne X93
xjmp L178
X93:
X70:
cpi R20,36
ldi R30,0
cpc R21,R30
brne X94
xjmp L170
X94:
X71:
cpi R20,37
ldi R30,0
cpc R21,R30
brne X95
xjmp L172
X95:
X72:
cpi R20,38
ldi R30,0
cpc R21,R30
brne X96
xjmp L174
X96:
X73:
ldi R24,38
ldi R25,0
cp R24,R20
cpc R25,R21
brge X97
xjmp L187
X97:
X74:
L186:
cpi R20,1
ldi R30,0
cpc R21,R30
brne X98
xjmp L166
X98:
X75:
cpi R20,2
ldi R30,0
cpc R21,R30
brne X99
xjmp L167
X99:
X76:
cpi R20,3
ldi R30,0
cpc R21,R30
brne X100
xjmp L177
X100:
X77:
cpi R20,4
ldi R30,0
cpc R21,R30
brne X101
xjmp L169
X101:
X78:
cpi R20,5
ldi R30,0
cpc R21,R30
brne X102
xjmp L171
X102:
X79:
cpi R20,6
ldi R30,0
cpc R21,R30
brne X103
xjmp L173
X103:
X80:
cpi R20,13
ldi R30,0
cpc R21,R30
brne X104
xjmp L175
X104:
X81:
cpi R20,1
ldi R30,0
cpc R21,R30
brge X105
xjmp L163
X105:
X82:
L188:
cpi R20,17
ldi R30,0
cpc R21,R30
brne X106
xjmp L183
X106:
X83:
xjmp L163
L187:
cpi R20,63
ldi R30,0
cpc R21,R30
brne X107
xjmp L180
X107:
X84:
cpi R20,64
ldi R30,0
cpc R21,R30
brne X108
xjmp L181
X108:
X85:
ldi R24,64
ldi R25,0
cp R24,R20
cpc R25,R21
brlt L190
X86:
L189:
cpi R20,45
ldi R30,0
cpc R21,R30
breq L176
X87:
xjmp L163
L190:
cpi R20,96
ldi R30,0
cpc R21,R30
brne X109
xjmp L182
X109:
X88:
xjmp L163
L166:
.dbline 624
; {
; case CMD_GET_DCUID://取控制器名称和版本号
; GET_NAME();
xcall _GET_NAME
.dbline 625
; break;
xjmp L164
L167:
.dbline 627
; case CMD_GET_TIME://取系统时间
; GET_TIME();
xcall _GET_TIME
.dbline 628
; break;
xjmp L164
L168:
.dbline 630
; case CMD_SET_TIME://下载系统时间
; SET_TIME();
xcall _SET_TIME
.dbline 631
; break;
xjmp L164
L169:
.dbline 633
; case CMD_GET_CARDSET://取系统卡注册表
; GET_CARDSET();
xcall _GET_CARDSET
.dbline 634
; break;
xjmp L164
L170:
.dbline 636
; case CMD_SET_CARDSET://下载系统卡注册表
; SET_CARDSET();
xcall _SET_CARDSET
.dbline 637
; break;
xjmp L164
L171:
.dbline 639
; case CMD_GET_USER://取用户楼层授权资料
; GET_USER();
xcall _GET_USER
.dbline 640
; break;
xjmp L164
L172:
.dbline 642
; case CMD_SET_USER://下载门禁时间组(设用户楼层授权资料)
; SET_USER();
xcall _SET_USER
.dbline 643
; break;
xjmp L164
L173:
.dbline 645
; case CMD_GET_USER_TIME://取用户时间组授权资料
; GET_USER_TIME();
xcall _GET_USER_TIME
.dbline 646
; break;
xjmp L164
L174:
.dbline 648
; case CMD_SET_USER_TIME://设用户时间组授权资料
; SET_USER_TIME();
xcall _SET_USER_TIME
.dbline 649
; break;
xjmp L164
L175:
.dbline 651
; case CMD_GET_AUTH_TIME://取电梯授权时间组
; GET_AUTH_TIME();
xcall _GET_AUTH_TIME
.dbline 652
; break;
xjmp L164
L176:
.dbline 654
; case CMD_SET_AUTH_TIME://设电梯授权时间组
; SET_AUTH_TIME();
xcall _SET_AUTH_TIME
.dbline 655
; break;
xjmp L164
L177:
.dbline 657
; case CMD_GET_CONFIG://取系统配置参数
; GET_CONFIG();
xcall _GET_CONFIG
.dbline 658
; break;
xjmp L164
L178:
.dbline 660
; case CMD_SET_CONFIG: //设置系统配置参数
; SET_CONFIG();
xcall _SET_CONFIG
.dbline 661
; break;
xjmp L164
L179:
.dbline 663
; case CMD_GET_PRODUCT_CODE://取产品标签代码
; GET_PRODUCT_CODE();
xcall _GET_PRODUCT_CODE
.dbline 664
; break;
xjmp L164
L180:
.dbline 666
; case CMD_SET_PRODUCT_CODE://设置产品标签代码
; SET_PRODUCT_CODE();
xcall _SET_PRODUCT_CODE
.dbline 667
; break;
xjmp L164
L181:
.dbline 669
; case CTL_GET_UNIT_STATUS: /*取控制器状态*/
; GET_UNIT_STATUS();
xcall _GET_UNIT_STATUS
.dbline 670
; break;
xjmp L164
L182:
.dbline 672
; case CTL_SET_UNIT_STATUS: /*设置控制器状态*/
; SET_UNIT_STATUS();
xcall _SET_UNIT_STATUS
.dbline 673
; break;
xjmp L164
L183:
.dbline 675
; case CMD_GET_EVENT://取控制器历史事件
; GET_EVENT();
xcall _GET_EVENT
.dbline 676
; break;
xjmp L164
L163:
.dbline 678
; default:
; if (TEST && p_buf->Address != 0xff)
xjmp L164
L164:
.dbline 682
; CommandReply(RESP_INVALID_INSTRUCT);
; break;
; }
; }
L160:
.dbline 683
; }
L158:
.dbline -2
L155:
.dbline 0 ; func end
xjmp pop_xgsetF000
.dbsym r p_buf 20 pS[StructOfProtocol]
.dbsym r communication 22 pS[data]
.dbend
; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -