Manchester Code Library

mikroBasic PRO for FT90x provides a library for handling Manchester coded signals. The Manchester code is a code in which data and clock signals are combined to form a single self-synchronizing data stream; each encoded bit contains a transition at the midpoint of a bit period, the direction of transition determines whether the bit is 0 or 1; the second half is the true bit value and the first half is the complement of the true bit value (as shown in the figure below).

Manchester signal format

  Important :

External dependencies of Manchester Code Library

The following variables must be defined in all projects using Manchester Code Library: Description: Example:
dim MANRXPIN as sbit sfr external Receive line. dim MANRXPIN as sbit at GPIO_PIN6_bit
dim MANTXPIN as sbit sfr external Transmit line. dim MANTXPIN as sbit at GPIO_PIN8_bit

Library Routines

The following routines are for the internal use by compiler only:

Man_Receive_Init

Prototype

sub function Man_Receive_Init() as word

Description

The function configures Receiver pin. After that, the function performs synchronization procedure in order to retrieve baud rate out of the incoming signal.

Parameters

None.

Returns

  • 0 - if initialization and synchronization were successful.
  • 1 - upon unsuccessful synchronization.
  • 255 - upon user abort.

Requires

External dependencies of the library from the top of the page must be defined before using this function.

Example
' Manchester module connections
dim MANRXPIN as sbit at GPIO_PIN6_bit
dim MANTXPIN as sbit at GPIO_PIN8_bit
' End Manchester module connections
...
Man_Receive_Init()                  ' Initialize receiver
Notes

In case of multiple persistent errors on reception, the user should call this routine once again or Man_Synchro routine to enable synchronization.

Man_Receive

Prototype

sub function Man_Receive(dim byref error as word) as byte

Description

The function extracts one byte from incoming signal.

Parameters
  • error: error flag. If signal format does not match the expected, the error flag will be set to non-zero.
Returns

A byte read from the incoming signal.

Requires

To use this function, the user must prepare the MCU for receiving. See Man_Receive_Init routines.

Example
dim data_, error as word
...
error = 0
data_ = 0
data_ = Man_Receive(error)
if (error <> 0) then
    ' error handling 
end if
Notes

None.

Man_Send_Init

Prototype

sub procedure Man_Send_Init()

Description

The function configures Transmitter pin.

Parameters

None.

Returns

Nothing.

Requires

External dependencies of the library from the top of the page must be defined before using this function.

Example
' Manchester module connections
dim MANRXPIN as sbit at GPIO_PIN6_bit
dim MANTXPIN as sbit at GPIO_PIN8_bit
' End Manchester module connections
...
Man_Send_Init()                  ' Initialize transmitter
Notes

None.

Man_Send

Prototype

sub procedure Man_Send(dim data as byte)

Description

Sends one byte.

Parameters
  • tr_data: data to be sent
Returns

Nothing.

Requires

To use this function, the user must prepare the MCU for sending. See Man_Send_Init routine.

Example
dim msg as byte
...
Man_Send(msg)
Notes

Baud rate used is 500 bps.

Man_Synchro

Prototype

sub function Man_Synchro() as word

Description

Measures half of the manchester bit length with 10us resolution.

Parameters

None.

Returns
  • 0 - if synchronization was not successful.
  • Half of the manchester bit length, given in multiples of 10us - upon successful synchronization.
Requires

To use this function, you must first prepare the MCU for receiving. See Man_Receive_Init.

Example
dim man__half_bit_len as word
...
man__half_bit_len = Man_Synchro()
Notes

None.

Man_Break

Prototype

sub procedure Man_Break()

Description

Man_Receive is blocking routine and it can block the program flow. Call this routine from interrupt to unblock the program execution. This mechanism is similar to WDT.

Parameters

None.

Returns

Nothing.

Requires

Nothing.

Example


          
Notes

Interrupts should be disabled before using Manchester routines again (see note at the top of this page).

Library Example

The following code is code for the Manchester receiver, it shows how to use the Manchester Library for receiving data:

Copy Code To ClipboardCopy Code To Clipboard


    

The following code is code for the Manchester transmitter, it shows how to use the Manchester Library for transmitting data:

Copy Code To ClipboardCopy Code To Clipboard


    
Copyright (c) 2002-2015 mikroElektronika. All rights reserved.
What do you think about this topic ? Send us feedback!
Want more examples and libraries? 
Find them on LibStock - A place for the code