📄 供暖控制_无线设备_v10.s43
字号:
;*******************************************************************
;* 数字家庭网络无线供暖控制模块源程序 *
;* V1.0 Dying *
;*******************************************************************
EntherNet EQU 1 ;1表示为无线设备
#include "msp430x14x.h"
#include "供暖控制_无线设备_V10.h"
#include "供暖控制.h"
;-----------------------------------------------------------------------------
; Program Start address
;-----------------------------------------------------------------------------
NAME WirelessCommunication
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
;------------------------------------------------------
InitializeRF
BIC.B #Standy_RF_OUT
CALL #program_DDS0_send
CALL #program_DDS1_receive
CALL #send_mode1_control_C_Learn
CALL #program_send_FSK
BIS.B #Standy_RF_OUT
BIC.B #Mode_RF_OUT
;-------------------------------------------------------
SetSPIReceive
BIC.B #SWRST,&U0CTL
MOV.B #(CHAR+SYNC),U0CTL
MOV.B #STC,U0TCTL
MOV.B #0,U0RCTL
BIS.B #USPIE0,&ME1
MOV #(TBSSEL0+MC0+TBCLR),&TBCTL
MOV #Xspeed_4Cycles,&TBCCR0
MOV #OUTMOD_7,&TBCCTL1
MOV #Xspeed_4CyclesHalf,&TBCCR1
BIC.B #UTXIE0,&IE1
BIC.B #URXIFG0,&IFG1
BIS.B #URXIE0,&IE1
MOV #SearchForTraining,&SPIReceiveEntrance
;------------------------------------------------------------
SetTimerA
CLR &EdgeCounter
CLR &ErrorF0Counter
MOV #(TASSEL0+MC1+TACLR),&TACTL
;-----------------------------------------------------
;initialize state variable
CLR &WorkFlagState
CLR &WorkStationState
CLR &TemperatureAlarm
;------------------------------------------------------------
SetUART
BIC.B #SWRST,&U1CTL
MOV.B #U1MCTL_Value,&U1MCTL
MOV.B #U1BR0_Value,&U1BR0
MOV.B #U1BR1_Value,&U1BR1
MOV.B #50H,&U1CTL
MOV.B #10H,&U1TCTL
MOV.B #00H,&U1RCTL
BIS.B #(URXE1+UTXE1),&ME2
BIS.B #URXIE1,&IE2
BIC.B #UTXIE1,&IE2
mov #RecFrameHeader1,&UARTReceiveEntrance
;-------------------------------------------------------------
;在地址1000h开始的flash中开19个字的存储空间。
;1000h作为是否有设备ID的标志。
;1002H-1007H 存储网关ID
;1008H-100DH 存储设备ID
;100EH-1013H 存储设备串号
;1014H-1015H 存储控制温度
;在RAM区相应开13个字的空间。
;标志位RAMSourceIDFlag值为1时,说明设备已存在ID
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 #FlashNetGateIDAddress,R5
CLR R6
FillRAMSourceID
MOV @R5+,NetGateID(R6) ;将地址读到RAM
INCD R6
CMP #12,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 #0008H,&ACKFrameLenghth
SWPB &ACKFrameLenghth
MOV #ACKFrameMask,&ACKFrameControl
SWPB &ACKFrameControl
MOV #5A5AH,&ACKFrameDuration
SWPB &ACKFrameDuration
CLR &ACKFrameHeaderCRC
MOV #SequenceNumberMask,&RFDataFrameCounter
MOV.B #0FFH,&RecUARTFrameHeader1
MOV.B #0FFH,&RecUARTFrameHeader2
MOV.B #0FFH,&TraUARTFrameHeader1
MOV.B #0FFH,&TraUARTFrameHeader2
BIS #SPISendIsEnd
EINT
;**************************************************************************
;Main Program ** Use Register R4 R5
;**************************************************************************
MainProgram
;------------------------------------------------------
;网关命令处理
BIT #StartBackUpData
JNC NothingGateNetCommand
BIC #StartBackUpData
CMP.B #01H,&TraUARTFrameType ;控制帧
JZ IsControlFrame
CMP.B #07H,&TraUARTFrameType ;读去数据
JZ IsReadDataFrame
CMP.B #0AH,&TraUARTFrameType ;下载菜单
JZ IsDownloadMenuFrame
JMP NothingGateNetCommand
IsControlFrame
IsReadDataFrame
IsDownloadMenuFrame
MOV.B #02H,&RecUARTFrameType
MOV.B #16H,&RecUARTFrameLength
MOV #RecUARTFrameCommand1,R5
MOV.B #6DH,0(R5)
MOV.B #01H,1(R5)
MOV.B &MeasureTemperatureHigh,2(R5)
MOV.B &MeasureTemperatureLow,3(R5)
MOV.B &ControlTemperatureHigh,4(R5)
MOV.B &ControlTemperatureLow,5(R5)
MOV.B &TimeOffHigh,6(R5)
MOV.B &TimeOffLow,7(R5)
MOV.B &TimeOnHigh,8(R5)
MOV.B &TimeOnLow,9(R5)
MOV.B &TimeNowHigh,10(R5)
MOV.B &TimeNowLow,11(R5)
MOV.B &StateWorksHigh,12(R5)
MOV.B &StateWorksLow,13(R5)
BIS #RS232BufferFull
NothingGateNetCommand
;------------------------------------------------------
;供暖控制温度测量
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.B #0CH,&RecUARTFrameLength
MOV #RecUARTFrameAddress,R5
MOV.B &NetGateID6,0(R5)
MOV.B &NetGateID5,1(R5)
MOV.B &NetGateID4,2(R5)
MOV.B &NetGateID3,3(R5)
MOV.B &NetGateID2,4(R5)
MOV.B &NetGateID1,5(R5)
MOV.B #04H,&RecUARTFrameType
MOV.B #0FH,7(R5)
MOV.B #5AH,8(R5)
MOV.B &TemperatureAlarmHigh,9(R5)
MOV.B &TemperatureAlarmLow,10(R5)
BIS #RS232BufferFull
;每隔30秒钟检测一次温度
CLR &WaitACKTimerCounter
BIC #MC1,&TACTL
MOV &TAR,&CCR2
ADD #BaseACKTimeCounter,&CCR2
BIS #MC1,&TACTL
MOV #CCIE,&CCTL2
GateNetStopAlarm
;------------------------------------------------------
cmp #7fffh,&dyingdying ;自恢复
jnz PowerDownStatus
BIS #CutPowerDownBIT
jmp DyingReset
PowerDownStatus
BIT #PowerDownBIT
JNC AwakenStatus
SleepStatus
CLR &TBCTL
BIC.B #Standy_RF_OUT
;; BIS #0098h,SR ;LPM2模式 CPU停止
; MCLK锁频换控制停止
; ACLK信号活动
BIC #PowerDownBIT
AwakenStatus
BIT #CutPowerDownBIT
JNC CommunicationError
DyingReset
DINT
CLR &TBCTL
BIC.B #04h,&P3SEL
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -