OH YEAH! The problem was the way I was sending the address for the registers.
I used a library for fast pin switching so I didn't have to use PORT manipulation.
Right now I reached a point where you can play a note with a button and you can change pitch of the note with a pot.
Again, thank you very much to all, especially Majenco and Telecommando for taking the time to help me!
For future generations

I will paste the entire code here:
#include <digitalWriteFast.h>
//then you can use digitalWriteFast(pin,HIGH/LOW),
//digitalReadFast(pin), pinMode(pin,INPUT/OUTPUT),
//digitalWriteFast2(pin,HIGH/LOW), digitalReadFast2(pin),
//pinMode2(pin,INPUT/OUTPUT)very much as you have used the built-in commands.
//The object code will not only be faster, but actually smaller as well.
//----CLOCK OUTPUT ON PIN 3
const int freqOutputPin = 3;
const int ocr2aval = 3;
const int prescale = 1;
const float period = 2.0 * prescale * (ocr2aval+1) / (F_CPU/1.0e6);
const float freq = 1.0e6 / period;
//---------
const int dataPins[] = {4,5,6,7,8,9,10,11};
const int bc1Pin=12;
const int bdirPin=13;
//-------
const int pitchPin=A0;
float oldPitch=-1;
int oldPitchDec=-1;
const int playPin=A1;
void setup() {
//---for the clock output
pinMode(freqOutputPin, OUTPUT);
Serial.begin(9600);
TCCR2A = ((1 << WGM21) | (1 << COM2B0));
TCCR2B = (1 << CS20);
TIMSK2 = 0;
OCR2A = ocr2aval;
Serial.print("Period = ");
Serial.print(period);
Serial.println(" microseconds");
Serial.print("Frequency = ");
Serial.print(freq);
Serial.println(" Hz");
//----
pinMode (bc1Pin,OUTPUT);
pinMode (bdirPin,OUTPUT);
pinMode (pitchPin,INPUT);
Serial.begin(9600);
inactiveModeFun();
setDataOutFun();
resetICFun();
testSoundA();
}
void loop() {
float pitch = analogRead(pitchPin);
pitch=(pitch/1023)*15;
int pitchDec=(pitch-int(pitch))*255;
if (analogRead(playPin) < 16) {
writeICFun(13,0);
}
delay(100);
if (int(pitch)!=int(oldPitch)) {
oldPitch=pitch;
Serial.print("Course: ");
Serial.println(int(pitch));
writeICFun(1,int(pitch));
writeICFun(3,int(pitch));
writeICFun(5,int(pitch));
}
if (pitchDec-oldPitchDec<10 || pitchDec-oldPitchDec>-10){
oldPitchDec=pitchDec;
//Serial.print("Fine: ");
//Serial.println(pitchDec);
writeICFun(0,int(pitchDec));
writeICFun(2,int(pitchDec));
writeICFun(4,int(pitchDec));
}
}
void writeICFun(int reg,int valor) { //maneja valor integer, lo convierte y lo pasa a la otra
writeBusFun(reg); //buscar dir
latchModeFun();
inactiveModeFun();
writeBusFun(valor); //darle varlor
writeModeFun();
inactiveModeFun();
}
void writeBusFun(int valor) {
for (int x=0;x<8;x++) {
digitalWriteFast2(dataPins[x],bitRead(valor,x));
}
}
byte readICFun(int reg) {
writeBusFun(reg); //buscar dir
latchModeFun();
inactiveModeFun();
readModeFun();
byte valorByte=readBusFun(); //mira valores
inactiveModeFun();
return valorByte;
}
byte readBusFun() {
setDataInFun();
byte valorByte=0;
for (int x=0;x<8;x++) {
bitWrite(valorByte,x,digitalRead(dataPins[x]));
}
setDataOutFun();
return valorByte;
}
void inactiveModeFun(){
digitalWriteFast2(bdirPin,LOW);
digitalWriteFast2(bc1Pin,LOW)
}
void readModeFun(){
digitalWriteFast2(bdirPin,LOW);
digitalWriteFast2(bc1Pin,HIGH)
}
void writeModeFun(){
digitalWriteFast2(bdirPin,HIGH);
digitalWriteFast2(bc1Pin,LOW)
}
void latchModeFun() {
digitalWriteFast2(bdirPin,HIGH);
digitalWriteFast2(bc1Pin,HIGH)
}
void setDataOutFun(){
for (int x=0;x<8;x++) {
pinMode(dataPins[x],OUTPUT);
}
}
void setDataInFun(){
for (int x=0;x<8;x++) {
pinMode(dataPins[x],INPUT);
}
}
void testSoundA(){
writeICFun(0,0);
writeICFun(1,6);
//delay(6);
writeICFun(2,0);
writeICFun(3,6);
writeICFun(4,0);
writeICFun(5,6);
writeICFun(6,1);
writeICFun(7,int(B11111000));
writeICFun(8,16);
writeICFun(9,16);
writeICFun(10,16);
writeICFun(11,0);
writeICFun(12,50);
writeICFun(13,0);
}
void resetICFun(){
for (int x=0;x<6;x++){
writeICFun(x,0);
}
}
There might be some variables named in spanish language but I changed that, so it's the minority.