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

📄 供暖控制_以太网接口.s43

📁 用MSP430汇编写的简单IP协议程序
💻 S43
📖 第 1 页 / 共 5 页
字号:
        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 + -