4.17 - DigitalIO [U12 Datasheet] | LabJack
« Close

Datasheets and User Guides

App Notes

Software & Driver

Wednesday April 1st, 2020
Support: LabJack engineers available through email and chat.
Shipping: We are processing and shipping all orders.
Stock: 55/56 products in stock. More details.
Supply Chain: Some disruptions. More details.

4.17 - DigitalIO [U12 Datasheet]

Reads and writes to all 20 digital I/O. The order of execution within the U12 is:

  1. Set D states
  2. Set D directions
  3. Set IO states
  4. Set IO directions
  5. Read D states
  6. Read IO states

Even more detail of the execution order with the approximate time between each step:

  1. Set D7-D0 states
  2. 1 µs
  3. Set D12-D8 states
  4. 2 µs
  5. Set D15-D13 states
  6. 0.5 µs
  7. Set D7-D0 directions
  8. 1 µs
  9. Set D12-D8 directions
  10. 1 µs
  11. Set D15-D13 directions
  12. 16 µs
  13. Set IO states
  14. 16 µs
  15. Set IO directions
  16. 2 µs
  17. Read D7-D0 states
  18. 0.3 µs
  19. Read D12-D8 states
  20. 0.7 µs
  21. Read D15-D13 states
  22. 10 µs
  23. Read IO states

Execution time for this function is 20 milliseconds or less (typically 16 milliseconds in Windows).


long DigitalIO (    long *idnum,
                    long demo,
                    long *trisD,
                    long trisIO,
                    long *stateD,
                    long *stateIO,
                    long updateDigital,
                    long *outputD )

Parameter Description:
Returns: LabJack errorcodes or 0 for no error.

  • *idnum – Local ID, serial number, or -1 for first found.
  • demo – Send 0 for normal operation, >0 for demo mode. Demo mode allows this function to be called without a LabJack.
  • *trisD – Directions for D0-D15. 0=Input, 1=Output.
  • trisIO – Directions for IO0-IO3. 0=Input, 1=Output.
  • *stateD – Output states for D0-D15.
  • *stateIO – Output states for IO0-IO3.
  • updateDigital – If >0, tris and state values will be written. Otherwise, just a read is performed.


  • *idnum – Returns the local ID or –1 if no LabJack is found.
  • *trisD – Returns a read of the direction registers for D0-D15.
  • *stateD – States of D0-D15.
  • *stateIO – States of IO0-IO3.
  • *outputD – Returns a read of the output registers for D0-D15.


When using DigitalIOX if you don't set the unused ports of trisIO and trisD to 0 you get an invalid input error (40)

Section 4.0 mentions these types of parameters.  The valid range for trisIO is 0-15, and for trisD is 0-65535.

I am unsure how to change/access the state of multiple IOs using the DigitalIO. I notice that the eDigitalOut has some examples on how to change the state but I wish to use DigitalIO to change multiple Outputs at once.

I wish to change channel 13 to ON and channel 14 to ON at the same time. With eDigitalOut this is done by typing:

d.eDigitalOut(channel=13, state=1, writeD=1) and

d.eDigitalOut(channel=14, state=1, writeD=1)


How can I do a similar thing using d.digitalIO ?

I think you are having trouble translating the IO lines that you want to change into a value to pass. It's a bit mask where the bit# corresponds to the IO number. Makes a lot of sense when look at it in binary. This page in the user's guide describes it in more detail: http://labjack.com/support/u12/users-guide/4

I which to read in digital inputs from two reed switches, I want if the switches are in state 0 and 1 or 1 and 0, matlab will send either a 0.0v or 5.0 volt as an analog output, please how do i go about it.

See Figure 2-5 to hook up your switch to IO0.  Test the hardware by running LJlogger.exe and watching the input state of IO0 as the switch opens and closes.

To get started in Matlab, see the Matlab - U12 page.  I suggest you make a loop where you call EDigitalIn and EAnalogOut.