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

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

📁 用MSP430汇编写的简单IP协议程序
💻 S43
📖 第 1 页 / 共 5 页
字号:
;--------------------------------------------------------------
RecTheCheckSum_55H
        CMP.B   #0FFH,R10
        JZ      IsNewUARTReceive
        CMP.B   #55H,R10
        JNZ     UARTRS232ReceiveEnd
UARTReceiveIsGood                     ;这些帧是按照出现频率排列的不要改变判断顺序
        BIT.B   #80H,&RecUARTFrameType            ;系统控制帧
        JC      SYSUseFrame
        CMP.B   #08H,&RecUARTFrameType            ;低功耗模式帧
        JZ      PownDownMode
        JMP     UARTRS232ReceiveEnd

PownDownMode    
        CMP.B   #01,&RecUARTFrameCommand1
        JNZ     IsNotPowerDown
        BIS     #PowerDownBIT                     ;设置低功耗模式帧
        JMP     UARTRS232ReceiveEnd
IsNotPowerDown        
        CMP.B   #02H,&RecUARTFrameCommand1         
        JNZ     UARTRS232ReceiveEnd 
        BIS     #CutPowerDownBIT                  ;撤销低功耗模式帧
        JMP     UARTRS232ReceiveEnd               ;该命令可以做为初始化TRF6900使用
                
;...........................................................
SYSUseFrame
        MOV     #RecUARTFrameCommand1,R10
        CMP.B   #80H,&RecUARTFrameType            ;下载设备文件
        JZ      DownLoadDEVICEFILE
        CMP.B   #82H,&RecUARTFrameType            ;写入设备串号
        JZ      WriteEquipmentSeriesNumber
        CMP.B   #83H,&RecUARTFrameType            ;写入设备地址
        JZ      WriteEquipmentAddress
        CMP.B   #85H,&RecUARTFrameType            ;无线链路测试 
        JNZ     UARTRS232ReceiveEnd  
        BIS     #RS232BufferFull                                                      
        JMP     UARTRS232ReceiveEnd        
           
WriteEquipmentAddress
        MOV     #RecUARTFrameCommand1,R10
        MOV.B   @R10+,&SourceID6
        MOV.B   @R10+,&SourceID5
        MOV.B   @R10+,&SourceID4
        MOV.B   @R10+,&SourceID3
        MOV.B   @R10+,&SourceID2
        MOV.B   @R10,&SourceID1
        BIS     #RAMSourceIDFlag
        CLR     &SourceIDFlagRegister
        JMP     WriteEquipmentUDS
        
WriteEquipmentSeriesNumber        
        MOV     #RecUARTFrameCommand1,R10
        MOV.B   @R10+,&SeriesNumber3High
        MOV.B   @R10+,&SeriesNumber3Low
        MOV.B   @R10+,&SeriesNumber2High
        MOV.B   @R10+,&SeriesNumber2Low
        MOV.B   @R10+,&SeriesNumber1High
        MOV.B   @R10,&SeriesNumber1Low
WriteEquipmentUDS
        BIS     #UDSAndSeriesNumber        
        JMP     UARTRS232Finish
;........................................................
ReceiveNextData
        CLR     &RS232DelayRegister       
        BIC     #MC1,&TACTL
        MOV     &TAR,&CCR1             ;溢出如何处理?
        BIS     #MC1,&TACTL
        ADD     #OverWait,&CCR1        ;rs232 2 bytes
        MOV     #CCIE,&CCTL1
        RETI      
;........................................................               
DownLoadDEVICEFILE
        DINT
        MOV     #RecUARTFrameCommand1,R10
        MOV.B   @R10,R11
        TST.B   R11
        JNZ     NotFirstFrameDeviceFile
        MOV     #DeviceFileAddress,R10           ;如果是第0帧,要先擦除8K FLASH
        MOV     #16,R11
Erase8KFlash
        MOV     #FWKEY,&FCTL3
EraseTestBusy1
        BIT     #BUSY,&FCTL3
        JNZ     EraseTestBusy1
        MOV     #(FWKEY+ERASE),&FCTL1
        CLR     0(R10)
EraseTestBusy2
        BIT     #BUSY,&FCTL3
        JNZ     EraseTestBusy2
        MOV     #FWKEY,&FCTL1        
        XOR     #(FXKEY+LOCK),&FCTL3
        DEC     R11
        JZ      RAMToFlash
        ADD     #200H,R10
        JMP     Erase8KFlash  
        
NotFirstFrameDeviceFile       
        MOV.B   &RecUARTFrameCommand1,R10
        CLR     R11
CalShiftPointer        
        CMP.B   #0,R10
        JZ      RAMToFlash
        ADD     #100,R11
        DEC.B   R10
        JMP     CalShiftPointer
        
RAMToFlash
        MOV     #RecUARTFrameCommand2,R10
        MOV     #(FWKEY+42h),&FCTL2
        MOV.B   #WriteDeviceFileLength,&RecUARTFrameLength
