Collision detection can be a tricky thing, depending on the type of game, and also, whether you're talking sprite on sprite, or sprite on background.
For sprite on sprite (Software metasprites, not hardware sprites), you probably want to do a sort of bounding box collision. You set up bounding boxes around an object by keeping track of the object's coordinates and calculating the Y positions of the top and bottom borders of the box, and the X positions of the left and right borders of the box based off of the object's coords. So each object(metasprite) that can collide with another has these boxes around them. Then what you do is a simple series of comparisons to check if the sprites
aren't overlapping. If it fails all of the checks, the objects have collided. These comparisons compare the positions of the bounding box borders of two objects that could be colliding. See here for more information:
http://nesdev.com/bbs/viewtopic.php?t=3743
For sprite to background, it's a bit different. You still want to have the bounding boxes set up around the sprite, but you keep track of certain points on the bounding box that will collide with the background. In order to collide with that background, you have to have a map of some sort in RAM or ROM which describes what's on screen or to be collided with. You usually take the coordinates of the points on these bounding boxes, and somehow find out what tile is at that position in the map. Once you find out which tile (It could be a metatile, or single tile, or whatever) is being collided with, you can do what you want. Usually there are different tile types (water, diagonal solid, complete solid, etc.) that are collided with, so you want to do different things depending on which tile type you collided with.
How exactly you go about doing this depends on what limits you have, what type of game you're making, etc.
Oh, and sorry about your ankle. I've been lucky enough to have never had a broken limb ever; it sounds like it would hurt a lot =(.