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

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

📁 用MSP430汇编写的简单IP协议程序
💻 S43
📖 第 1 页 / 共 5 页
字号:
WaitRS232SendEnd
        BIT     #RS232SendNowBit
        JC      WaitRS232SendEnd
        CALL    #UDPFrame_Receive
        JMP     TestDataGood         
        
IsTCPFrame
        CMP.B   #Protocol_TCP,&ICMP_IP_ProtocolType
        JNZ     TheDataError                       
        CALL    #TCPFrame_Receive                        
TestDataGood
        CMP     #00CCH,R4
        JZ      TheDataError
        BR      #Main_Loop

;******************************************************************************
;subroutine:  Delay
;******************************************************************************
Delay                                                                                                      
        PUSH    #0FFH	                                        ; Delay for crystal start
L1      DEC     0(SP)
        JNZ     L1
        INCD    SP
        RET           

;******************************************************************************
;subroutine:  Delay1000
;******************************************************************************
Delay1000
        PUSH    #1000
Loop1000
        DEC     0(SP)
        JNZ     Loop1000
        INCD    SP
        RET              
        
;***************************************************************************
;subroutine:  TemperatureProgram
;***************************************************************************
TemperatureProgram 
       
        mov    #55h,&MeasureTemperature

	RET
	
;******************************************************************************
;subroutine:  RingPrepare
;******************************************************************************
RingPrepare        
        MOV.B   &MACHead_NextPackerPoint,R14    
        DEC     R14      
        CMP.B   #4BH,R14
        JNZ     NotLastRing
        MOV.B   #7FH,R14
NotLastRing     
        MOV.B   R14,&BoundaryPointer          

        MOV     #00H,R15                                       
        MOV     #22H,R14
        CALL    #WriteAX88796Register  
        MOV.B   &BoundaryPointer,R14
        
        MOV     #03h,R15      
        CALL    #WriteAX88796Register
        RET

;******************************************************************************
;subroutine:  Init_AX88796
;******************************************************************************
Init_AX88796
        BIC.B   #Ethernet_RESET
        CALL    #Delay1000
        CALL    #Delay1000
        CALL    #Delay1000
        
        MOV     #00H,R15
        MOV     #21H,R14
        CALL    #WriteAX88796Register
        CALL    #Delay1000
        CALL    #Delay1000
        CALL    #Delay1000        
        MOV     #21,R4                        
        MOV     #Initialization_AX88796,R5
Init_Loop
        MOV.B   @R5+,R14
        MOV.B   @R5+,R15
        CALL    #WriteAX88796Register
        DEC     R4
        JNZ     Init_Loop

        MOV     #06H,R15                                        ;写入MAC地址,这里使用的是网关ID作为网卡地址
        MOV     #RAMModelMAC,R4       
WriteMACAddress        
        MOV.B   @R4+,R14          
        CALL    #WriteAX88796Register
        DEC     R15
        JNZ     WriteMACAddress

        MOV     #00H,R15                                        ;开始工作
        MOV     #62H,R14
        CALL    #WriteAX88796Register

        MOV.B   #4CH,&BoundaryPointer
        RET

Initialization_AX88796
        DW      0A00H
        DW      0B00H
        DW      0C5FH
        DW      0DE0H
        DW      0EC8H
        DW      0F00H           ;中断使能寄存器
        
        DW      014CH           ;开始页寄存器
        DW      0280H           ;停止页寄存器
        DW      034CH           ;边界指针寄存器
        DW      0440H           ;发送开始页寄存器
                                
        DW      07FFH           ;中断标志寄存器

        DW      0061H           ;设置为PAGE1
        DW      074DH           ;设置当前页

        DW      08FFH           ;设置组播地址
        DW      09FFH
        DW      0AFFH
        DW      0BFFH
        DW      0CFFH
        DW      0DFFH 
        DW      0EFFH
        DW      0FFFH 
                
