Very reason you would choose micro-controllers for a project, is that you aim for minimum hardware in the embedded projects you are trying to implement. Micro controllers are useful as they contain most processor-related resources (memory, I / O ports, etc.) on the processor chip itself. They have other common peripherals included too. A UART or a similar serial communication device is usually a common peripheral. Usually, what is available depends on what the manufacturers think is appropriate for the market segment the device is addressed to. Some analog peripherals are often available in-chip. So, the very first step is to make sure the peripherals you need are available on the chip.
Even though we are talking about steps, which simply a sequential process, it is not strictly so. You may have to go over the steps back and forth a few times.
Simultaneously, with this step, you will need to decide if you need a 8 bit / 16 bit or a 32 bit device for your project. 8 bit devices are the cheapest options often, but newer devices may be less power-hungry. You can get away with an 8 bit device if your application need not do much number crunching. It is mainly a control kind of application, and the 8 bit ports are sufficient to control external devices that need to be controlled. Often multiple ports are available, and that should take care of the situation that there are more than 8 items to be controlled in your project. Another related aspect would be to check for the support available for some of the standard interfaces. These will include USB, I2C, PWM, etc.
16 and 32 bit devices allow you to handle a larger range of numbers. Using an 8 bit device will slow you down for a comparable clock rate on a 16 bit or a 32 bit device. Other advantages these devices would provide will be the ability to address larger memory. Typically, it is the on-board memory. These devices will be able to address external memory too, if needed.
Having decided the controller family, you will need to narrow down to some specific members from the target families. The family members differ in the size of the resources (even actual resources). For example, the amount of non-volatile and volatile memory will differ from member to member.
When choosing a family, one of the most important aspects of making a choice about the micro-controller is to make sure development software support is available. Usually, what you will need would be a compiler to run on a developments system (most often your PC or Mac). While assembly language programming is done sometimes, most often you develop the software in some high level language such as C or C ++. Linking and other facilities for generating a fully loadable object module are required. Equally important facility would have the ability to load the code into the target hardware. Debug support for executing code in place in the target hardware will be required too.