como fazer duas contagens em velocidades diferentes?

de acordo com o programa aqui abaixo, eu preciso que P0 faça uma contagem binária rápida enquanto P1 faça uma varredura binária de 0 a 3 e de 3 a 0... só que só funciona ou uma ou outra parte do programa...nunca as duas e já tentei de tudo...parece que os comandos delay e for no mesmo código dão conflito...se eu incluir a função TONE no código, só essa que funciona, a função main fica totalmente sem ação.
como eu separo essas duas funções pra que uma funcione independe da outra?
- Código: Selecionar todos
#include<at89x52.h>
#include<delay.h>
int cont;
char saida;
void tone(){
for(cont=0;cont<10;cont++);
P0=saida;
saida++;
}
void main(){
while(1){
tone();
P1=0;
delay_ms(1000);
P1=1;
delay_ms(1000);
P1=2;
delay_ms(1000);
P1=0;
delay_ms(1000);
P1=1;
delay_ms(1000);
}
}
como eu separo essas duas funções pra que uma funcione independe da outra?