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

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

📁 用MSP430汇编写的简单IP协议程序
💻 S43
📖 第 1 页 / 共 5 页
字号:
        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 
        BIC     #CutPowerDownBIT
        
        CALL    #Delay200
        CALL    #Delay200
        CALL    #Delay200
        
        EINT      
;**************************************************************************
CommunicationError
        BIT     #LineErrorAlam
        JNC     WirelessModuleDealwith     
;处理链路错误        
        BIC     #LineErrorAlam           
;**************************************************************************
;这里所处理的命令只有无线模块进行处理不传送给设备
WirelessModuleDealwith
        BIT     #DealwithRFFrameBit          ;可以考虑在做这部分处理关掉SPI接收
        JNC     RFSendInformation
        BIC     #DealwithRFFrameBit
        CMP.B   #10H,&TraUARTFrameType                 ;查询未注册设备
        JZ      NetGateQueryDevice
        CMP.B   #12H,&TraUARTFrameType                 ;注册设备
        JZ      NetGateACKDeviceLoginOk
        CMP.B   #14H,&TraUARTFrameType                 ;申请下载设备文件
        JZ      ApplyDeviceFile             
        CMP.B   #1AH,&TraUARTFrameType                 ;获取设备地址
        JZ      SearchDeviceID
        CMP.B   #16H,&TraUARTFrameType                 ;按UDS删除设备
        JZ      ToPurgeDevice     
        CMP.B   #17H,&TraUARTFrameType                 ;按串号删除设备
        JZ      PurgeDeviceBySN     
        CMP.B   #18H,&TraUARTFrameType                 ;申请下载语音文件
        JZ      ApplySoundFile
        CMP.B   #85H,&TraUARTFrameType                 ;无线链路测试      
        JNZ     WirelessModuleDealwithEnd
;-----------------------------------------------------------------------
WirelessTest                              ;无线链路测试
        MOV     #SourceID,R5
        MOV     #UDCPToMACFrameStart,R4
        MOV     @R5+,0(R4)                           ;写入目的地址,即测试设备的源地址
        MOV     @R5+,2(R4)
        MOV     @R5+,4(R4)        
        MOV     #ACKDestinationUDS,R5
        MOV     @R5+,6(R4)                           ;写入源地址,即测试设备的目的地址
        MOV     @R5+,8(R4)
        MOV     @R5+,10(R4)
        MOV.B   #00H,12(R4)                          ;写入控制字
        MOV.B   #86H,&UDCPToMACFrameType             ;写入帧类型
        MOV     #TraUARTFrameCommand1,R5
        MOV     #UDCPToMACFrameData,R4
        MOV     &RFReceiveLength,R6
        SUB     #16,R6                               ;16=源设备地址+目的设备地址+控制字
                                                     ;   +帧类型+帧体CRC
        MOV     #0001H,R7                            ;1=帧类型
ReadTestData        
        CMP     #0000H,R6
        JZ      No_EINT_RFSendData
        MOV.B   @R5+,0(R4)
        DEC     R6                                   ;将接受的信息原样返回
        INC     R4
        INC     R7
        JMP     ReadTestData  
                          
No_EINT_RFSendData
        MOV     R7,&MACToPHYLenghth
        JMP     RFSendData      
;-----------------------------------------------------------------------
NetGateQueryDevice                        ;查询未注册设备
        BIT     #RAMSourceIDFlag 
        JC      WirelessModuleDealwithEnd            ;如果设备已被分配ID,不对网关查询作出回应。
        MOV     #TraUARTFrameCommand1,R4     
;;      CMP     @R4+,&SeriesNumber3                  ;如果收到得设备SN于本设备SN不符,
;;      JNZ     WirelessModuleDealwithEnd            ;不对网关查询作出回应。
        CMP     @R4+,&SeriesNumber2
        JNZ     WirelessModuleDealwithEnd                              
        CMP     @R4+,&SeriesNumber1
        JNZ     WirelessModuleDealwithEnd                                              
        MOV     #DeviceFileAddress,R5
        MOV     @R5,R4
        CMP     #0FFFFH,R4
        JZ      WirelessModuleDealwithEnd             ;无设备文件
        BIS     #NetGateQueryOK   
