📄 供暖控制_以太网接口.s43
字号:
;******************************************************************************
; 数字化家电新网关以太网控制供暖设备源程序
; ---------Dying V1.0
;******************************************************************************
EntherNet EQU 0 ;0表示为以太网设备
#include "msp430x14x.h"
#include "供暖控制_以太网控制器.h"
#include "供暖控制_IP协议.h"
#include "供暖控制.h"
;******************************************************************************
;宏定义
ReadSomeByte MACRO
MOV #00H,R15
MOV #22H,R14
CALL #WriteAX88796Register
MOV #09H,R15
MOV.B &BoundaryPointer,R14
CALL #WriteAX88796Register
MOV #08H,R15
MOV R5,R14 ;R5为要读数据的起始位置
CALL #WriteAX88796Register
MOV #0BH,R15
MOV #00H,R14
CALL #WriteAX88796Register
MOV #0AH,R15
MOV R4,R14 ;R4为要读的字节数
CALL #WriteAX88796Register
MOV #00H,R15
MOV #0AH,R14
CALL #WriteAX88796Register
ENDM
;******************************************************************************
;Main Programe: EthernetInterface
;******************************************************************************
NAME EthernetInterface
RSEG CODE
Main
RESET
MOV #(RAMOrig+400h),SP ; Initialize stackpointer
SetupWDT
MOV #(WDTPW+WDTHOLD),&WDTCTL ; Stop WDT
;------------------------------------------------------------------------------
; SETUP CLOCK
;------------------------------------------------------------------------------
SetupBC
BIS.B #XTS,&BCSCTL1 ; turn on high frequency crystal
wait_HF_oscillator ; This loop will wait till
BIC.b #OFIFG,&IFG1 ; high frequency crystal is stable
BIT.b #OFIFG,&IFG1
JNZ wait_HF_oscillator
CALL #Delay ; wait for crystal stable
BIC.b #OFIFG,&IFG1 ; Reset osc. fault flag again
; Then set MCLK same as LFXTCL
MOV.B #(DIVS1+SELS+SELM0+SELM1),&BCSCTL2
;--------------------------------------------------------------------
SETUP_PORT
MOV.B #P1SEL_DEFAULT
MOV.B #P2SEL_DEFAULT
MOV.B #P3SEL_DEFAULT
MOV.B #P4SEL_DEFAULT
MOV.B #P5SEL_DEFAULT
MOV.B #P6SEL_DEFAULT
MOV.B #P1DIR_DEFAULT
MOV.B #P2DIR_DEFAULT
MOV.B #P3DIR_DEFAULT
MOV.B #P4DIR_DEFAULT
MOV.B #P5DIR_DEFAULT
MOV.B #P6DIR_DEFAULT
MOV.B #P1OUT_DEFAULT
MOV.B #P2OUT_DEFAULT
MOV.B #P3OUT_DEFAULT
MOV.B #P4OUT_DEFAULT
MOV.B #P5OUT_DEFAULT
MOV.B #P6OUT_DEFAULT
;------------------------------------------------------------
SetUART
BIC.B #(SWRST+SYNC),&U0CTL
MOV.B #U0MCTL_Value,&U0MCTL
MOV.B #U0BR0_Value,&U0BR0
MOV.B #U0BR1_Value,&U0BR1
MOV.B #50H,&U0CTL
MOV.B #10H,&U0TCTL
MOV.B #00H,&U0RCTL
BIS.B #(URXE0+UTXE0),&ME1
BIS.B #URXIE0,&IE1
BIC.B #UTXIE0,&IE1
;------------------------------------------------------------
SetTimer
MOV #(TASSEL0+MC1+TACLR),&TACTL
MOV #(TBSSEL0+ID1+ID0+TBCLR),&TBCTL
;-------------------------------------------------------------
BIS.B #Ethernet_RESET
CLR &WorkStationState
MOV #RecFrameHeader1,&UARTReceiveEntrance
EINT
;-------------------------------------------------------------
CALL #Init_AX88796
CALL #Delay1000
CLR &UDPTransmitCounter
;-------------------------------------------------------------
;1000H-1005H 存放无线网关地址
;1006H-1009H 存放网关模块IP地址
;100AH-100BH 作为是否有设备ID的标志。
;100CH-1011H 存储无线设备ID
;1012H-1017H 存储设备串号
;1018H-1019H 存储控制温度
;101AH-101BH 存储关机时间
;101CH-101DH 存储开机时间
;在RAM区相应开13个字的空间。
;标志位RAMSourceIDFlag值为1时,说明设备已存在ID
MOV #FlashAddress,R5
MOV @R5+,&RAMWirelessID6
MOV @R5+,&RAMWirelessID4
MOV @R5+,&RAMWirelessID2
CMP #0FFH,&RAMWirelessID6
JNZ TheIDHaveBeenWrited
CMP #0FFH,&RAMWirelessID4
JNZ TheIDHaveBeenWrited
CMP #0FFH,&RAMWirelessID2
JNZ TheIDHaveBeenWrited
CLR &RAMWirelessID6
CLR &RAMWirelessID4
CLR &RAMWirelessID2
TheIDHaveBeenWrited
;-------------------------------------------------------------
ProgramForSourceID
MOV #0FFFFH,&SourceIDFlagRegister
MOV #FlashSourceIDFlagAddress,r5
MOV @R5,R6
CMP #0,R6
JZ ThereIsSourceID
MOV.B #00H,&SourceID6
MOV.B #00H,&SourceID5
MOV.B #00H,&SourceID4
MOV.B #00H,&SourceID3
MOV.B #00H,&SourceID2
MOV.B #00H,&SourceID1
JMP FillRAMSeriesNumber
ThereIsSourceID
CLR &SourceIDFlagRegister
BIS #RAMSourceIDFlag
MOV #FlashSourceIDAddress,R5
CLR R6
FillRAMSourceID
MOV @R5+,SourceID(R6) ;将地址读到RAM
INCD R6
CMP #6,R6
JNZ FillRAMSourceID
FillRAMSeriesNumber
MOV #FlashSeriesNumberAddress,R5 ;将串号读到RAM
MOV @R5+,&SeriesNumber3 ;暂时不用
MOV @R5+,&SeriesNumber2
MOV @R5+,&SeriesNumber1
;读控制温度、关机时间、开机时间、当前时间、当前状态
BIT #8000H,&FlashControlTemperature
JNC HaveControlTemperature
MOV #0056H,&ControlTemperature ;没有设置控制温度时的缺省温度
JMP NothingControlTemperature
HaveControlTemperature
MOV &FlashControlTemperature,&ControlTemperature
NothingControlTemperature
;如果没有控制温度要默认一个。应该具有一个读取当前状态的功能,保证开机是正确读出当前状态
MOV.B #12H,&TimeOffHigh
MOV.B #34H,&TimeOffLow
MOV.B #56H,&TimeOnHigh
MOV.B #78H,&TimeOnLow
MOV.B #9AH,&TimeNowHigh
MOV.B #0BCH,&TimeNowLow
;?????定时开关机的处理
;--------------------------------------------------------------
;计算DeviceFile的长度,为网关上载DeviceFile作准备。
CalDeviceFileNumber2
MOV #DeviceFileAddress,R15
MOV @R15,R14
CMP #0FFFFH,R14
JZ ThereNoDeviceFile1
ADD #4,R15 ;从第3个字开始存放的是设备文件长度
MOV @R15,R14
RLA R14
CLR R15
CalDeviceFileNumber3
CMP #DeviceFileFrameSize,R14 ;#DeviceFileFrameSize为包长度
JHS CalDeviceFileNumber4
INC R15 ;统计设备文件备份成的包个数
MOV R15,&DeviceFileFrameNumber ;&DeviceFileFrameNumber设备文件的包个数
JMP PrepareData
CalDeviceFileNumber4
INC R15
SUB #DeviceFileFrameSize,R14
JMP CalDeviceFileNumber3
ThereNoDeviceFile1
MOV #0,&DeviceFileFrameNumber
PrepareData
;-------------------------------------------------------------
;无线模块注册信息
MOV.B #0FFH,&RAMNetGateMAC6
MOV.B #0FFH,&RAMNetGateMAC5
MOV.B #0FFH,&RAMNetGateMAC4
MOV.B #0FFH,&RAMNetGateMAC3
MOV.B #0FFH,&RAMNetGateMAC2
MOV.B #0FFH,&RAMNetGateMAC1
MOV.B #0FFH,&RAMNetGateIP4
MOV.B #0FFH,&RAMNetGateIP3
MOV.B #0FFH,&RAMNetGateIP2
MOV.B #0FFH,&RAMNetGateIP1
MOV.B #00H,&RAMModelMAC6
MOV.B #11H,&RAMModelMAC5
MOV.B #22H,&RAMModelMAC4
MOV.B #33H,&RAMModelMAC3
MOV.B #44H,&RAMModelMAC2
MOV.B #66H,&RAMModelMAC1
MOV.B #00H,&RAMSelfIP4
MOV.B #00H,&RAMSelfIP3
MOV.B #00H,&RAMSelfIP2
MOV.B #00H,&RAMSelfIP1
MOV.B #00H,&TempRAMIP4
MOV.B #00H,&TempRAMIP3
MOV.B #00H,&TempRAMIP2
MOV.B #00H,&TempRAMIP1
MOV #0110H,&EnrolType
BIS #StartEnrolBit
BIS #(TBIE+MC1),&TBCTL
BIC #EnrolBeNetGate
MOV #01FFFH,R5
DyingDelay
CALL #Delay
DEC R5
JNZ DyingDelay
EINT
; bis #EnrolBeNetGate
;
; mov.b #00H,&RAMNetGateMAC6
; mov.b #03H,&RAMNetGateMAC5
; mov.b #0FFH,&RAMNetGateMAC4
; mov.b #0C0H,&RAMNetGateMAC3
; mov.b #10H,&RAMNetGateMAC2
; mov.b #2BH,&RAMNetGateMAC1
; mov.b #0C0H,&RAMNetGateIP4
; mov.b #0A8H,&RAMNetGateIP3
; mov.b #13H,&RAMNetGateIP2
; mov.b #06H,&RAMNetGateIP1
;
; mov.b #0C0H,&RAMSelfIP4
; mov.b #0A8H,&RAMSelfIP3
; mov.b #13H,&RAMSelfIP2
; mov.b #04H,&RAMSelfIP1
;******************************************************************
;主程序循环
Main_Loop
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;供暖控制温度测量
BIT #RAMSourceIDFlag
JNC GateNetStopAlarm
BIT #TemperatureAlarmBit
JNC GateNetStopAlarm
CALL #TemperatureProgram
BIC #TemperatureAlarmBit
AutoTemperatureControl
CMP #StartSystemCommand,&StateWorks ;开启供暖系统 (这里是系统开启)
JNZ HeatSystemOff
MOV &ControlTemperature,R5
INCD R5
CMP &MeasureTemperature,R5 ;回差值是02H
JHS HighControlTemperature
DECD R5
DECD R5
CMP &MeasureTemperature,R5
JL LowControlTemperature
JMP GateNetStopAlarm
HighControlTemperature
BIC.B #ControlHeat ;系统开启状态停止供暖
JMP HeatSystemOff
LowControlTemperature
BIS.B #ControlHeat ;系统开启状态开始供暖
HeatSystemOff
BIS #HighTemperatureAlarm
CMP #TemperatureHighAlarmLimit,&MeasureTemperature
JHS SysTemperatureAlarm
BIC #HighTemperatureAlarm
BIS #LowTemperatureAlarm
CMP #TemperatureLowAlarmLimit,&MeasureTemperature
JL SysTemperatureAlarm
BIC #LowTemperatureAlarm
BIC #StopAlarmBit
JMP GateNetStopAlarm
;供暖控制报警处理
SysTemperatureAlarm
BIT #StopAlarmBit
JC GateNetStopAlarm
MOV #0CH,&RS232_IP_FrameLength
ADD #12,&RS232_IP_FrameLength ;加上12个字节的特征数据和保留字
MOV #RS232ToIPStartData,R5
MOV #1980H,0(R5)
MOV #8019H,2(R5)
CLR 4(R5)
CLR 6(R5)
CLR 8(R5)
CLR 10(R5)
MOV.B &SourceID6,12(R5)
MOV.B &SourceID5,13(R5)
MOV.B &SourceID4,14(R5)
MOV.B &SourceID3,15(R5)
MOV.B &SourceID2,16(R5)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -