发表于:2007-08-24 16:33:00
楼主
;采用随机延时方式发送数据
;无线接收串口中断服务程序
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 &nbs