Hi, In Modbus protocol, RTU mode, use 3.5 charater silent time as a message start or end in current BPS, how can i detect this interval, use a timer or ...? (the mcu i use is at89c52, timer0 is used as a 1ms timer interrupt, timer1 use for baud rate generator)
There's the suggestion in http://www.keil.com/forum/docs/thread3738.asp about timestamping the last event. For fairly low serial rates, the 1ms timer tick would do. (That's about 1 character time for a 9600 bps UART.) The Modbus specs are "at least" 3.5 character times, I think, so being too slow only hurts throughput rather than correctness. Once the data rate hits about 40 kbps, this will start to be a factor. Perhaps you could use the BRG timer to measure 4 character silent intervals (when it's not in use as a BRG)? You'll have to be able to switch the timer mode in half a character time, which again shouldn't be too bad at low data rates. It should be only a dozen or so instructions. Depending on what else your application has to do, a delay loop might suffice. You could code one that watches the timer value for that 1ms timer tick. Search the forum for a number of good threads on ways to code delay loops.