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