发表于:2007/9/10 11:33:00
#0楼
使用华荣汇带前向纠错的RF Modem,可以采用简单的监听_避让的方法来解决无线多机随机发送冲突的问题,大致思路(以WAP200B在无线表决的应用为例)如下:
;无线接收串口中断服务程序
UARTRF: JB RI,UARTRCV
CLR TI
RETI
UARTRCV:LCALL RXPRO ;接收数据处理
LCALL RANDOM ;每接收到一个字节的数据,就调用一次随机延时程序
RETI
;1mS的定时器中断服务程序
T1MSINT:PUSH ACC
PUSH PSW
CLR TF0
DJNZ TX_DELAY,T1MSINTE
MOV A,TX_NUM
JZ T1MSINT1 ;没有数据发送就结束
LCALL TXRF ;发送数据
T1MSINT1:LCALL RANDOM
T1MSINTE:POP PSW
POP ACC
RETI
;计算延时,每包传送数据为64字节(无线传输时间32mS)
RANDOM: PUSH DPH
PUSH DPL
RANDOM1:MOV A,TX_DELAY
CLR C
SUBB A,#80 ;如果后续延时已经超过80ms(根据发送数据包的大小来确定),就不再延时
JNC RANDOME
INC RAND_P
MOV A,RAND_P
ADD A,SYSID ;S_ID,设备ID
ANL A,#0FH
MOV RAND_P,A
MOV DPTR,#RAND_TAB ;查随机数表
MOVC A,@A+DPTR
ADD A,TX_DELAY
MOV TX_DELAY,A
CLR C
SUBB A,#40 ;如果调整后的延时时间小于40ms(取决于系统中数据包的大小),继续调整
JC RANDOM1
RANDOME: POP DPL
POP DPH
RET
需要更详细的资料,请发mail给我:smartrf@263.net
;无线接收串口中断服务程序
UARTRF: JB RI,UARTRCV
CLR TI
RETI
UARTRCV:LCALL RXPRO ;接收数据处理
LCALL RANDOM ;每接收到一个字节的数据,就调用一次随机延时程序
RETI
;1mS的定时器中断服务程序
T1MSINT:PUSH ACC
PUSH PSW
CLR TF0
DJNZ TX_DELAY,T1MSINTE
MOV A,TX_NUM
JZ T1MSINT1 ;没有数据发送就结束
LCALL TXRF ;发送数据
T1MSINT1:LCALL RANDOM
T1MSINTE:POP PSW
POP ACC
RETI
;计算延时,每包传送数据为64字节(无线传输时间32mS)
RANDOM: PUSH DPH
PUSH DPL
RANDOM1:MOV A,TX_DELAY
CLR C
SUBB A,#80 ;如果后续延时已经超过80ms(根据发送数据包的大小来确定),就不再延时
JNC RANDOME
INC RAND_P
MOV A,RAND_P
ADD A,SYSID ;S_ID,设备ID
ANL A,#0FH
MOV RAND_P,A
MOV DPTR,#RAND_TAB ;查随机数表
MOVC A,@A+DPTR
ADD A,TX_DELAY
MOV TX_DELAY,A
CLR C
SUBB A,#40 ;如果调整后的延时时间小于40ms(取决于系统中数据包的大小),继续调整
JC RANDOM1
RANDOME: POP DPL
POP DPH
RET
需要更详细的资料,请发mail给我:smartrf@263.net