Jim, your specific problem is this: At the beginning of your code it starts out: >> init >> movlw LupCnt >> movwf count >> ... Now you've commented out the org 0 so that was ignored, however in the absence of any directive the assembler starts loading code at location 0. (makes sense yes?) Now later in your program you have: >>; >> org 0 >> goto main >>; >> END Which re-sets the program counter to zero and trys to assemble the 'goto main' into that address. Which overwrites the 'movlw LupCnt' that you had in init above. The correct fix for this specific problem is that you should move the 'goto main' to be the first statement in your program and then it will assemble at location 0 and all will be well. I both agree and disagree with what has been said about Parallax's assembler. On the one hand, if you've got working MPASM code it can be a real pain to get it to assemble correctly with the Parallax assembler. On the other hand, if you learn the Parallax assemblers quirks early on (and MPASM has its own) then writing new code from scratch can be fairly easy in both. The lack of a macro facility and conditional assembly in the Parallax assembler hurt it, however if you are using Linux then you could always run cpp over the code before feeding it to pasm. --Chuck McManis All opinions in this message/article are Sun Microsystems Inc. those of the author, who may or may not Internet: cmcmanis@Eng.sun.COM be who you think it is. Crypto-puzzle: *0U0JPFPrWRN9PkWRKeP5WRmIR9wP5QAWuIQP9Pu9tnIZ7AD1SIS