There is no convenient train services (you would have to go via Madrid and Seville), nor flights, (you would have to go via Madrid.)
Your best bet will be by bus as follows:
1) TG Comes (http://www.tgcomes.es/) operate coaches between Cadiz and Sevilla El Prado Bus Station every couple of hours from 07:00 thru 21:00. Transit time is about 2 hours.
2) Then see this article on my blog which details how to get from Seville to Lisbon via Faro:
http://goo.gl/6eM91
Do not forget about the 1hr difference between Spanish time and Portuguese Time.
3) From Lisbon there are regular buses and trains to Porto. From Lisbon Sete Rios Bus Station, there are frequent hourly services to Porto operated by Rede Expressos hourly through the day until 21.00. Transit time is about 3,5 hours.
See: http://www.rede-expressos.pt
There are several trains per day also between Faro or Lisbon and Porto.
Timetable here: http://goo.gl/kTGAW
Faro Bus Station is close to the Rail Station.
In Lisbon, you would need to get a surburban train or Metro to get to Gare Oriente Station to connect with the trains to Porto.