Just completed conversion from PIC16F7x assembly code to AVR atmegax8
for a production product, here is what I found:
1) PIC assembly instruction is more symatrical in register access. you don't have too many suprise in which registers can be used for what instruction in PIC, the AVR have lots of limitation in which register can be used for which instruction.
2) PIC chip program memory is noramlly quoted with words, such as pic16f72 is 2 k word device, pic16f73 is 4 k words device. the AVR chip program memory is noramlly quoted with bytes, but their instructions are 16 bit wide !! e.g. ATMEGA48 is 4 k byte device but you only have 2k instruction step to use therefore it is equ. to pic16f72. same for ATMEGA8 is equ. to pic16f73 and is 4k instruction device.
3) the price of PIC 16Fxx chip is about the same as AVR Atmega chip with same program memory "WORD" space. in quantiity. ATMEGA8 is about the same price as PIC16F73 in quantity with the same 4 k words program memory.
4) the speed of PIC instruction cycle = clock/4 i.e. 20Mhz=5mips
the speed of AVR instruction cycle = clock/1 i.e. 20Mhz=20mips.
BUT in real life: the PIC instruction need only 1 cycle to move data in between registers and W register for operation by ALU. the AVR need 2cycles, also AVR has only 32 registers can be accessed directly by ALU, you need to move data to register from RAM first, it costs 2 cycles. So, in average the AVR needs about 35% more cycle to process in my conversion code. compared to the original PIC. the code size of AVR is also larger than PIC, about 30% more.
5) the MPLAB from PIC is better and more stable than AvrStudio for AVR. still found bugs in AVRStudio. the TRACE function in MPLAB is very useful for optimizing your code. it is not available in AvrStudio unless you buy their ICE. the same for Proteus VSM for PIC and AVR, (strange bugs in AVR model).
conclusion:
1)PIC is slower than AVR in terms of instruction cycle. they are limited by clock/4. AVR are faster but need 35% more cycle to get the job done.
2)PIC code size is smaller than AVR. about 30% smaller in my case.
3) PIC chip is more easy to use than AVR, instruction set is simple and easy to understand. RETLW, PC modified jump are most usefull. AVR instruction set are more difficult to learn and lots of exceptions in terms of regiater/ram access(therefore need more instruction and cycle to get the things done). for beginner I recommand PIC.
4) I like SX chip from Ubicom but they are about 2 times expensive than PIC and AVR. also I/O pin count is a problem. (you need to pay even more)
5) PIC clone from Taiwan company are cheaper/faster but only have OTP, not re-programmable FLASH. which is important in terms of product revision update.