WriteNextWord        
        MOV     #FWKEY,&FCTL3
        MOV     #(FWKEY+WRT),&FCTL1
        MOV.B   @R10+,DeviceFileAddress(R11)
WriteTestBusy     
        BIT     #BUSY,&FCTL3
        JNZ     WriteTestBusy     
        MOV     #FWKEY,&FCTL1        
        XOR     #(FXKEY+LOCK),&FCTL3
        
        INC     R11
        DEC.B   &RecUARTFrameLength
        JNZ     WriteNextWord       
        EINT    
UARTRS232Finish     
        MOV     #ToSendUARTACK,&UARTTransmitEntrance     
        BIS.B   #UTXIE1,&IE2        
UARTRS232ReceiveEnd
        MOV     #RecFrameHeader1,&UARTReceiveEntrance
        RETI

;***************************************************************************
;interrupt routine:  UARTRS232Transmit             ** Use Register R12
;***************************************************************************
UARTRS232Transmit
        BR      &UARTTransmitEntrance

ToSendUARTACK
        MOV     #UARTACKFrame,R12
        JMP     ToSend_FrameHead1        
ToSendInformation       
        MOV     #TraUARTDataFrame,R12
ToSend_FrameHead1
        MOV.B   @R12+,&U1TXBUF  
        MOV     #ToSend_FrameHead2,&UARTTransmitEntrance
        RETI
;-----------------------------------------------------------------
ToSend_FrameHead2
        MOV.B   @R12+,&U1TXBUF  
        MOV     #ToSend_FrameLength,&UARTTransmitEntrance
        RETI
;------------------------------------------------------------------
ToSend_FrameLength
        MOV.B   @R12,&U1TXBUF                  
        MOV.B   @R12,&UARTTransmitCounter
        MOV.B   @R12+,&TraUARTFrameCheckSum                       
        MOV     #ToSend_FrameData,&UARTTransmitEntrance        
        RETI
;-------------------------------------------------------------------
ToSend_FrameData
        MOV.B   @R12,&U1TXBUF
        MOV.B   @R12,&TempData2              
        CMP.B   #0FFH,&TempData2                ;CMP.B  #0FFH,&U1TXBUF    
        JZ      JumpSendDataIsFF                          
        ADD.B   @R12+,&TraUARTFrameCheckSum
        DEC.B   &UARTTransmitCounter
        CMP.B   #1,&UARTTransmitCounter
        JNZ     ToSendCountiue1
        MOV     #ToSend_FrameCheckSum,&UARTTransmitEntrance
ToSendCountiue1
        RETI

JumpSendDataIsFF
        ADD.B   @R12+,&TraUARTFrameCheckSum
        MOV     #SendDataIsFF,&UARTTransmitEntrance
        RETI           
SendDataIsFF
        MOV.B   #55H,&U1TXBUF
        ADD.B   #55H,TraUARTFrameCheckSum
        DEC.B   &UARTTransmitCounter
        CMP.B   #1,&UARTTransmitCounter
        JNZ     ToSendCountiue2
        MOV     #ToSend_FrameCheckSum,&UARTTransmitEntrance
        RETI
ToSendCountiue2
        MOV     #ToSend_FrameData,&UARTTransmitEntrance
        RETI
;--------------------------------------------------------------------        
ToSend_FrameCheckSum
        MOV.B   &TraUARTFrameCheckSum,&U1TXBUF
        CMP.B   #0FFH,&TraUARTFrameCheckSum
        JNZ     UARTTransmitEnd
        MOV     #ToSendCheckSum55H,&UARTTransmitEntrance
        RETI
ToSendCheckSum55H
        MOV.B   #55H,&U1TXBUF
UARTTransmitEnd
        BIC.B   #UTXIE1,&IE2
        MOV     #ToSendInformation,&UARTTransmitEntrance
        RETI
                                       
;***************************************************************************
;interrupt routine:  SPIRFReceive            **  Use Register  R15 R14
;***************************************************************************
SPIRFReceive                              ;interrupt  respond,6 cycles
        MOV.B   &U0RXBUF,R15              ;2 cycles
        BR      &SPIReceiveEntrance       ;3 cycles
      
SearchForTraining 
        CMP.B   #0F0H,R15                 ;2 cycles,to judge if this receive is 10b
        JZ      HaveReceiveRightF0        ;2 cycles,yes,prepare to receive next training
        MOV     #0,&ByteLength            ;no,prepare to stop TB
        MOV     #1,&ByteLength
        MOV     #2,&ByteLength
        MOV     #3,&ByteLength
        MOV     #4,&ByteLength        
        JMP     IsNotGoodF0Bit            ;2 cycles

HaveReceiveRightF0        
        CLR     &ErrorF0Counter           ;Have receive the first good 10b,clr error counter,to receive next training       
        INCD    &EdgeCounter
        MOV     #FindNextGoodF0Training,&SPIReceiveEntrance
        RETI
               
