📄 供暖控制_以太网接口.s43
字号:
MOV #DeviceFileAddress,R5
MOV @R5,R7
CMP #0FFFFH,R7
JZ UDPDataEnd ;无设备文件
BIS #NetGateQueryOK
;设备名称的存储位置由devicefile的格式确定。设备名称的长度不定,在devicefile中
;用00h 00h标志结束。所以回应帧的长度也因此不定。
MOV #RS232_IP_Data,R5
MOV.B &SourceID6,0(R5)
MOV.B &SourceID5,1(R5)
MOV.B &SourceID4,2(R5)
MOV.B &SourceID3,3(R5)
MOV.B &SourceID2,4(R5)
MOV.B &SourceID1,5(R5)
MOV.B #00H,&RS232_IP_FrameControl
MOV.B #11H,&RS232_IP_FrameType
;; MOV.B &SeriesNumber3High,8(R5)
;; MOV.B &SeriesNumber3Low,9(R5)
MOV.B &SeriesNumber2High,8(R5)
MOV.B &SeriesNumber2Low,9(R5)
MOV.B &SeriesNumber1High,10(R5)
MOV.B &SeriesNumber1Low,11(R5)
MOV #0CH,R7
MOV #04H,R6
JMP ReadDevNameFrameFLASH
;----------------------------------------------
NetGateACKDeviceLoginOk ;注册设备
BIT #NetGateQueryOK
JNC UDPDataEnd
MOV #IP_RS232_FrameData,R4
;; CMP @R4+,&SeriesNumber3 ;如果收到得设备SN于本设备SN不符,
;; JNZ UDPDataEnd ;不对网关查询作出回应。
CMP @R4+,&SeriesNumber2
JNZ UDPDataEnd
CMP @R4+,&SeriesNumber1
JNZ UDPDataEnd
MOV #SourceID,R5 ;这相当于设备端的地址 ;保存设备新地址
MOV @R4+,0(R5)
MOV @R4+,2(R5)
MOV @R4+,4(R5)
BIC #NetGateQueryOK
BIS #RAMSourceIDFlag
CLR &SourceIDFlagRegister
BIS #StoreStateBit
MOV #RS232_IP_Data,R5
MOV.B &SourceID6,0(R5)
MOV.B &SourceID5,1(R5)
MOV.B &SourceID4,2(R5)
MOV.B &SourceID3,3(R5)
MOV.B &SourceID2,4(R5)
MOV.B &SourceID1,5(R5)
MOV.B #00H,&RS232_IP_FrameControl
MOV.B #13H,&RS232_IP_FrameType
MOV #08H,R7
CLR R6
ReadDevNameFrameFLASH
MOV #DeviceFileAddress,R4 ;从FLASH中读出写入设备名称
MOV 16(R4),R5
MOV 6(R4),R8
SWPB R8
AND #00FFH,R8
ADD R8,R5
RLA R5
ADD R4,R5
FillDeviceName
TST.B 0(R5)
JZ IsDeviceNameEnd
MOV.B @R5+,RS232_IP_FrameData(R6)
INC R6
INC R7
CMP #97,R6 ;注册时设备名称最多96个字节的汉字
JZ IsDeviceNameEnd ;查询时设备名称最多90个字节的汉字
JMP FillDeviceName
IsDeviceNameEnd
MOV.B #00H,RS232_IP_FrameData(R6) ;设备名有两个字节的00H 00H表示结束
INC R6
MOV.B #00H,RS232_IP_FrameData(R6)
INCD R7 ;两个00H长度
MOV R7,&RS232_IP_FrameLength
ADD #12,&RS232_IP_FrameLength ;加上12个字节的特征数据和保留字
MOV #1980H,&DateCharacterHigh ;数据特征字
MOV #8019H,&DataCharacterLow
CLR &Reserve1
CLR &Reserve2
CLR &Reserve3
CLR &Reserve4
MOV #RS232ToIPStartData,R5
CALL #RS232CheckSum
BIS #RS232BufferFull
RET
;----------------------------------------------
SearchDeviceID ;网关查询设备地址
MOV #IP_RS232_FrameData,R4
;; CMP @R4+,&SeriesNumber3
;; JNZ UDPDataEnd
CMP @R4+,&SeriesNumber2
JNZ UDPDataEnd
CMP @R4,&SeriesNumber1
JNZ UDPDataEnd
MOV #RS232_IP_Data,R5 ;写入源地址
MOV #SourceID,R4
MOV @R4+,0(R5)
MOV @R4+,2(R5)
MOV @R4+,4(R5)
MOV.B #00H,&RS232_IP_FrameControl ;写控制字
MOV.B #1BH,&RS232_IP_FrameType ;写入帧类型--设备确认查询
MOV #RS232_IP_FrameData,R6
;; MOV.B &SeriesNumber3High,0(R6)
;; MOV.B &SeriesNumber3Low,1(R6)
MOV.B &SeriesNumber2High,0(R6) ;2(R6)
MOV.B &SeriesNumber2Low,1(R6) ;3(R6)
MOV.B &SeriesNumber1High,2(R6) ;4(R6)
MOV.B &SeriesNumber1Low,3(R6) ;5(R6)
MOV #SourceID,R4
MOV.B @R4+,4(R6) ;6(R6)
MOV.B @R4+,5(R6) ;7(R6)
MOV.B @R4+,6(R6) ;8(R6)
MOV.B @R4+,7(R6) ;9(R6)
MOV.B @R4+,8(R6) ;10(R6)
MOV.B @R4+,9(R6) ;11(R6)
;; MOV #20,&RS232_IP_FrameLength
MOV #18,&RS232_IP_FrameLength
ADD #12,&RS232_IP_FrameLength ;加上12个字节的特征数据和保留字
MOV #1980H,&DateCharacterHigh ;数据特征字
MOV #8019H,&DataCharacterLow
CLR &Reserve1
CLR &Reserve2
CLR &Reserve3
CLR &Reserve4
MOV #RS232ToIPStartData,R5
CALL #RS232CheckSum
BIS #RS232BufferFull
RET
;----------------------------------------------
ToPurgeDevice ;按UDS删除设备
MOV #SourceID,R5
MOV #IP_RS232_FrameData,R4
CMP @R4+,0(R5)
JNZ UDPDataEnd
CMP @R4+,2(R5)
JNZ UDPDataEnd
CMP @R4,4(R5)
JNZ UDPDataEnd
JMP EarseDeviceID
;-----------------------------------------------
PurgeDeviceBySN ;按串号删除设备
MOV #IP_RS232_FrameData,R4
;; CMP @R4+,&SeriesNumber3
;; JNZ UDPDataEnd
CMP @R4+,&SeriesNumber2
JNZ UDPDataEnd
CMP @R4,&SeriesNumber1
JNZ UDPDataEnd
EarseDeviceID
BIC #RAMSourceIDFlag
MOV #0FFFFH,&SourceIDFlagRegister
MOV #SourceID,R5
MOV.B #00H,0(R5)
MOV.B #00H,1(R5)
MOV.B #00H,2(R5)
MOV.B #00H,3(R5)
MOV.B #00H,4(R5)
MOV.B #00H,5(R5)
BIS #StoreStateBit
RET
;------------------------------------------------
ApplyDeviceFile ;申请下载设备文件
BIT #RAMSourceIDFlag
JNC UDPDataEnd ;如果设备没有注册,本程序不对非广播帧作处理。
;包括不回应MAC层ACK。
CMP #0,&DeviceFileFrameNumber
JZ UDPDataEnd ;如果没有devicefile,此帧无效。
MOV #RS232_IP_Data,R5 ;写入源地址
MOV #SourceID,R4
MOV @R4+,0(R5)
MOV @R4+,2(R5)
MOV @R4+,4(R5)
MOV.B #00H,&RS232_IP_FrameControl ;写控制字
MOV.B #15H,&RS232_IP_FrameType ;写入帧类型
MOV #IP_RS232_FrameData,R5 ;读帧序列号
CLR R4
MOV.B @R5+,R4 ;同时清掉高位
SWPB R4
BIS.B @R5,R4
MOV R4,R7
BIC #0C000H,R4
BIS #08000H,R4
CLR R6
SWPB R4
MOV.B R4,RS232_IP_FrameData(R6) ;写入帧序列号
INC R6
SWPB R4
MOV.B R4,RS232_IP_FrameData(R6)
INC R6
BIC #0C000H,R4
INC R4
CMP R4,&DeviceFileFrameNumber
JNZ NotLastDeviceFileFrame
DECD R6
BIS.B #40H,RS232_IP_FrameData(R6) ;是最后一帧
INCD R6
NotLastDeviceFileFrame
CLR R5
UpLoadDeviceFileShift
CMP #00H,R7
JZ EndUpLoadDeviceFileShift
ADD #DeviceFileFrameSize,R5
DEC R7
JMP UpLoadDeviceFileShift
EndUpLoadDeviceFileShift
MOV #10,R7
MOV #DeviceFileFrameSize,R4
FillUpLoadContent
MOV DeviceFileAddress(R5),RS232_IP_FrameData(R6)
INCD R5
INCD R6
INCD R7
DECD R4
JNZ FillUpLoadContent
MOV R7,&RS232_IP_FrameLength
ADD #12,&RS232_IP_FrameLength ;加上12个字节的特征数据和保留字
MOV #1980H,&DateCharacterHigh ;数据特征字
MOV #8019H,&DataCharacterLow
CLR &Reserve1
CLR &Reserve2
CLR &Reserve3
CLR &Reserve4
MOV #RS232ToIPStartData,R5
CALL #RS232CheckSum
BIS #RS232BufferFull
RET
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
UDPDataEnd
RET
;.........................................................
IASHMPOffer
ADD #14,R7
MOV @R7+,&RAMNetGateIP4 ;准备发送ARP测试分配的IP地址
MOV @R7+,&RAMNetGateIP2
MOV @R7+,&RAMWirelessID6
MOV @R7+,&RAMWirelessID4
MOV @R7+,&RAMWirelessID2
BIS #StartARPBit
RET
;.........................................................
IASHMPSuccess
ADD #14,R7
MOV @R7+,&RAMSelfIP4
MOV @R7+,&RAMSelfIP2
MOV @R7+,&RAMWirelessID6
MOV @R7+,&RAMWirelessID4
MOV @R7+,&RAMWirelessID2
MOV &RAMSelfIP4,&TempRAMIP4
MOV &RAMSelfIP2,&TempRAMIP2
MOV &MACResourceUDS,&RAMNetGateMAC6
MOV &(MACResourceUDS+2),&RAMNetGateMAC4
MOV &(MACResourceUDS+4),&RAMNetGateMAC2
MOV &ICMP_IP_ResourceIP,&RAMNetGateIP4
MOV &(ICMP_IP_ResourceIP+2),&RAMNetGateIP2
BIS #EnrolBeNetGate
BIS #(TBIE+MC1),&TBCTL
BIS #StoreStateBit
RET
;.........................................................
IASHMPMust
BIS #StartEnrolBit
MOV #0110H,&EnrolType
MOV.B #00H,&RAMSelfIP4
MOV.B #00H,&RAMSelfIP3
MOV.B #00H,&RAMSelfIP2
MOV.B #00H,&RAMSelfIP1
BIC #EnrolBeNetGate ;网关强制重新注册
RET
;******************************************************************************
;subroutine: TCPFrame_Receive
;******************************************************************************
TCPFrame_Receive
RET
;******************************************************************************
;subroutine: ProcessUDPFrame_Transmit ;数据改为在RS232_IP_XXX中
;******************************************************************************
ProcessUDPFrame_Transmit
MOV #IP_EthernetFrameData,R4
MOV &RAMNetGateMAC6,0(R4) ;接收MAC地址——网关地址
MOV &RAMNetGateMAC4,2(R4)
MOV &RAMNetGateMAC2,4(R4)
MOV &RAMModelMAC6,6(R4) ;这里使用无线ID作为网卡MAC地址
MOV &RAMModelMAC4,8(R4)
MOV &RAMModelMAC2,10(R4)
MOV #MACType_IP,&IP_MACType
MOV.B #IP_VER_IHL,&IP_VarAndLength
MOV.B #IP_TOS_D,&IP_TOS ;服务类型选用最小延时
CLR &IP_ByteLength
MOV &RS232_IP_FrameLength,&IP_ByteLength
ADD #28,&IP_ByteLength ;28=IP头长度(20)+UDP首部(8)
SWPB &IP_ByteLength
MOV &UDPTransmitCounter,&IP_Identification
INC &UDPTransmitCounter
SWPB &IP_Identification
MOV #0000H,&IP_FlagAndPoint
SWPB &IP_FlagAndPoint
MOV.B #64,&IP_LiveTime
MOV.B #Protocol_UDP,&IP_ProtocolType
MOV #0000H,&IP_HeadCheckSum
MOV #IP_ResourceIP,R14
MOV &RAMSelfIP4,0(R14)
MOV &RAMSelfIP2,2(R14)
MOV &RAMNetGateIP4,4(R14)
MOV &RAMNetGateIP2,6(R14)
CALL #HeadCheckSum_IP
MOV &CheckSum_TCPUDP,&IP_HeadCheckSum
BIT #StartEnrolBit
JC NotWorkUDP
MOV #MyWorkPort,&UDP_ResourcePort
MOV &UDP_Rec_SourcePort,&UDP_DestinationPort
JMP DealWithPort
NotWorkUDP
MOV
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -