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

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

📁 用MSP430汇编写的简单IP协议程序
💻 S43
📖 第 1 页 / 共 5 页
字号:
ApplySoundFile                         ;申请下载语音文件
;       (暂时没有这部分功能)        

WirelessModuleDealwithEnd           
        EINT

;**************************************************************************
RFSendInformation
        BIT     #RS232BufferFull
        JNC     WriteUDSAndSeriesNumber
        BIT     #RAMSourceIDFlag
        JNC     WriteUDSAndSeriesNumber
        MOV     #UDCPToMACResourceUDS,R5
        MOV     #SourceID,R4
        MOV.B   @R4+,0(R5)
        MOV.B   @R4+,1(R5)
        MOV.B   @R4+,2(R5)
        MOV.B   @R4+,3(R5)
        MOV.B   @R4+,4(R5)
        MOV.B   @R4+,5(R5)
        MOV     #RecUARTFrameAddress,R4        
        MOV.B   @R4+,6(R5)
        MOV.B   @R4+,7(R5)
        MOV.B   @R4+,8(R5) 
        MOV.B   @R4+,9(R5)
        MOV.B   @R4+,10(R5)
        MOV.B   @R4,11(R5)        
        MOV.B   #00H,&UDCPToMACFrameControl
        CLR     R6
        MOV.B   &RecUARTFrameLength,R6
        SUB     #7,R6                                ;7=识别地址+校验和
        MOV     R6,&MACToPHYLenghth
        MOV     #RecUARTFrameType,R4
        MOV     #UDCPToMACFrameType,R5
MoveDataRAM
        MOV.B   @R4+,0(R5)
        INC     R5
        DEC     R6
        JNZ     MoveDataRAM  
;-------------------------------------               
RFSendData
        BIT     #RFCannotSend
        JC      RFSendData             
        mov     #3,&PHYResendNumber                     ;data resend times =3
        MOV     &MACToPHYLenghth,R7
        ADD     #15,R7                     ;15=源设备UDS+目的设备UDS+控制字+帧体CRC
        MOV     R7,R4
        SWPB    R7
        MOV     R7,&MACToPHYLenghth
        MOV     #DataFrameMask,&MACToPHYFrameControl
        SWPB    &MACToPHYFrameControl               
        RLA     R4                          ;时间要重新计算    
        RLA     R4
        RLA     R4
        MOV     R4,R5                           
        RLA     R5                       
        ADD     R4,R5
        SWPB    R5
        MOV     R5,&MACToPHYDuration
        MOV     &RFDataFrameCounter,R5          ;计算发送帧个数
        INC     R5
        AND     #SequenceNumberMask,R5
        MOV     R5,&RFDataFrameCounter
        SWPB    R5
        MOV     R5,&MACToPHYSequence
RetrySendData
        MOV.B   #InitialScramber
        MOV     &MACToPHYLenghth,R4
        SWPB    R4
        MOV.B   R4,&ScramberLength
        MOV     #UDCPToMACFrameStart,R4
DoScramber
        MOV.B   @R4,R5
        CALL    #Scramber 
        MOV.B   R5,0(R4)
        INC     R4
        DEC.B   &ScramberLength
        JNZ     DoScramber               
PHYSendData        
        BIT     #SPISendIsEnd                           ;无线如果没发完就等一会儿
        JNC     PHYSendData            
        CLR     &TBCTL                                  ;prepare to RF send,the same as RTS
        CLR     &TBCCTL1
        MOV     #SendTraining,&SPITransmitEntrance
        MOV     #MACToPHYStart,&SPITransmitData
        BIC     #SPISendIsEnd
        BIC.B   #URXIE0,&IE1
        BIS.B   #Mode_RF_OUT                             
        BIS.B   #04H,&P3SEL
        MOV     &MACToPHYLenghth,R4                      ;这时候高字节和低字字节已经交换
                                                         ;相当于乘以256倍
        ADD     #5600,R4                                 ;计算发送数据时间
        MOV     R4,&TimeForRFSend  
        MOV     #(TBSSEL0+MC0+TBCLR),&TBCTL
        MOV     #XspeedCycles,&TBCCR0
        MOV     #OUTMOD_7,&TBCCTL1
        MOV     #XspeedCyclesHalf,&TBCCR1           
        CALL    #Delay200        
        BIS.B   #UTXIE0,&IE1                  
WaitForSendData
        BIT     #SPISendIsEnd
        JC      FinishSendData
        DEC     &TimeForRFSend       
        JNZ     WaitForSendData
        BIC.B   #UTXIE0,&IE1
        BIS     #SPISendIsEnd     
        DEC     &PHYResendNumber     
        JNZ     PHYSendData
