TRC1, I think the only thing that hasn't been covered is the logic used to get off the limit switch: Typically, this would allow movement only in the opposite direction when a given limit is hit, since it is known from what direction the machine must have moved to activate a given limit.
For more accurate homing, usually you would use an extra switch rather than the limits, but that is up to you. The advantage would be that different logic can apply to a dedicated input/output from the home switch, whereas a limit switch needs a different logic.
I am not sure how you would incorporate this homing logic in your controller software, but usually a very slow jog is used to trigger the home switch, and when the controller gets the signal that the switch has changed states, then the controller looks for the very next input pulse from the encoder's index position. This is a single pulse output from a special single line on the encoder's encoded disk. I am assuming you have an encoder on your screws.
First you get good, then you get fast. Then grouchiness sets in.
(Note: The opinions expressed in this post are my own and are not necessarily those of CNCzone and its management)