I've programmed both, though, not a PIC for many years now... PICs are just weird.
The AVR is a pretty typical Harvard RISC: 32 registers, memory load/store, direct/indirect jumps, stack pointer pointing at ram, etc. It's still 8/16 bit, so some pairs of 8 bit registers work like 16 bit registers.
The PIC has one accumulator register; ram is a set of (manually selected) register banks. Instructions operate on the accumulator and an operand in the selected bank. The stack is totallyseparate from other RAM, so it's fixed size (8 maybe?) and can only be used with call/return.
I don't want to be judgmental; there's certainly some strange virtues to PIC, like the lack of any real state to save/restore on ISR entry/exit; but they really just don't fit my mental concept of a CPU.
Exercise for the reader: Given the stack and register bank selection, which one of these has better C compilers?
(Still, if you're learning something new, gamble is right: ARM is the future.)
PIC is clearly designed for non-C assembly code, with all global variables. Its ancient.
PIC32 is actually a MIPS core (sorta, kinda, maybe). It actually uses GCC to compile (good luck on compiling your own GCC though). However, there isn't much appeal with CM3 now on the scene.
PIC24, the 16bit PIC variant, is much imporved in this respect. You have 16 working registers (though one of these is used for the stack), four of these are shadowed for fast store/restore (eg, so the registers can be used in an interrupt handler), memory is directly accessible (most instructions can operate on both memory and registers equally) and the instruction set is very simple and regular.
I have not used it with C (I have so far written my code in PIC assembly), but they claim the instruction set is very compiler friendly and at a guess, I'd say they're right since the memory access is very regular and most instructions also come in convenient three-operand forms.
I'm not sure if the instruction set for the PIC24 is basically a 16bit variant of the PIC32 (have not looked into these in detail yet), but from the code samples I've seen, it seems to be. So PIC24, like PIC32, seems to be a RISC-based core.
I actually like the PIC24. Besides the painful lack of (assembly) documentation outside the datasheet and various reference manuals (I guess nobody programs them in assembly these days? I suppose the same problem probably exists for other newish microcontorllers too?), it is very nice and easy to work with. The assembly language is very simple and easy to use. But, since the Cortex-M3 is similarly priced, but is faster (~100MHz vs 40MHz for a PIC24H), is 32bit, has a ton of features and peripheral support, its hard to choose PIC over these. I will probably look into switching to CM3 for my next project.
The AVR is a pretty typical Harvard RISC: 32 registers, memory load/store, direct/indirect jumps, stack pointer pointing at ram, etc. It's still 8/16 bit, so some pairs of 8 bit registers work like 16 bit registers.
The PIC has one accumulator register; ram is a set of (manually selected) register banks. Instructions operate on the accumulator and an operand in the selected bank. The stack is totally separate from other RAM, so it's fixed size (8 maybe?) and can only be used with call/return.
I don't want to be judgmental; there's certainly some strange virtues to PIC, like the lack of any real state to save/restore on ISR entry/exit; but they really just don't fit my mental concept of a CPU.
Exercise for the reader: Given the stack and register bank selection, which one of these has better C compilers?
(Still, if you're learning something new, gamble is right: ARM is the future.)