Hi, can you make the generated assembly files / listings (or their contents) for both the working and the failing case accessible somehow? I think one cannot attach files here, but posting (or publishing via drive/dropbox/pastebin/...) at least the assembled main function would help to check for differences.
Best regards Raphael On Tue, Jan 21, 2020, 15:27 Richard Molton <li...@richardmolton.plus.com> wrote: > I'm new to both sdcc and I2C. Trying to write code to read data from 2 > I2c devices, master is pic16F887. Main part of code: > > > > void main (void) > { > uint8_t theta, dummy, bitdata, position; > > PORTB = 0; > > OSCCON = 0b01100001; // 0x7f Set CPU to 4MHz > > io_setup(); > > I2C_Initialise(15) ; > > > while(1) //repeat endlessly > { > > while(PORTB & 1 ) // hold while switch on demo board not > pressed > { > ; > } > PORTD = 80; > while((PORTB & 1) == 0) //hold while switch is pressed > { > ; > } > //continue when button released > > I2C_Start() ; > I2C_Write((0x71 << 1) | 1) ;//send device ID and'read' > bit > bitdata = I2C_Read(1) ; //read first byte > position = I2C_Read(0) ; //read second byte > I2C_Stop() ; > > I2C_Start() ; > I2C_Write((0x4f << 1) | 1) ;//send device ID and'read' > bit > theta = I2C_Read(1) ; //read byte 1 / ack > dummy = I2C_Read(0) ; //read byte 2 / nack > I2C_Stop() ; > > > //PORTA = 0; > PORTD = bitdata ; //3c > msleep(500); > PORTD = position ; //7e > msleep(500); > PORTD = theta; //15 approx > } > } > > The device waits until a switch on B0 is pressed and released, then > reads 2 bytes from one device at address 1110001, and 2 (1 plus a dummy) > fron a LM75 temp sensor at 1001111. > > The last block of commands just uses PORT D to display the reads > sequentially to see if it all works. Not bothering to display the second > byte of the LM75. > > As listed above, it just displays the last reading and ignores the first > two. If the PORTA=0 command is reinserted (it has no purpose in the > prog) everything is displayed OK. Pressing the 'go' button repeats this > result. > > With PORTA commented out (or left in) , it will happily display > sequences 'bitrate bitrate theta' , 'position position theta', 'position > bitrate theta' but it refuses with 'bitrate position theta'. Repeat > pressing, repeat output. > > I can find no reason for this but am reluctant with my very limited > experience to blame the compiler. . . but could this be the problem? > sdcc is being used as downloaded with no fancy settings. > > Any suggestions appreciated. Well, almost . . . > > > > _______________________________________________ > Sdcc-user mailing list > Sdcc-user@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/sdcc-user >
_______________________________________________ Sdcc-user mailing list Sdcc-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sdcc-user