Assuming you haven't modified the system, most likely cause is a faulty (permanently open) thermostat. If the thermostat is permanently open the engine works at a lower than normal temperature and there isn't enough pressure to direct hot water to the heater core.
What is your engine temperature? If the gauge stays near the bottom then you need a new thermostat.
There is also a valve, ridiculously located at the very bottom of the cooling system, so it tends to collect all debris floating around. If you have used radweld or a similar product, it will sit by the valve and block all water going into the heater core.