Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
03/10/08 10:27
Read: times


 
#152067 - Easy to get wrong.
Responding to: ???'s previous message
It is easy. The 19200 baud means 52uS per bit.

Unfortunately, it's also quite easy to do it wrong.

SoftTX = 1;             // start bit
delay_us(52);
for (i = 8; i--; c >>= 1) {
    SoftTX = c & 1;     // low bit first
    delay_us(52);
}
SoftTX = 0;             // stop bit
delay_us(52);


1. That would work only if the instructions between the calls to the delay routine are executed by the MCU in a negligible amount of time. Since the for-loop does quite a bit of work, and the MCU in question is a 12-clocker, this is questionable.

2. C does not give you any guarantees as far as timing goes. Write the whole thing in assembly.

List of 32 messages in thread
TopicAuthorDate
One RS232 port and two devices            01/01/70 00:00      
   Almost certainly not!            01/01/70 00:00      
      neither one talks back            01/01/70 00:00      
         Soft-UART ?            01/01/70 00:00      
         Simplex            01/01/70 00:00      
            responses            01/01/70 00:00      
               The beaty of the 8051            01/01/70 00:00      
                  why all this about bit-banging            01/01/70 00:00      
               Bit banging UART TX.            01/01/70 00:00      
                  Easy to get wrong.            01/01/70 00:00      
                     Point taken, but you can calculate delay.            01/01/70 00:00      
                        Depends on compiler/etc...            01/01/70 00:00      
                           Don't use HLL!            01/01/70 00:00      
                              Cycle counting.            01/01/70 00:00      
                                 Fundamental flaw            01/01/70 00:00      
                              Not an Absolute....            01/01/70 00:00      
                                 RE: Never is a strong word            01/01/70 00:00      
                                    ... and            01/01/70 00:00      
                              assembly verses HLL            01/01/70 00:00      
                           Use a Timer IRQ to set the soft baudrate            01/01/70 00:00      
                              Surprise.            01/01/70 00:00      
                                 High risk            01/01/70 00:00      
                                    Straying into fantasy.            01/01/70 00:00      
                                       Not so fantastic?            01/01/70 00:00      
                  Resistance is too high            01/01/70 00:00      
                  Another reason why this is not so easy...            01/01/70 00:00      
               Timescales            01/01/70 00:00      
      message formatting            01/01/70 00:00      
         Try it now            01/01/70 00:00      
            It's OK now, thanks.            01/01/70 00:00      
   Two RS232 devices            01/01/70 00:00      
      the LCD display            01/01/70 00:00      

Back to Subject List