LostOneFrame
        BIC.B   #UTXIE0,&IE1    
        BIS     #SPISendIsEnd
        CLR     &TBCTL
        BIC.B   #04h,&P3SEL                    
        BIC.B   #04h,&P3OUT      
        CALL    #program_DDS0_send                  ;该命令可以做为初始化TRF6900使用
        CALL    #program_DDS1_receive
        CALL    #send_mode1_control_C_Learn
        CALL    #program_send_FSK
        BIS.B   #Standy_RF_OUT     
        BIC.B   #Mode_RF_OUT       
        MOV     #(TBSSEL0+MC0+TBCLR),&TBCTL
        MOV     #Xspeed_4Cycles,&TBCCR0       ;training 4 倍采样
        MOV     #OUTMOD_7,&TBCCTL1
        MOV     #Xspeed_4CyclesHalf,&TBCCR1
        BIS.B   #URXIE0,&IE1
        MOV     #SearchForTraining,&SPIReceiveEntrance
        CLR     &EdgeCounter
        CLR     &ErrorF0Counter
        BIC     #RS232BufferFull 
        JMP     EndMACToPHYRoutine
     
FinishSendData     
        BIC.B   #UTXIE0,&IE1                          ;have successfully send data,then wait for ACK
        BIS     #IsWaitingForACK                      ;Set wait for ACK flag
        BIC     #ACKHaveReceived                      ;reset ACK have received flag
        MOV     #9000,&TimeForRFSend                  ;set wait for ACK time
BitACKHaveReceived         
        BIT     #ACKHaveReceived
        JC      EndMACToPHYRoutine                    ;have received ACK
        DEC     &TimeForRFSend                  
        JNZ     BitACKHaveReceived                    ;haven't receive ACK
TryResendData
        DEC     &PHYResendNumber                      ;data resend times-1
        JZ      LostOneFrame                          ;if have resend >=3 times
        MOV     &MACToPHYFrameControl,r4              ;no,set retry mask,resend this data frame
        SWPB    R4
        BIT     #RetryMask,R4
        JC      PHYSendData 
        BIS     #RetryMask,R4
        SWPB    R4
        MOV     R4,&MACToPHYFrameControl
        JMP     PHYSendData
                                         
EndMACToPHYRoutine
        BIC     #IsWaitingForACK                      ;lost this frame
        BIC     #ACKHaveReceived  
        BIC     #RS232BufferFull

;**************************************************************************
WriteUDSAndSeriesNumber
        BIT     #UDSAndSeriesNumber
        JNC     Main_Back 
        CMP     &ControlTemperature,&FlashControlTemperature
        JNZ     NotSameFLASHData 

        MOV     #FlashSeriesNumberAddress,R4
;;      CMP     @R4+,&SeriesNumber3
;;      JNZ     NotSameFLASHData
        CMP     @R4+,&SeriesNumber2
        JNZ     NotSameFLASHData        
        CMP     @R4+,&SeriesNumber1
        JNZ     NotSameFLASHData        
        JMP     WriteNewIDorSeriesNumber

WriteNewIDorSeriesNumber   
        MOV     #FlashNetGateIDAddress,R4
        CMP     @R4+,&NetGateID6
        JNZ     NotSameFLASHData        
        CMP     @R4+,&NetGateID4
        JNZ     NotSameFLASHData        
        CMP     @R4+,&NetGateID2
        JNZ     NotSameFLASHData        
        CMP     @R4+,&SourceID6
        JNZ     NotSameFLASHData        
        CMP     @R4+,&SourceID4
        JNZ     NotSameFLASHData        
        CMP     @R4+,&SourceID2
        JNZ     NotSameFLASHData        
        JMP     DoNotWriteFlash
NotSameFLASHData          
        DINT
        MOV     #FWKEY,&FCTL3
test_busy11
        BIT     #BUSY,&FCTL3
        JNZ     test_busy11
        MOV     #(FWKEY+ERASE),&FCTL1
        CLR     &FlashSourceIDFlagAddress
test_busy21
        BIT     #BUSY,&FCTL3
        JNZ     test_busy21
        MOV     #FWKEY,&FCTL1        
        XOR     #(FXKEY+LOCK),&FCTL3
WriteFlash1
        MOV     #(FWKEY+42h),&FCTL2
        MOV     #SourceIDFlagRegister,R5
        CLR     R4