IsNotGoodF0Bit
        BIC     #MC0,&TBCTL               ;If isn't F0h,stop TB immediately,5 CYCLES
Is87Data?
        CMP.B   #78H,R15                  ;2 cycles,to judge if this receive is one of we wish
        JZ      MeasurePluseWide          ;2 cycles,if it is,begin to measure high level
        CMP.B   #3CH,R15
        JZ      MeasurePluseWide
        CMP.B   #1EH,R15
        JZ      MeasurePluseWide
        CMP.B   #0FH,R15
        JZ      MeasurePluseWide
        cmp.b   #87H,R15
        JZ      WaitForPassLowEdge3       ;if the lastest sample edge is inside the high level,wait for the low level first
        cmp.b   #0C3H,R15
        JZ      WaitForPassLowEdge2
        cmp.b   #0E1H,R15
        JZ      WaitForPassLowEdge1
        inc     &dyingdying               ;自恢复
        JMP     NeedToResearchTraining    ;if this receive isn't anyone of our wish,new begin
        
WaitForPassLowEdge1
        MOV     #WaitForPassLowEdge1_Value,&ByteLength
        JMP     WaitForBit1                             ;2 cycles
WaitForPassLowEdge2
        MOV     #WaitForPassLowEdge2_Value,&ByteLength
        JMP     WaitForBit1
WaitForPassLowEdge3
        MOV     #WaitForPassLowEege3_Value,&ByteLength                
WaitForBit1
        DEC     &ByteLength                     ;4 cycles
        JNZ     WaitForBit1                     ;2 cycles
        JMP     MeasurePluseWide                ;now is low level,begin to wait for high level
     
NeedToResearchTraining
        CLR     &EdgeCounter                    ;need to new begin,clr edge counter and error counter
        BIS.B   #02H,&P3SEL
        BIC.B   #10H,&P5OUT
        BIC.B   #04h,&P3SEL                     ;可否去掉
        BIC.B   #04h,&P3OUT                     ;可否去掉
        BIC.B   #Mode_RF_OUT                
        CALL    #send_mode1_control_C_Learn
        MOV     #(TBSSEL0+MC0+TBCLR),&TBCTL
        MOV     #Xspeed_4Cycles,&TBCCR0         ;training 4 倍采样
        MOV     #OUTMOD_7,&TBCCTL1
        MOV     #Xspeed_4CyclesHalf,&TBCCR1
        BIC.B   #URXIFG0,&IFG1
        BIS.B   #URXIE0,&IE1 
NeedToResearchTraining1        
        MOV     #SearchForTraining,&SPIReceiveEntrance
        RETI 
        
MeasurePluseWide                                ;here is to measure high level,when have reached,open TB
        MOV     #08H,R15
        BIT.B   R15,&P1IN                       ;4 cycles
        JC      WaitForRightClock               ;2 cycles,total 107*6=642 cycles for 2 data bits for 25k RF
        BIT.B   R15,&P1IN
        JC      WaitForRightClock
        BIT.B   R15,&P1IN
        JC      WaitForRightClock
        BIT.B   R15,&P1IN
        JC      WaitForRightClock
        BIT.B   R15,&P1IN
        JC      WaitForRightClock
        BIT.B   R15,&P1IN
        JC      WaitForRightClock
        BIT.B   R15,&P1IN
        JC      WaitForRightClock
        BIT.B   R15,&P1IN
        JC      WaitForRightClock
        BIT.B   R15,&P1IN
        JC      WaitForRightClock
        BIT.B   R15,&P1IN
        JC      WaitForRightClock
        BIT.B   R15,&P1IN
        JC      WaitForRightClock
        BIT.B   R15,&P1IN
        JC      WaitForRightClock
        BIT.B   R15,&P1IN
        JC      WaitForRightClock
        BIT.B   R15,&P1IN
        JC      WaitForRightClock
        BIT.B   R15,&P1IN
        JC      WaitForRightClock
        BIT.B   R15,&P1IN
        JC      WaitForRightClock
        BIT.B   R15,&P1IN
        JC      WaitForRightClock
        BIT.B   R15,&P1IN
        JC      WaitForRightClock
        BIT.B   R15,&P1IN
        JC      WaitForRightClock
        BIT.B   R15,&P1IN
        JC      WaitForRightClock
        BIT.B   R15,&P1IN
        JC      WaitForRightClock
        BIT.B   R15,&P1IN
        JC      WaitForRightClock
        BIT.B   R15,&P1IN
        JC      WaitForRightClock
        BIT.B   R15,&P1IN
        JC      WaitForRightClock
        BIT.B   R15,&P1IN
        JC      WaitForRightClock
        BIT.B   R15,&P1IN
        JC      WaitForRightClock
        BIT.B   R15,&P1IN
        JC      WaitForRightClock
        BIT.B   R15,&P1IN
        JC      WaitForRightClock
        BIT.B   R15,&P1IN
        JC      WaitForRightClock

⌨️ 快捷键说明

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