It seems some people mistakenly believe that C is a high level language :-) In fact in the hands of an experienced programmer C can be a structured assembler. That is the derogatory term for it that most structured language bigots (Pascal, M2, etc) use. Take for example a routine to toggle a bit on and off. If you code it: #define PORTB *((char *)(0x6)) main() { while (1) { PORTB ^= 1; } And what you get is nearly identical to what you would write by hand. Now you could code it "stupidly" as in: void poke(a, b) { *(char *)a = b; } main() { char a; a = 1; while (1) { if (a == 1) { poke(6, 1); a = 0; } else { poke(6, 0); a = 1; } } } You would take up lots of instructions and it would look as if C was a very inefficient language to write in. Basically C can be written like assembler. And people who use C in embedded applications use it that way. Unfortunately most programming texts that use C, teach it as though it is a much more sophisticated language :-). C was written originally as a "structured assembler" for the PDP-11, so that folks at Bell Labs could write the UNIX system code easily and recognize what was going on just by looking at what they had written. This is a step up from raw assembler and the BLISS compiler was either non-existant or not powerful enough to do the same sort of thing. The bottom line is that it makes perfect sense to have a C compiler for PIC chips. However, this doesn't mean that you should expect to write anything more complicated than you currently can, just that the source to what you write will be easier to read later. Also, in my opinion, if you are on the absolute edge of performance or space requirements, you'll probably end up in assembler anyway. --Chuck