<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Posting some example code for QG8 IIC in 8-bit Microcontrollers</title>
    <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Posting-some-example-code-for-QG8-IIC/m-p/201568#M16531</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;fm : I have also developed something similar to your code. But although mine works fine with one master and one slave, the bus locks up with more than one slave. I'm sure this must be a hardware problem.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I was wondering how you connected your devices together. I have some&amp;nbsp; 9S08AW60 demo boards wire directly together with pull up resistors.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;How did you connect your I2C&amp;nbsp;bus?&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 07 Jul 2008 19:53:26 GMT</pubDate>
    <dc:creator>mad_dad</dc:creator>
    <dc:date>2008-07-07T19:53:26Z</dc:date>
    <item>
      <title>Posting some example code for QG8 IIC</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Posting-some-example-code-for-QG8-IIC/m-p/201565#M16528</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Up to now I've failed to find good examples of I2C code for the QG8 (or other HCS08) 8-bit processors that fully take advantage of the IIC interrupts and work for both master and slave.&amp;nbsp; Most examples have been minimal (AN3048) or have not provided a complete master/slave solution (AN3291).&amp;nbsp; The closest example is&amp;nbsp;AN2318 for the HCS12 (which uses the same IIC peripheral).&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;It's taken me about 2 years (in my spare time), but I finally have some full-featured code based on the above app notes,&amp;nbsp;code snippets on the internet and debugging with a scope.&amp;nbsp; It is used&amp;nbsp;for an application where 3 QG8's, 1 QE128, and 1 24AA256SN Flash memory&amp;nbsp;are all on the same bus (1 master,&amp;nbsp;3 slaves, 1 master &amp;amp; slave).&amp;nbsp; It uses an interrupt-driven approach, the master can transmit/receive data while continuing to process other work, an application can be a master and then turn around and act as a slave for another processor.&amp;nbsp; Code supports using program variables directly as buffers, or seperate buffers can be used.&amp;nbsp;&amp;nbsp;In my application, data is transmitted as words (vs bytes), but this can be changed.&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;To save others&amp;nbsp;some of this&amp;nbsp;trouble I thought I would post these example master and slave projects:&lt;/DIV&gt;&lt;DIV&gt;&lt;A _jive_internal="true" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fcid-121dc0fe14203ae7.skydrive.live.com%2Fbrowse.aspx%2FHCS08%2520QG8%2520I2C%2520Example%2520Code" rel="nofollow" target="_blank"&gt;http://cid-121dc0fe14203ae7.skydrive.live.com/browse.aspx/HCS08%20QG8%20I2C%20Example%20Code&lt;/A&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 10 Mar 2008 09:50:24 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Posting-some-example-code-for-QG8-IIC/m-p/201565#M16528</guid>
      <dc:creator>fm</dc:creator>
      <dc:date>2008-03-10T09:50:24Z</dc:date>
    </item>
    <item>
      <title>Re: Posting some example code for QG8 IIC</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Posting-some-example-code-for-QG8-IIC/m-p/201566#M16529</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;Fm,&lt;BR /&gt;Thanks! I appreciate your efforts and willingness to share.&lt;BR /&gt;Do mind if it is re-distributed?&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;Message Edited by JimDon on &lt;SPAN class="date_text"&gt;2008-03-10&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;11:18 AM&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 10 Mar 2008 22:17:33 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Posting-some-example-code-for-QG8-IIC/m-p/201566#M16529</guid>
      <dc:creator>JimDon</dc:creator>
      <dc:date>2008-03-10T22:17:33Z</dc:date>
    </item>
    <item>
      <title>Re: Posting some example code for QG8 IIC</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Posting-some-example-code-for-QG8-IIC/m-p/201567#M16530</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;&lt;BLOCKQUOTE&gt;&lt;DIV&gt;&lt;HR /&gt;JimDon wrote:&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;Fm,&lt;BR /&gt;Thanks! I appreciate your efforts and willingness to share.&lt;BR /&gt;Do mind if it is re-distributed?&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;Message Edited by JimDon on &lt;SPAN class="date_text"&gt;2008-03-10&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;11:18 AM&lt;/SPAN&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;I don't see a problem with that.&amp;nbsp; It depends on&amp;nbsp;a processor expert&amp;nbsp;bean for IIC initialization&amp;nbsp;available in the Special Edition version.&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 12 Mar 2008 09:22:57 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Posting-some-example-code-for-QG8-IIC/m-p/201567#M16530</guid>
      <dc:creator>fm</dc:creator>
      <dc:date>2008-03-12T09:22:57Z</dc:date>
    </item>
    <item>
      <title>Re: Posting some example code for QG8 IIC</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Posting-some-example-code-for-QG8-IIC/m-p/201568#M16531</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;fm : I have also developed something similar to your code. But although mine works fine with one master and one slave, the bus locks up with more than one slave. I'm sure this must be a hardware problem.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I was wondering how you connected your devices together. I have some&amp;nbsp; 9S08AW60 demo boards wire directly together with pull up resistors.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;How did you connect your I2C&amp;nbsp;bus?&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 07 Jul 2008 19:53:26 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Posting-some-example-code-for-QG8-IIC/m-p/201568#M16531</guid>
      <dc:creator>mad_dad</dc:creator>
      <dc:date>2008-07-07T19:53:26Z</dc:date>
    </item>
    <item>
      <title>Re: Posting some example code for QG8 IIC</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Posting-some-example-code-for-QG8-IIC/m-p/201569#M16532</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;The master SDA pin is connected to all slave SDA pins.&amp;nbsp; The&amp;nbsp;master&amp;nbsp;SCL pin is connected to all slave SCL pins.&amp;nbsp; There are 1K pull-up resistors on each, although the value is probably not that critical (1K to 10K).&amp;nbsp; Obviously you need a common ground.&amp;nbsp; Physically my boards are daisy chained within a few inches w/ 6 inches or so of&amp;nbsp;wire (unshielded) connecting them.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I recall having a similar situation in my debugging, and you have to be sure each slave frees the bus.&amp;nbsp; I am guessing its a sw problem, unless you are using some long wire runs.&amp;nbsp; You may need a scope&amp;nbsp; to see whats going on.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;The HCS08 IIC peripheral is very flexible (too flexible?) and so your code does most of the work on both the master and slave sides.&amp;nbsp; The shared bus makes debugging complicated and time consuming.&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 04 Oct 2008 18:08:55 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Posting-some-example-code-for-QG8-IIC/m-p/201569#M16532</guid>
      <dc:creator>fm</dc:creator>
      <dc:date>2008-10-04T18:08:55Z</dc:date>
    </item>
    <item>
      <title>Re: Posting some example code for QG8 IIC</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Posting-some-example-code-for-QG8-IIC/m-p/201570#M16533</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;It turns out that I needed to set the drive strength for SDA and SCL to low drive. I set PTCDS to 0x7C and it all burts into life. This was covered in another post&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;A href="http://forums.freescale.com/freescale/board/message?board.id=8BITCOMM&amp;amp;message.id=11317#M11317" target="_blank"&gt;http://forums.freescale.com/freescale/board/message?board.id=8BITCOMM&amp;amp;message.id=11317#M11317&lt;/A&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I noww have a master and 5 slaves, each slave can have a different message size (unlike yours, message size is predefined). It operates much like a MILStd1553 bus. In fact it is to be used in a similar situation.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;You are right about releasing the bus, I remember that the code was quite critical around that area.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;And yes debugging was very tricky with the slaves when interrupts are constantly occuring.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;If anyone is interested and your example is not suitable I could post my code.&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;Message Edited by mad_dad on &lt;SPAN class="date_text"&gt;2008-10-14&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;10:15 AM&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 14 Oct 2008 16:06:01 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Posting-some-example-code-for-QG8-IIC/m-p/201570#M16533</guid>
      <dc:creator>mad_dad</dc:creator>
      <dc:date>2008-10-14T16:06:01Z</dc:date>
    </item>
    <item>
      <title>Re: Posting some example code for QG8 IIC</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Posting-some-example-code-for-QG8-IIC/m-p/201571#M16534</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Please post your code too.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Thank you,&lt;/DIV&gt;&lt;DIV&gt;FWFan&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 04 Dec 2008 14:18:15 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Posting-some-example-code-for-QG8-IIC/m-p/201571#M16534</guid>
      <dc:creator>FWFan</dc:creator>
      <dc:date>2008-12-04T14:18:15Z</dc:date>
    </item>
    <item>
      <title>Re: Posting some example code for QG8 IIC</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Posting-some-example-code-for-QG8-IIC/m-p/201572#M16535</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;I2C SLAVE DRIVER SPEC&lt;/DIV&gt;&lt;DIV&gt;tx,rx message length predefined&lt;/DIV&gt;&lt;DIV&gt;messages handled by ISR&lt;/DIV&gt;&lt;DIV&gt;driver polled every 10ms for new messages&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;#ifndef I2C_Slave_Driver_h&lt;BR /&gt;#define I2C_Slave_Driver_h 1&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;#include "Types.h" // definitions for bool,byte&lt;BR /&gt;#include "IO_Map.h"&amp;nbsp; // hardware definitions&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;//&amp;nbsp;The Slave I2C driver will respond to its address on the&lt;BR /&gt;//&amp;nbsp;I2C link and an interrupt will be generated for each&lt;BR /&gt;//&amp;nbsp;byte of data sent or received.&lt;BR /&gt;//&amp;nbsp;The number of bytes is predefined for Tx and Rx.&lt;BR /&gt;//&amp;nbsp;Buffer size max 16&lt;BR /&gt;//&amp;nbsp;Flag is set when new message is received.&lt;BR /&gt;&amp;nbsp; #define IIC_BUFFER_SIZE 16&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;Initialise the I2C driver as a slave at an address&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;Define the number of bytes to be Rx and Tx&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; extern void Init_I2CS(byte Addr, byte Number_RX_Bytes, byte Number_TX_Bytes);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;Interrupt handler to manage all slave events on the I2C&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;link&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; extern interrupt void I2C_ISR(void );&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;Reports true when complete RX message received cleared&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;by reading the data&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; extern bool I2CS_Get_RX_Message_Received(void );&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;Returns the last RX data received.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;Copies bytes to pointer location supplied&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;Only copies number of bytes set by initialisation&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; extern void I2CS_Get_RX_Data(byte* Data);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;Stores the TX data for transmission. Copies to pointer&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;location supplied.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;TX data is only copied when bus is inactive. Only copies&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;number of bytes set by initialisation&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; extern void I2CS_Set_TX_Data(const byte* Data);&lt;BR /&gt;&lt;/DIV&gt;&lt;DIV&gt;BODY&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;#include "I2C_Slave_Driver.h"&lt;/DIV&gt;&lt;DIV&gt;static byte I2CS_RX_Data[IIC_BUFFER_SIZE];&lt;BR /&gt;static byte I2CS_TX_Data[IIC_BUFFER_SIZE];&lt;BR /&gt;static byte I2CS_Counter = 0;&lt;BR /&gt;static byte I2CS_Number_RX_Bytes = 0;&lt;BR /&gt;static byte I2CS_Number_TX_Bytes = 0;&lt;BR /&gt;static bool I2CS_RX_Message_RXd = FALSE;&lt;/DIV&gt;&lt;DIV&gt;void Init_I2CS(byte Addr, byte Number_RX_Bytes, byte Number_TX_Bytes)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; byte i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; // initialise with odd parity&lt;BR /&gt;&amp;nbsp;&amp;nbsp; for (i=0;i&amp;lt;IIC_BUFFER_SIZE;i++){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2CS_RX_Data[i] = 0x80;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2CS_TX_Data[i] = 0x80;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; I2CS_Number_TX_Bytes = Number_TX_Bytes;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; I2CS_Number_RX_Bytes = Number_RX_Bytes;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _IIC1A.Byte = Addr&amp;lt;&amp;lt;1;&amp;nbsp;/* IIC Address shift left 1 bit&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _IIC1C.Bits.IICEN = 1;&amp;nbsp;&amp;nbsp;/* Enable IIC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _IIC1C.Bits.IICIE = 1;&amp;nbsp;&amp;nbsp;/* Enable IIC interrupts */&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;interrupt void I2C_ISR(void )&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;byte Temp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;Temp = _IIC1S.Byte;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* ACK the interrupt */&amp;nbsp;&lt;BR /&gt;&amp;nbsp;_IIC1S.Bits.IICIF = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // clear flag&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;if (_IIC1S.Bits.ARBL == 1) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Verify the Arbitration lost status&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; _IIC1S.Bits.ARBL= 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; _IIC1C.Bits.MST = 0;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; return;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;}&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;/* If Arbitration is OK continue */&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; if (_IIC1S.Bits.IAAS == 1) {&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* If it is the first byte transmitted */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _IIC1C.Bits.TX = _IIC1S.Bits.SRW;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Set the transmision reception status */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2CS_Counter = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// reset byte counter&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _IIC1S.Bits.IAAS = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // clear flag&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* If we are receiving data read IIC1D to free bus and get the next byte */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (_IIC1C.Bits.TX == 0) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Temp = _IIC1D.Byte;&amp;nbsp;&amp;nbsp; // dummy read&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; if (_IIC1S.Bits.TCF ==1 ) { // byte transfer complete&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (_IIC1C.Bits.TX == 0) { // 0 = receive data&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* If RX, store it on the buffer */&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;I2CS_RX_Data[I2CS_Counter] = _IIC1D.Byte;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;I2CS_Counter += 1; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// set flag if all expected bytes received&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (I2CS_Counter == I2CS_Number_RX_Bytes) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2CS_RX_Message_RXd = TRUE;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //* Data sent by the slave */&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // If all expected bytes sent end transmission.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (I2CS_Counter == I2CS_Number_TX_Bytes ) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _IIC1C.Bits.TX = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // clear transmit&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Temp = _IIC1D.Byte;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // dummy read to free bus&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; else {&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _IIC1D.Byte = I2CS_TX_Data[I2CS_Counter];&amp;nbsp; // write data&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2CS_Counter += 1;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;}&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;bool I2CS_Get_RX_Message_Received(void )&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;// new message = 1&lt;BR /&gt;&amp;nbsp;&amp;nbsp;return I2CS_RX_Message_RXd;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;void I2CS_Get_RX_Data(byte* Data)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; byte Temp;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;// clear message recieved flag&lt;BR /&gt;&amp;nbsp; I2CS_RX_Message_RXd = FALSE;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; for(Temp=0; Temp&amp;lt;I2CS_Number_RX_Bytes; Temp++) {&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Data[Temp] = I2CS_RX_Data[Temp];&amp;nbsp;&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;void I2CS_Set_TX_Data(const byte* Data)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; byte Temp;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; for(Temp=0; Temp&amp;lt;I2CS_Number_TX_Bytes; Temp++) {&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2CS_TX_Data[Temp] = Data[Temp];&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;}&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 06 Jan 2009 23:07:18 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Posting-some-example-code-for-QG8-IIC/m-p/201572#M16535</guid>
      <dc:creator>mad_dad</dc:creator>
      <dc:date>2009-01-06T23:07:18Z</dc:date>
    </item>
    <item>
      <title>Re: Posting some example code for QG8 IIC</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Posting-some-example-code-for-QG8-IIC/m-p/201573#M16536</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;I2C MASTER DRIVER SPEC&lt;/DIV&gt;&lt;DIV&gt;tx,rx message size predefined&lt;/DIV&gt;&lt;DIV&gt;messages sent every 10ms&lt;/DIV&gt;&lt;DIV&gt;for read data send command and wait for not busy&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;#ifndef I2C_Master_Driver_h&lt;BR /&gt;#define I2C_Master_Driver_h 1&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;#include "Types.h" // definitions of bool,byte&lt;BR /&gt;#include "IO_Map.h"&amp;nbsp; // hardware definitions&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;//&amp;nbsp;The Master I2C driver can command a TX or RX message to&lt;BR /&gt;//&amp;nbsp;any slave.&lt;BR /&gt;//&amp;nbsp;A Tx or Rx message is initiated with the slave address&lt;BR /&gt;//&amp;nbsp;and then an interrupt is generated by the device after&lt;BR /&gt;//&amp;nbsp;each byte is sent or received.&lt;BR /&gt;//&amp;nbsp;The length of the messages can be different for each&lt;BR /&gt;//&amp;nbsp;slave.&lt;BR /&gt;//&amp;nbsp;Max message size&amp;nbsp;16 bytes.&lt;BR /&gt;//&amp;nbsp;Get_Busy_Status returns True whilst bus active&lt;BR /&gt;//&amp;nbsp;Use Get_Busy_Status to indicate message transaction&lt;BR /&gt;//&amp;nbsp;complete before Get_Read_Bytes.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;#define IIC_DIV 0x00&amp;nbsp; // mult 1, ICR 00 (SCL div = 20, SDA hold = 7)&lt;BR /&gt;// 4MHz / (1 * 20) = 200K, SDA hold time = (1/4Mhz) * 7 = 1.75us&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define IIC_BUFFER_SIZE&amp;nbsp;16&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;Initailise the I2C module for master mode&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; extern void Init_I2CM(void );&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;Interrupt handler to manage all master events on the I2C&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;link&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; extern interrupt void I2C_ISR(void );&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;Reports True during transmission&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; extern bool I2CM_Get_Busy_Status(void );&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;Return the success of the last transmission.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; extern bool I2CM_Get_No_Resp_Status(void );&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;Starts an I2C transmission to read a number of bytes&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;from a slave at an address. When complete use Get_Read_&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;Bytes for data received.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; extern void I2CM_Read_Bytes(byte Slave_Addr, byte Number_Of_Bytes);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;Copies data received to pointer location supplied.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;Only copies the number of bytes that was requested in&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;the message.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; extern void I2CM_Get_Read_Data(byte* Data);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;Starts an I2C transmission to write a number of bytes to&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;a slave at an address. Copies data from pointer&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;location, only copies number of bytes requested..&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; extern void I2CM_Write_Bytes(byte Slave_Addr, byte Number_Of_Bytes, const byte* Data);&lt;/DIV&gt;&lt;DIV&gt;#endif&lt;BR /&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;BODY&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;#include "I2C_Master_Driver.h"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;#define IIC_ERROR_STATUS 0&lt;BR /&gt;#define IIC_READY_STATUS 1&lt;BR /&gt;#define IIC_HEADER_SENT_STATUS 2&lt;BR /&gt;#define IIC_DATA_TRANSMISSION_STATUS 3&lt;BR /&gt;#define IIC_DATA_SENT_STATUS 4&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;static byte I2CM_RX_Data[IIC_BUFFER_SIZE];&lt;BR /&gt;static byte I2CM_TX_Data[IIC_BUFFER_SIZE];&lt;BR /&gt;static byte I2CM_Counter = 0;&lt;BR /&gt;static byte I2CM_Step = IIC_READY_STATUS;&lt;BR /&gt;static byte I2CM_Length = 1;&lt;BR /&gt;static byte I2CM_Data_Direction = 0;&lt;BR /&gt;static byte Last_But_One = 0;&lt;BR /&gt;static bool No_Resp = TRUE;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;void Init_I2CM(void )&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _IIC1C.Bits.IICEN = 1;&amp;nbsp;&amp;nbsp;/* Enable IIC module&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _IIC1F.Byte = IIC_DIV;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Set IIC frequency = 100K Baud&amp;nbsp; */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2CM_Step = IIC_READY_STATUS;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _IIC1C.Bits.IICIE = 1;&amp;nbsp;&amp;nbsp;/* Enable IIC interrupts */&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;interrupt void I2C_ISR(void )&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; byte Temp;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; /* Interrupts generated after the slave address has been sent and after each data byte&lt;BR /&gt;&amp;nbsp;&amp;nbsp; ,write or read mode, when performing a read the IIC needs to be disabled straight after the data&lt;BR /&gt;&amp;nbsp;&amp;nbsp; byte is read or another interrupt will be generated.*/&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; Temp = _IIC1S.Byte;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* ACK the interrupt */&lt;BR /&gt;&amp;nbsp; _IIC1S.Bits.IICIF=1;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; /* Verify the Arbitration lost status */&lt;BR /&gt;&amp;nbsp; if(_IIC1S.Bits.ARBL==1){&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _IIC1S.Bits.ARBL = 1;&amp;nbsp;// clear=1&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _IIC1C.Bits.MST = 0;&amp;nbsp;&amp;nbsp;// reset master bit&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _IIC1C.Bits.IICEN = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2CM_Step = IIC_ERROR_STATUS;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; /* if State = Header Sent */&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; if(I2CM_Step == IIC_HEADER_SENT_STATUS){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(_IIC1S.Bits.RXAK==1){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; _IIC1C.Bits.MST = 0;&amp;nbsp;&amp;nbsp;// reset master bit&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; _IIC1C.Bits.IICEN = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; I2CM_Step = IIC_READY_STATUS;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; return;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _IIC1C.Bits.TX = I2CM_Data_Direction;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // set direction&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2CM_Step = IIC_DATA_TRANSMISSION_STATUS;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // set next state&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(_IIC1C.Bits.TX == 0){&amp;nbsp; /* If we are reading data clock in first slave byte */&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Temp = _IIC1D.Byte;&amp;nbsp;// read data byte&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; /* If state = byte transmision is in progress.*/&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; if(I2CM_Step == IIC_DATA_TRANSMISSION_STATUS){&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(_IIC1C.Bits.TX == 1) { /* If Master is sending data to slave */&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; _IIC1D.Byte = I2CM_TX_Data[I2CM_Counter];&amp;nbsp; /* Send the next byte */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; I2CM_Counter += 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; /* Mark we are done sending Bytes */&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; if(I2CM_Length == I2CM_Counter) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2CM_Step = IIC_DATA_SENT_STATUS;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else {&amp;nbsp; // reading data from slave&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(I2CM_Counter == Last_But_One) {&amp;nbsp; &amp;nbsp; // last byte ?&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2CM_RX_Data[I2CM_Counter] = _IIC1D.Byte;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Read the byte */ &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _IIC1C.Bits.MST = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// reset master bit to&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Generate a stop condition&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _IIC1C.Bits.IICEN = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // disable IIC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2CM_Counter += 1;&amp;nbsp; // do not optimise by moving above&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2CM_Step = IIC_READY_STATUS;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //finished&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; No_Resp = FALSE;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2CM_RX_Data[I2CM_Counter] = _IIC1D.Byte;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Read the next byte */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2CM_Counter += 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*&amp;nbsp; Master should not ACK the last byte */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(I2CM_Counter == Last_But_One) _IIC1C.Bits.TXAK = 1;&amp;nbsp;/* If penultimate byte indicate end of transfer */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp; /* if state = We are done with the transmition.*/&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; else {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _IIC1C.Bits.TX = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// set RX mode&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _IIC1C.Bits.MST = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// reset master bit to&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Generate a stop condition&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _IIC1C.Bits.IICEN = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // disable IIC&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2CM_Step = IIC_READY_STATUS;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // finished&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; No_Resp = FALSE;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;bool I2CM_Get_Busy_Status(void )&lt;BR /&gt;{&amp;nbsp;&lt;BR /&gt;&amp;nbsp; return (I2CM_Step &amp;gt; IIC_READY_STATUS);&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;bool I2CM_Get_No_Resp_Status(void )&lt;BR /&gt;{&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; // return TRUE if no response from last requested slave&lt;BR /&gt;&amp;nbsp; return No_Resp;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;void I2CM_Read_Bytes(byte Slave_Addr, byte Number_Of_Bytes)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; byte Temp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; _IIC1C.Bits.IICEN = 0;&lt;BR /&gt;&amp;nbsp; I2CM_Length = Number_Of_Bytes;&lt;BR /&gt;&amp;nbsp; Last_But_One = Number_Of_Bytes - 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // save time calculating later&lt;BR /&gt;&amp;nbsp; I2CM_Counter = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// reset counter&lt;BR /&gt;&amp;nbsp; I2CM_Step = IIC_HEADER_SENT_STATUS;&lt;BR /&gt;&amp;nbsp; I2CM_Data_Direction = 0;&amp;nbsp;&amp;nbsp;// set for read&lt;BR /&gt;&amp;nbsp; No_Resp = TRUE;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; _IIC1C.Bits.IICEN = 1;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; /* Format the Address to fit in the IICA register and place a 1 on the R/W bit. */&lt;BR /&gt;&amp;nbsp; Slave_Addr &amp;lt;&amp;lt;=1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// shift left 1 bit&lt;BR /&gt;&amp;nbsp; Slave_Addr &amp;amp;= 0xFE;&lt;BR /&gt;&amp;nbsp; Slave_Addr |= 0x01;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Set the Read from slave bit. */&lt;BR /&gt;&amp;nbsp; Temp = _IIC1S.Byte;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Clear any pending interrupt&amp;nbsp; */&lt;BR /&gt;&amp;nbsp; _IIC1S.Bits.IICIF=1;&lt;BR /&gt;&amp;nbsp; _IIC1C.Bits.MST = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// reset master bit&lt;BR /&gt;&amp;nbsp; _IIC1C.Bits.TX = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Select Transmit Mode&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;&amp;nbsp; _IIC1C.Bits.MST = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Select Master Mode (Send Start Bit)*/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; _IIC1D.Byte=Slave_Addr;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Send selected slave address&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;void I2CM_Get_Read_Data(byte* Data)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;byte Temp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; for(Temp=0; Temp&amp;lt;I2CM_Length; Temp++)&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Data[Temp] = I2CM_RX_Data[Temp];&amp;nbsp;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;void I2CM_Write_Bytes(byte Slave_Addr, byte Number_Of_Bytes, const byte* Data)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; byte Temp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; _IIC1C.Bits.IICEN = 0;&lt;BR /&gt;&amp;nbsp; I2CM_Length = Number_Of_Bytes;&lt;BR /&gt;&amp;nbsp; I2CM_Counter =0;&lt;BR /&gt;&amp;nbsp; I2CM_Step = IIC_HEADER_SENT_STATUS;&lt;BR /&gt;&amp;nbsp; I2CM_Data_Direction = 1;&lt;BR /&gt;&amp;nbsp; No_Resp = TRUE;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; // copy data into buffer&lt;BR /&gt;&amp;nbsp; for(Temp=0; Temp&amp;lt;Number_Of_Bytes; Temp++)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; I2CM_TX_Data[Temp] = Data[Temp];&lt;BR /&gt;&amp;nbsp; _IIC1C.Bits.IICEN = 1;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; /* Format the Address to fit in the IICA register and place a 0 on the R/W bit.*/&lt;BR /&gt;&amp;nbsp; Slave_Addr &amp;lt;&amp;lt;=1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// shift left 1 bit&lt;BR /&gt;&amp;nbsp; Slave_Addr &amp;amp;= 0xFE;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; Temp = _IIC1S.Byte;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Clear any pending interrupt */&lt;BR /&gt;&amp;nbsp; _IIC1S.Bits.IICIF = 1;&lt;BR /&gt;&amp;nbsp; _IIC1C.Bits.MST = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// reset master bit&lt;BR /&gt;&amp;nbsp; _IIC1S.Bits.SRW = 0;&lt;BR /&gt;&amp;nbsp; _IIC1C.Bits.TX = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Select Transmit Mode */&lt;BR /&gt;&amp;nbsp; _IIC1C.Bits.MST = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Select Master Mode (Send Start Bit) */&amp;nbsp;&lt;BR /&gt;&amp;nbsp; _IIC1D.Byte = Slave_Addr;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Send selected slave address */&lt;/DIV&gt;&lt;DIV&gt;}&lt;BR /&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;Message Edited by mad_dad on &lt;SPAN class="date_text"&gt;2009-01-06&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;03:42 PM&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;Message Edited by mad_dad on &lt;SPAN class="date_text"&gt;2009-01-06&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;03:50 PM&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 06 Jan 2009 23:41:27 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Posting-some-example-code-for-QG8-IIC/m-p/201573#M16536</guid>
      <dc:creator>mad_dad</dc:creator>
      <dc:date>2009-01-06T23:41:27Z</dc:date>
    </item>
    <item>
      <title>Re: Posting some example code for QG8 IIC</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Posting-some-example-code-for-QG8-IIC/m-p/201574#M16537</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Thank you Mad Dad.&lt;/DIV&gt;&lt;DIV&gt;Much appreciated for your reply.&lt;/DIV&gt;&lt;DIV&gt;I'm trying to communicate controlller&lt;/DIV&gt;&lt;DIV&gt;to controller using i2c.&lt;/DIV&gt;&lt;DIV&gt;I'm also trying to communicate&lt;/DIV&gt;&lt;DIV&gt;to the eeprom later with i2c.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Thank you very much.&lt;/DIV&gt;&lt;DIV&gt;FWFan&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 08 Jan 2009 14:23:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Posting-some-example-code-for-QG8-IIC/m-p/201574#M16537</guid>
      <dc:creator>FWFan</dc:creator>
      <dc:date>2009-01-08T14:23:50Z</dc:date>
    </item>
    <item>
      <title>Re: Posting some example code for QG8 IIC</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Posting-some-example-code-for-QG8-IIC/m-p/201575#M16538</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi JimDon.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Did you happen to save the files that Fm shared? The posted link&amp;nbsp;is no longer valid. &amp;nbsp;I imagine lots of people would like to see a copy.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Richly&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 23 Jun 2010 12:11:20 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Posting-some-example-code-for-QG8-IIC/m-p/201575#M16538</guid>
      <dc:creator>Richly</dc:creator>
      <dc:date>2010-06-23T12:11:20Z</dc:date>
    </item>
    <item>
      <title>Re: Posting some example code for QG8 IIC</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Posting-some-example-code-for-QG8-IIC/m-p/201576#M16539</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have my IIC code for an EEPROM.&amp;nbsp; It only saves to the eeprom, so the code is not a complete master and slave communication.&amp;nbsp; But it does follow the flow chart in the IIC section of the MC09SQE128 microcontroller correspondingly.&amp;nbsp; If you need more files that go with this code please let me know.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;FWFan&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 23 Jun 2010 22:22:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Posting-some-example-code-for-QG8-IIC/m-p/201576#M16539</guid>
      <dc:creator>FWFan</dc:creator>
      <dc:date>2010-06-23T22:22:50Z</dc:date>
    </item>
  </channel>
</rss>