;******************************************************************************
;subroutine:  WriteAX88796Register   R15:Regist address  R14: The Command
;******************************************************************************
WriteAX88796Register
        BIS.B   #Ethernet_PSEN                                  ; PSEN = 1;	 
        BIC.B   #Ethernet_CS                                    ; CS = 0;	
        MOV.B   #WriteData              
        MOV.B   R14,&WriteDataBUS
        ADD.B   #IOBase,R15	                        
        MOV.B   R15,&AddressBUS             
        BIC.B   #Ethernet_IOWR                                  ; IOW = 0
        BIS.B   #Ethernet_IOWR                                  ; IOW = 1;  
        BIC.B   #Ethernet_PSEN
        BIS.B   #Ethernet_CS
        RET

;******************************************************************************
;subroutine:  ReadAX88796Register    R15:Regist address  R14: The Command
;******************************************************************************
ReadAX88796Register
        BIS.B   #Ethernet_PSEN                                  ; PSEN = 1;		
        BIC.B   #Ethernet_CS                                    ; CS = 0;	
        MOV.B   #ReadData        
        ADD.B   #IOBase,R15	                        
        MOV.B   R15,&AddressBUS   
        BIC.B   #Ethernet_IORB                                  ; IOR = 0;  
        MOV.B   &ReadDataBUS,R14
        BIS.B   #Ethernet_IORB                                  ; IOR = 1  
        BIC.B   #Ethernet_PSEN 
        BIS.B   #Ethernet_CS
        RET

;******************************************************************************
;subroutine:  WriteAX88796Frame    R9:Frame point   R8: Frame length
;******************************************************************************
;发送时少于64个字节的数据要补00H到64个字节
WriteAX88796Frame  
        MOV     #00H,R15
        MOV     #22H,R14
        CALL    #WriteAX88796Register
        BIT     #SelectBufferBit
        JC      UserTransmitBuffer2
UserTransmitBuffer1        
        MOV     #40H,R14      
        JMP     TransmitBufferFIFO
UserTransmitBuffer2
        MOV     #46H,R14  
TransmitBufferFIFO 
        MOV     #09H,R15
        CALL    #WriteAX88796Register       
        MOV     #08H,R15
        MOV     #00H,R14
        CALL    #WriteAX88796Register
        MOV     #0AH,R15
        CMP     #60,R8 
        MOV.B   R8,R14
        JHS     SendDataMuch60  
        MOV.B   #60,R14
SendDataMuch60        
        CALL    #WriteAX88796Register
        MOV     #0BH,R15
        MOV     R8,R14
        SWPB    R14
        CALL    #WriteAX88796Register
        MOV     #00H,R15
        MOV     #12H,R14
        CALL    #WriteAX88796Register
;--------------------------------------------------------------------------------------
        CLR     R13
        CMP     #IP_EthernetFrameData,R9
        JZ      SendUDPorTCPFrame
PrepareLength        
        MOV.B   #10H,R15        
        MOV.B   @R9+,R14
        CALL    #WriteAX88796Register
        INC     R13
        DEC     R8
        JNZ     PrepareLength
        JMP     WriteDataEnd
;-------------------------------------------------        
SendUDPorTCPFrame
        MOV     #42,R6                                          ;42=MAC首部14+IP首部20+UDP首部8
        CMP.B   #Protocol_TCP,&IP_ProtocolType
        JNZ     ToSendUDPData
        MOV     #54,R6                                          ;54=MAC首部14+IP首部20+TCP首部20
ToSendUDPData        
        MOV.B   #10H,R15
        MOV.B   @R9+,R14
        CALL    #WriteAX88796Register
        INC     R13
        DEC     R8
        CMP     R6,R13                                         
        JNZ     SendUDPorTCPFrame
        
        MOV     #RS232ToIPStartData,R9 
WriteRS232Data        
        MOV     #10H,R15
        MOV.B   @R9+,R14
        CALL    #WriteAX88796Register
        INC     R13
        DEC     R8
        JNZ     WriteRS232Data
WriteDataEnd        
        CMP     #60,R13
        JHS     FinishWriteData
