📄 供暖控制_以太网接口.s43
字号:
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 + -