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

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

📁 用MSP430汇编写的简单IP协议程序
💻 S43
📖 第 1 页 / 共 5 页
字号:
;******************************************************************************
;                      数字化家电新网关以太网控制供暖设备源程序
;                                           ---------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 + -