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

📄 供暖控制_无线设备_v10.s43

📁 用MSP430汇编写的简单IP协议程序
💻 S43
📖 第 1 页 / 共 5 页
字号:
;*******************************************************************
;*              数字家庭网络无线供暖控制模块源程序                     *
;*                                            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 + -