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