Multiplexer

No you need to set up the pins as outputs before you write to them.

byte S0 = 16;
byte S1 = 6;
byte S2 = 7;
byte S3 = 8;
byte signal = 0;






void setup() {

pinMode(S0, OUTPUT);      // sets the digital pin as output
pinMode(S1, OUTPUT);      // sets the digital pin as output
pinMode(S2, OUTPUT);      // sets the digital pin as output
pinMode(S3, OUTPUT);      // sets the digital pin as output

    digitalWrite(S0,LOW);
       digitalWrite(S1,LOW);
       digitalWrite(S2,HIGH);
       digitalWrite(S3,HIGH);


  Serial.begin(19200);

}
////////////////////////////////////////////////////////////

void loop()
{
Serial.print(millis());
Serial.print("\t");
Serial.println(analogRead(signal));


delay(3000);

}

Then with this code you have to connect your pot to input 12 (as that is what you select with the writes) to see the changes.

By the way why is S0 mapped through to pin 16, that is one of the analogue pins you would be better off wiring it up to one of the digital pins. I am assuming you have wired the output of the multiplexer to analogue input pin 0.