psSerial: how to write a single byte value to the serial port?

Bengt Richter bokr at oz.net
Thu Nov 18 07:43:11 CET 2004


On 17 Nov 2004 19:09:26 -0800, mr_ravi_patil at yahoo.com (SoftwareTester) wrote:

>"Diez B. Roggisch" <deetsNOSPAM at web.de> wrote in message news:<cngalv$t5j$05$1 at news.t-online.com>...
>> > I assume the string print ser.write() will append null characters to the
>> > end.
>> 
>> Why do you assume that? Its not said anywhere, and its wrong. A string
>> consists only of the characters you can "see" - if python usues C
>> convention for 0-termination or othear means is an implementation detail
>> none of your concern.
BZZT! (as Mike pointed out ;-) What do you mean "see"?

 >>> for top4 in xrange(16):
 ...     print
 ...     for bot4 in xrange(16):
 ...         rep = repr(chr(top4<<4|bot4))[1:-1]
 ...         print '%4s'%(rep,),
 ...

 \x00 \x01 \x02 \x03 \x04 \x05 \x06 \x07 \x08   \t   \n \x0b \x0c   \r \x0e \x0f
 \x10 \x11 \x12 \x13 \x14 \x15 \x16 \x17 \x18 \x19 \x1a \x1b \x1c \x1d \x1e \x1f
         !    "    #    $    %    &    '    (    )    *    +    ,    -    .    /
    0    1    2    3    4    5    6    7    8    9    :    ;    <    =    >    ?
    @    A    B    C    D    E    F    G    H    I    J    K    L    M    N    O
    P    Q    R    S    T    U    V    W    X    Y    Z    [   \\    ]    ^    _
    `    a    b    c    d    e    f    g    h    i    j    k    l    m    n    o
    p    q    r    s    t    u    v    w    x    y    z    {    |    }    ~ \x7f
 \x80 \x81 \x82 \x83 \x84 \x85 \x86 \x87 \x88 \x89 \x8a \x8b \x8c \x8d \x8e \x8f
 \x90 \x91 \x92 \x93 \x94 \x95 \x96 \x97 \x98 \x99 \x9a \x9b \x9c \x9d \x9e \x9f
 \xa0 \xa1 \xa2 \xa3 \xa4 \xa5 \xa6 \xa7 \xa8 \xa9 \xaa \xab \xac \xad \xae \xaf
 \xb0 \xb1 \xb2 \xb3 \xb4 \xb5 \xb6 \xb7 \xb8 \xb9 \xba \xbb \xbc \xbd \xbe \xbf
 \xc0 \xc1 \xc2 \xc3 \xc4 \xc5 \xc6 \xc7 \xc8 \xc9 \xca \xcb \xcc \xcd \xce \xcf
 \xd0 \xd1 \xd2 \xd3 \xd4 \xd5 \xd6 \xd7 \xd8 \xd9 \xda \xdb \xdc \xdd \xde \xdf
 \xe0 \xe1 \xe2 \xe3 \xe4 \xe5 \xe6 \xe7 \xe8 \xe9 \xea \xeb \xec \xed \xee \xef
 \xf0 \xf1 \xf2 \xf3 \xf4 \xf5 \xf6 \xf7 \xf8 \xf9 \xfa \xfb \xfc \xfd \xfe \xff

All 256 accounted for ;-)

>> 
>> > byte = chr(0x40)
>> > ser.write(byte)
>>  
>> >>> type(byte)
>> <type 'str'>
>> 
>> Its a string as well.
>
>I am concerned because I do not know the effect of writing null
>character to the device connected to the serial byte.
There should not be a null character passed to the device unless you
explicitly put it in the string data itself, e.g., '\x40\x00' is chr(0x40)
followed by a null byte in a 2-byte string. There is no additional terminating byte.

This does mean that if you do pass a string like 'one\x00two' and access it
as a C string, you will just see the first part. OTOH, you could pass a typical
C string _list_ ended by a null C string like 'one\x00two\x00three\x00\x00' (that
last \x00 is the null string).

>
>I wish to send a single byte to the serial port and nothing more.

Did you try ser.write(byte) as above? What happened?

    ser.write('\x40')

should be the equivalent of

    byte = chr(0x40)
    ser.write(byte)
>
>Thanks.
De nada, HTH ;-)

Regards,
Bengt Richter



More information about the Python-list mailing list