WriteNextWord1        
        MOV     #FWKEY,&FCTL3
        MOV     #(FWKEY+WRT),&FCTL1
        MOV     @R5+,FlashSourceIDFlagAddress(R4)
WriteFLASHWait
        BIT     #BUSY,FCTL3
        JNZ     WriteFLASHWait
        INCD    R4
        CMP     #22,R4
        JNZ     WriteNextWord1 

;     MOV.B   #12H,&TimeOffHigh
;      MOV.B   #34H,&TimeOffLow
;       MOV.B   #56H,&TimeOnHigh
;        MOV.B   #78H,&TimeOnLow
        
        EINT     
DoNotWriteFlash
        BIC     #UDSAndSeriesNumber          
        
Main_Back
        BR      #MainProgram

;***************************************************************************
;subroutine:  Delay
;***************************************************************************
Delay
        PUSH    #0FFH	         ; Delay for crystal start
L1      DEC     0(SP)
        JNZ     L1
        INCD    SP
        RET           
	
;***************************************************************************
;subroutine:  Delay200
;***************************************************************************
Delay200
        PUSH    #20H	         
Loop1   DEC     0(SP)
        JNZ     Loop1
        INCD    SP
        RET           

;***************************************************************************
;subroutine:  TemperatureProgram
;***************************************************************************
TemperatureProgram 
       
        mov    #55h,&MeasureTemperature

	RET
	
;***************************************************************************
;interrupt routine:  UARTRS232Receive       ** Use Register R10 R11
;***************************************************************************
UARTRS232Receive        
        MOV.B   &U1RXBUF,R10
        CLR     &CCTL1
        CLR     &CCTL2
        BIT     #RS232BufferFull
        JC      UARTRS232ReceiveEnd         
        BR      &UARTReceiveEntrance        
RecFrameHeader1       
        CMP.B   &RecUARTFrameHeader1,R10
        JNZ     UARTRS232ReceiveEnd
        MOV     #RecFrameHeader2,&UARTReceiveEntrance
        JMP     ReceiveNextData        
;--------------------------------------------------------
RecFrameHeader2
        CMP.B   &RecUARTFrameHeader2,R10
        JNZ     UARTRS232ReceiveEnd
        MOV     #RecFrameLength,&UARTReceiveEntrance
        JMP     ReceiveNextData
;---------------------------------------------------------
RecFrameLength
        CMP.B   #111,R10
        JHS     UARTRS232ReceiveEnd
        CMP.B   #8,R10
        JLO     UARTRS232ReceiveEnd
        MOV.B   R10,&RecUARTFrameLength
        MOV.B   R10,&RecUARTFrameCheckSum 
        MOV.B   R10,&UARTReceiveCounter 
        MOV     #RecAvailableInformation,&UARTReceiveEntrance 
        MOV     #RecUARTFrameAddress,R11
        JMP     ReceiveNextData
;---------------------------------------------------------          
RecAvailableInformation   
        ADD.B   R10,&RecUARTFrameCheckSum
        MOV.B   R10,0(R11)
        DEC.B   &UARTReceiveCounter
        INC     R11
        CMP.B   #0FFH,R10
        JZ      TheDataIs_0FFH
IfTheLastData
        CMP.B   #1,&UARTReceiveCounter
        JZ      TheNextDataIsCheckSum
        JMP     ReceiveNextData

TheDataIs_0FFH
        MOV     #RecTheNextDataIs_55H,&UARTReceiveEntrance
        JMP     ReceiveNextData        

TheNextDataIsCheckSum
        MOV     #RecFarmeCheckSum,&UARTReceiveEntrance
        JMP     ReceiveNextData
;---------------------------------------------------------        
RecTheNextDataIs_55H
        ADD.B   R10,&RecUARTFrameCheckSum
        CMP.B   #0FFH,R10
        JZ      IsNewUARTReceive
        CMP.B   #55H,R10
        JNZ     UARTRS232ReceiveEnd
        MOV     #RecAvailableInformation,&UARTReceiveEntrance
        JMP     IfTheLastData

IsNewUARTReceive
        MOV     #RecFrameLength,&UARTReceiveEntrance
        JMP     ReceiveNextData
;-----------------------------------------------------------            
RecFarmeCheckSum  
        CMP.B   R10,&RecUARTFrameCheckSum
        JNZ     UARTRS232ReceiveEnd
        CMP.B   #0FFH,R10
        JZ      TheCheckSumIs_0FFH
        JMP     UARTReceiveIsGood
        
TheCheckSumIs_0FFH
        MOV     #RecTheCheckSum_55H,&UARTReceiveEntrance
        JMP     ReceiveNextData      

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -