Hello list. :) I=E2=80=99m working on a simple data acquisition project based on the=20 16F9877A. I=E2=80=99m using HI-TECH PICC Lite v8.02pl1 as my compiler. No simulato= r=20 or ICD, all code is run on device. I=E2=80=99ve gotten things to work more or less, but for reasons I don=E2= =80=99t understand. I was wondering if some folks might be able to provide me with the "why". First problem is with strings- they don=E2=80=99t work unless I use -NO_STRING_PACK. I thought that the 877A could read its own program memory and string packing should work. The USART demo from microchipc.com also fails when string packing is enabled, so it isn=E2=80= =99t=20 my code. The second problem puzzles me more. I have a function that writes data out to an 8-bit bi-directional bus. However, the parameter isn=E2=80=99t= =20 passed properly. No matter what I pass in to the function, the parameter=20 comes in a 0x80. Here=E2=80=99s some pseudo code. void outtobus(unsigned char data, unsigned char flag, unsigned char=20 flag2) { //...some code... does not modify =E2=80=98data=E2=80=99... sets port as o= utput putchhex(data); // always prints 0x80 //...more code... puts data to bus... } void initbus() { putchhex(0b10101010); //prints 0xAA as expected. outtobus(0b10101010); //prints 0x80, and puts 0x80 out to bus!? } void main() { initbus(); //other functions that call outtobus also always send 0x80? } My solution to this one was to switch the compiler optimization level from none to '9'. Again, not sure why it fails with no optimization. I=E2=80=99m just not so conformable with the "it works now" way of thinking= ,=20 I=E2=80=99d rather know way it didn=E2=80=99t work before so I don't repeat the same=20 problems! Thanks for any insight. Jake -- http://www.piclist.com hint: The PICList is archived three different ways. See http://www.piclist.com/#archives for details.