;设备名称的存储位置由devicefile的格式确定。设备名称的长度不定,在devicefile中
;用00h 00h标志结束。所以回应帧的长度也因此不定。           
        MOV     #UDCPToMACResourceUDS,R5       ;写入源地址
        MOV     #SourceID,R4
        MOV     @R4+,0(R5)
        MOV     @R4+,2(R5)
        MOV     @R4+,4(R5)     
        MOV     #ACKDestinationUDS,R4          ;写入目的地址
        MOV     @R4+,6(R5)
        MOV     @R4+,8(R5)
        MOV     @R4+,10(R5)
        MOV.B   #00H,&UDCPToMACFrameControl    ;写控制字
        MOV.B   #11H,&UDCPToMACFrameType       ;写入帧类型--设备确认查询
        CLR     R6
        MOV     #SeriesNumber2High,R7 
;;      MOV     #SeriesNumber3High,R7  (6字节串号时)
WriteSeriesNumberRF        
        MOV.B   @R7+,UDCPToMACFrameData(R6)     ;写入串号
        INC     R6
        CMP     #4,R6
;;      CMP     #6,R6                  (6字节串号时)
        JNZ     WriteSeriesNumberRF                

        MOV     #5,R7                           ;5==帧类型+串号(6个字节串号是为7)  
        JMP     ReadDevNameFrmeFLASH
;-----------------------------------------------------------------------
NetGateACKDeviceLoginOk                   ;注册设备
        DINT
        BIT     #NetGateQueryOK
        JNC     WirelessModuleDealwithEnd
        MOV     #TraUARTFrameCommand1,R4     
;;      CMP     @R4+,&SeriesNumber3                  ;如果收到得设备SN于本设备SN不符,
;;      JNZ     WirelessModuleDealwithEnd            ;不对网关查询作出回应。
        CMP     @R4+,&SeriesNumber2
        JNZ     WirelessModuleDealwithEnd                              
        CMP     @R4+,&SeriesNumber1
        JNZ     WirelessModuleDealwithEnd                                      
        
        MOV     #SourceID,R5                         ;保存设备新地址
        MOV     @R4+,0(R5)
        MOV     @R4+,2(R5)
        MOV     @R4+,4(R5)         
        MOV     #ACKDestinationUDS,R4                ;保存注册网关地址
        MOV     #NetGateID,R5
        MOV     @R4+,0(R5)
        MOV     @R4+,2(R5)
        MOV     @R4+,4(R5)
        BIC     #NetGateQueryOK
        BIS     #RAMSourceIDFlag
        CLR     &SourceIDFlagRegister
        
        MOV     #UDCPToMACResourceUDS,R5       ;写入源地址
        MOV     #SourceID,R4
        MOV     @R4+,0(R5)
        MOV     @R4+,2(R5)
        MOV     @R4+,4(R5)
        MOV     #NetGateID,R4                  ;写入目的地址
        MOV     @R4+,6(R5)
        MOV     @R4+,8(R5)
        MOV     @R4+,10(R5)
        MOV.B   #00H,&UDCPToMACFrameControl    ;写控制字1

        CLR     R5
        CMP     (FlashNetGateIDAddress+0)(R5),(NetGateID+0)(R5)
        JNZ     WriteNewID
        CMP     (FlashNetGateIDAddress+2)(R5),(NetGateID+2)(R5)
        JNZ     WriteNewID
        CMP     (FlashNetGateIDAddress+4)(R5),(NetGateID+4)(R5)
        JNZ     WriteNewID
        CMP     (FlashNetGateIDAddress+6)(R5),(SourceID+0)(R5)
        JNZ     WriteNewID
        CMP     (FlashNetGateIDAddress+8)(R5),(SourceID+2)(R5)
        JNZ     WriteNewID
        CMP     (FlashNetGateIDAddress+10)(R5),(SourceID+4)(R5)
        JZ      NotWriteNewID
