> I need to buy a programmer for the PIC 16C74 and have found three that are > available from Digikey. They are in descending price order: > > 1.) Promate Development Kit from Microchip at $695.00 plus $141.00 for 40 > pin DIP socket module. > > 2.) PIC Programmer from Parallax (PICPGM) at $215.58 plus $49.00 for 40 pin > ZIF adaptor > > 3.) PICSTART 16C from Microchip at $193.32 [4] Spin your own. Really, this is not at all difficult for any of the PICs except the 5x series and even they're not hard. All you need to program a PIC are: (a) +5 to VDD and ground to VSS [of course] (b) The ability to output to RB7, and both output and input [an open-collector output w/ pullup and input is fine] on RB6 (I may have those backwards) (c) The ability to selectively place /MCLR at ground or +12 volts [+5 is also useful, since it will allow your program to run. Note that the rise time from 0 to +12 must be pretty fast [1us]. In many cases, these requirements may be easily met even while the chip is in-circuit; the preferred embodiment is to have a four-pin header with RB6, RB7, /MCLR, and ground tied to it; if these signals are needed elsewhere, tie them off with resistors. > >From what I can tell the Promate (#1) can program all variations of PIC's > but will require that I purchase a separate adaptor for each pinout at > around $150 each (can you say pure profit). The Parallax programmer (#2) > will allow me to program the PIC 16C5X series and the PIC 16C84 which the > PICSTART 16C (#3) does not support. The 16C84 is a great chip for development, especially when combined with a programming header as described above; you can leave the chip in the cir- cuit and reprogram it as many times as you need for debugging. Not quite as nice as an emulator, but at under $7 it's a lot cheaper. > The most important consideration to me is the assembler. The Parallax > assembler says that it accepts Microchip and 8051-like instructions (which > I am familiar with). I am about to purchase the Parallax programmer, but I > would like to hear from other developers. Any comments? Are there any > other programmers available? Are these prices good? Thanks for your help! Unfortunately, choice of assembler is a tricky issue. The difficulty is that different assemblers don't use compatible source, so if you choose one and then have to incorporate into your project source developed with a different one you could be in for some headaches. On the Parallax assembler, there are three types of instructions: [1] "True" PIC opcodes (e.g. "andlw 45" or "btfsc C") [2] Single-instruction pseudo-ops (e.g. "skipz" is equivalent to "btfss Z") [3] Multi-instruction pseudo-ops (e.g. "jnz foo" is equivalent to "btfss Z" followed by "goto foo" and "mov foo,bar" is equivalent to "movfw bar" then "movwf foo") Generally, use of type [1] is desireable for compatibility's sake though type [2] may be more readable in some cases and translation is not diff- icult. Further, instructions of type [2] generally don't have any hidden surprises. Instructions of type [3], however, can have some nasty gotchas. Most notably: (a) They do not execute in one cycle; in some cases the execution time may be non-obvious unless you know what code the instruction "really" generates. (b) They do not fit in one word; if you are trying to use carefully placed code to allow computed jumps you have to be able to count the number of generated words of code. With instructions of type [3] this can be unduly difficult. (c) Their semantics are incomsistent; some of them trash W, but others do not. Some set flags usefully, others uselessly, and others do not affect them at all. (d) Their semantics may be overblown for the case at hand. For example, consider the instruction mov myreg.3,PORTA.7 Under Parallax, this will generate code: btfsc PORTA,7 bsf myreg,3 btfss PORTA.7 bcf myreg,3 If myreg.3 is not an I/O port, however, and is not needed by an inter- rupt routine, it is faster to do: bcf myreg,3 btfsc PORTA.7 bsf myreg,3 Which will unconditionally clear myreg.3 and then conditionally re-set it. In some cases the unconditional clear will pose a problem, but in other cases eliminating the extra test is a boon. Also, note that use of Parallax-style operations may blind you to some of the PIC's powerful features including the skip operations. For example, if you wish to execute an instruction if either porta.3 or portb.6 is set, you could use: btfss porta.3 btfsc portb.6 do whatever