I've been programming small microprocessors all my adult life, I learned programming by writing assembly code for a Heathkit H8 with an 8080 CPU.

Back in the days of the 8080, 6502, etc., a working system required an external crystal, EPROM, RAM and some kind of I/O. Add in some address decode logic, an RS232 driver made from descrete components, various caps and resistors resulted in a minimal system built out of about 10 ICs and 20+ passive components. My first couple of projects never even actuall ran.

Contrast that with the current generation microcontrollers with their onboard Flash, RAM and peripherals. I can stick a uC DIP into the breadboard, add a couple of caps, resisters and a power supply, hook up a couple more wires to a programmer and I'm good to go.

But it's not all sweetness and smiles. All modern uCs have 'features' that are less than optimum and there are two features I spend a lot of time dealing with when I program for the 8-bit PIC processors, their segmented architecture and the WREG bottle neck. Two additional concerns that I have to be aware of but seldom cause any real problems are CPU speed and stack depth.

The PIC12, PIC16 and PIC18 processors all have a single WREG that is used by most of the instructions. This allows the microcode to be very efficient in the space domain but is very inconvenient for the programmer.

The segmented architecutre used by the 8-bit PIC's makes it difficult to write code that is both efficient and bug free. Depending on the processor it may be necessary to execute from zero to three extra instructions before a SRAM/FSR access to insure the the RPn bits in the STATUS word are correct. The assembler's BANKSEL directive will generate code to correctly configure these bits but makes the conservative assumption that they all of them need to be configured.

The 8-bit PICs are available in speeds ranging from 4 to 64MHz. These are clock speeds, instruction execution is 1/4th that. There is invariably a part available that is fast enough to do the job.

Contrast this to the PIC24 and dsPIC33 familys with 16 16 bit registers, up to 40MIPs execution speed and a software stack. zzz

Talk about the PIC24, template files, tools, etc.