WriteNewID
        BIS     #UDSAndSeriesNumber
NotWriteNewID
        MOV.B   #13H,&UDCPToMACFrameType       ;写入帧类型
        CLR     R6
        MOV     #1,R7                          ;1==帧类型

ReadDevNameFrmeFLASH
        MOV     #DeviceFileAddress,R4          ;从FLASH中读出写入设备名称
        MOV     16(R4),R5
        MOV     6(R4),R8
        SWPB    R8
        AND     #00FFH,R8
        ADD     R8,R5        
        RLA     R5
        ADD     R4,R5   
FillDeviceName    
        TST.B   0(R5)
        JZ      IsDeviceNameEnd
        MOV.B   @R5+,UDCPToMACFrameData(R6)
        INC     R6
        INC     R7
        CMP     #97,R6                         ;注册时设备名称最多96个字节的汉字
        JZ      IsDeviceNameEnd                ;查询时设备名称最多90个字节的汉字
        JMP     FillDeviceName
IsDeviceNameEnd
        MOV.B   #00H,UDCPToMACFrameData(R6)    ;设备名有两个字节的00H 00H表示结束
        INC     R6
        MOV.B   #00H,UDCPToMACFrameData(R6)
        INCD    R7                             ;两个00H长度
        MOV     R7,&MACToPHYLenghth            ;写入层长度        
        EINT
        JMP     RFSendData
;-----------------------------------------------------------------------
SearchDeviceID                           ;网关查询设备地址
        MOV     #TraUARTFrameCommand1,R4
;;      CMP     @R4+,&SeriesNumber3
;;      JNZ     WirelessModuleDealwithEnd
        CMP     @R4+,&SeriesNumber2
        JNZ     WirelessModuleDealwithEnd
        CMP     @R4,&SeriesNumber1
        JNZ     WirelessModuleDealwithEnd
        MOV     #UDCPToMACResourceUDS,R5       ;写入源地址
        MOV     #SourceID,R4
        MOV     @R4+,0(R5)
        MOV     @R4+,2(R5)
        MOV     @R4+,4(R5)     
        MOV     #ACKDestinationUDS,R4          ;写入目的地址
        MOV     @R4+,6(R5)
        MOV     @R4+,8(R5)
        MOV     @R4+,10(R5)
        MOV.B   #00H,&UDCPToMACFrameControl    ;写控制字
        MOV.B   #1BH,&UDCPToMACFrameType       ;写入帧类型--设备确认查询
        MOV     #UDCPToMACFrameData,R6
;;      MOV.B   &SeriesNumber3High,0(R6)
;;      MOV.B   &SeriesNumber3Low,1(R6)
        MOV.B   &SeriesNumber2High,0(R6)  ;2(R6)
        MOV.B   &SeriesNumber2Low,1(R6)   ;3(R6)                                                           
        MOV.B   &SeriesNumber1High,2(R6)  ;4(R6)
        MOV.B   &SeriesNumber1Low,3(R6)   ;5(R6)
        MOV     #SourceID,R4
        MOV.B   @R4+,4(R6)                ;6(R6)
        MOV.B   @R4+,5(R6)                ;7(R6)
        MOV.B   @R4+,6(R6)                ;8(R6)
        MOV.B   @R4+,7(R6)                ;9(R6)
        MOV.B   @R4+,8(R6)                ;10(R6)
        MOV.B   @R4+,9(R6)                ;11(R6)
;;      MOV     #13,&MACToPHYLenghth           ;13==帧类型+设备串号+设备地址
        MOV     #11,&MACToPHYLenghth           ;11==帧类型+设备串号+设备地址
        JMP     RFSendData
;-----------------------------------------------------------------------
ToPurgeDevice                            ;按UDS删除设备
        MOV     #SourceID,R5
        MOV     #TraUARTFrameCommand1,R4
        CMP     @R4+,0(R5)
        JNZ     WirelessModuleDealwithEnd
        CMP     @R4+,2(R5)
        JNZ     WirelessModuleDealwithEnd
        CMP     @R4,4(R5)
        JNZ     WirelessModuleDealwithEnd
        JMP     EarseDeviceID
;-----------------------------------------------------------------------
PurgeDeviceBySN                          ;按串号删除设备
        MOV     #TraUARTFrameCommand1,R4
;;      CMP     @R4+,&SeriesNumber3
;;      JNZ     WirelessModuleDealwithEnd
        CMP     @R4+,&SeriesNumber2
        JNZ     WirelessModuleDealwithEnd
        CMP     @R4,&SeriesNumber1
        JNZ     WirelessModuleDealwithEnd
EarseDeviceID
        BIC     #RAMSourceIDFlag
        MOV     #0FFFFH,&SourceIDFlagRegister
        MOV     #SourceID,R5
        MOV.B   #00H,0(R5)
        MOV.B   #00H,1(R5)
        MOV.B   #00H,2(R5)
        MOV.B   #00H,3(R5)
        MOV.B   #00H,4(R5) 
        MOV.B   #00H,5(R5)
        JMP     WriteNewIDorSeriesNumber
;-----------------------------------------------------------------------
ApplyDeviceFile                        ;申请下载设备文件
        BIT     #RAMSourceIDFlag 
        JNC     WirelessModuleDealwithEnd      ;如果设备没有注册,本程序不对非广播帧作处理。
                                               ;包括不回应MAC层ACK。
        CMP     #0,&DeviceFileFrameNumber
        JZ      WirelessModuleDealwithEnd      ;如果没有devicefile,此帧无效。
        MOV     #UDCPToMACResourceUDS,R5       ;写入源地址
        MOV     #SourceID,R4
        MOV     @R4+,0(R5)
        MOV     @R4+,2(R5)
        MOV     @R4+,4(R5)     
        MOV     #NetGateID,R4                  ;写入目的地址
        MOV     @R4+,6(R5)
        MOV     @R4+,8(R5)
        MOV     @R4+,10(R5)
        MOV.B   #00H,&UDCPToMACFrameControl    ;写控制字
        MOV.B   #15H,&UDCPToMACFrameType       ;写入帧类型
        MOV     #TraUARTFrameCommand1,R5       ;读帧序列号
        CLR     R4
        MOV.B   @R5+,R4                        ;同时清掉高位
        SWPB    R4
        BIS.B   @R5,R4
        MOV     R4,R7
        BIC     #0C000H,R4
        BIS     #08000H,R4 
        CLR     R6        
        SWPB    R4
        MOV.B   R4,UDCPToMACFrameData(R6)      ;写入帧序列号
        INC     R6
        SWPB    R4
        MOV.B   R4,UDCPToMACFrameData(R6)
        INC     R6
        BIC     #0C000H,R4
        INC     R4
        CMP     R4,&DeviceFileFrameNumber
        JNZ     NotLastDeviceFileFrame
        DECD    R6
        BIS.B   #40H,UDCPToMACFrameData(R6)    ;是最后一帧
        INCD    R6
NotLastDeviceFileFrame
        CLR     R5
UpLoadDeviceFileShift
        CMP     #00H,R7
        JZ      EndUpLoadDeviceFileShift
        ADD     #DeviceFileFrameSize,R5
        DEC     R7
        JMP     UpLoadDeviceFileShift
EndUpLoadDeviceFileShift        
        MOV     #3,R7                          ;1==帧类型+序列号
        MOV     #DeviceFileFrameSize,R4
FillUpLoadContent        
        MOV     DeviceFileAddress(R5),UDCPToMACFrameData(R6) 
        INCD    R5
        INCD    R6
        INCD    R7
        DECD    R4
        JNZ     FillUpLoadContent
        MOV     R7,&MACToPHYLenghth          
        JMP     RFSendData
;-----------------------------------------------------------------------

⌨️ 快捷键说明

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