📄 供暖控制_无线设备_v10.s43
字号:
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 + -