SendIsTooSmall
        MOV.B   #10H,R15
        CLR     R14
        CALL    #WriteAX88796Register
        INC     R13
        CMP     #60,R13
        JNZ     SendIsTooSmall     
FinishWriteData           
;--------------------------------------------------------------------------------------        
;        MOV     #06H,R8
;WaitLoop
;        MOV     #1000,R9
;WaitDelay
;        MOV     #00H,R15
;        CALL    #ReadAX88796Register
;        BIT.B   #04H,R14
;        JNC     WaitEnd1 
;        DEC     R9
;        JNZ     WaitDelay
;WaitEnd1
;        MOV     #04H,R15
;        CALL    #ReadAX88796Register
;        BIT.B   #01H,R14
;        JC      WaitEnd2
;        MOV     #00H,R15
;        MOV     #3EH,R14
;        CALL    #WriteAX88796Register
;        DEC     R8
;        JNZ     WaitLoop
;WaitEnd2                
;---------------------------------------------
        BIT     #SelectBufferBit
        JC      SelectBuffer2
SelectBuffer1
        BIS     #SelectBufferBit
        MOV     #40H,R14
        JMP     SelectBufferEnd
SelectBuffer2
        BIC     #SelectBufferBit
        MOV     #46H,R14
SelectBufferEnd 
        MOV     #04H,R15
        CALL    #WriteAX88796Register
        MOV     #05H,R15
        MOV     R13,R14
        CALL    #WriteAX88796Register
        MOV     #06H,R15
        MOV     R13,R14
        SWPB    R14
        CALL    #WriteAX88796Register
        MOV     #00H,R15
        MOV     #3EH,R14
        CALL    #WriteAX88796Register
        RET

;******************************************************************************
;subroutine:  ReadAX88796Frame      R9: Frame point   R8: Frame length
;******************************************************************************
ReadAX88796Frame
        RET

;******************************************************************************
;subroutine:  ProcessARP_Answer
;******************************************************************************
ProcessARP_Answer
        MOV     #MACDestinationUDS,R14
        MOV     &RAMNetGateMAC6,0(R14)                          ;接收MAC地址——网关地址
        MOV     &RAMNetGateMAC4,2(R14)
        MOV     &RAMNetGateMAC2,4(R14)
        MOV     &RAMModelMAC6,6(R14)                          ;这里使用无线ID作为网卡MAC地址
        MOV     &RAMModelMAC4,8(R14)
        MOV     &RAMModelMAC2,10(R14)                
        MOV     #MACType_ARP,&MACType

        MOV     #0100H,&ARP_HardwareType                        ;硬件类为0001H表示以太网地址
        MOV     #MACType_IP,&ARP_ProtocolType                   ;这里应该写IP的类型而不是ARP的类型
        MOV.B   #06H,&ARP_HardwareLength                        ;对于以太网IP地址的APR请求合应答来说
        MOV.B   #04H,&ARP_ProtocolLength                        ;硬件地址长度和协议地址长度分别为06H和04H
        MOV     #0200H,&ARP_OP                                  ;ARP应答帧该值为0002H                                                    
        MOV     #ARP_TransmitUDS,R14                 
        MOV     &RAMModelMAC6,0(R14)                          ;ARP_TransmitUDS
        MOV     &RAMModelMAC4,2(R14)
        MOV     &RAMModelMAC2,4(R14)
        MOV     &RAMSelfIP4,6(R14)                              ;ARP_TransmitIP
        MOV     &RAMSelfIP2,8(R14)
        MOV     &RAMNetGateMAC6,10(R14)                         ;ARP_ReceiveUDS
        MOV     &RAMNetGateMAC4,12(R14)
        MOV     &RAMNetGateMAC2,14(R14)              
        MOV     &RAMNetGateIP4,16(R14)                          ;ARP_ReceiveIP
        MOV     &RAMNetGateIP2,18(R14) 
        
        MOV     #EthernetFrameData,R9
        MOV     #2AH,R8
        CALL    #WriteAX88796Frame

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -