#define Tblink 100
portb = 0 ;
for(signed int8 i=7;i>=0;i--){
for(int8 j=0;j<=i;j++){
for(int8 k=0 ; k<2 ; k++){
bit_set(portb,j) ; delay_ms(Tblink) ;
bit_clear(portb,j) ; delay_ms(Tblink) ;
}
}
bit_set(portb,i) ;
}
Probá con un triple for:Eduardo2 recibe un cordial saludo, espectacular la forma en que lo haces, yo lo había logrado pero con unas decenas de lineas de código :?Código: [Seleccionar]#define Tblink 100
portb = 0 ;
for(signed int8 i=7;i>=0;i--){
for(int8 j=0;j<=i;j++){
for(int8 k=0 ; k<2 ; k++){
bit_set(portb,j) ; delay_ms(Tblink) ;
bit_clear(portb,j) ; delay_ms(Tblink) ;
}
}
bit_set(portb,i) ;
}
#define Tblink 100
portb = 0 ;
for(int8 i=0x80 ; i!=0 ; i>>=1){
for(int8 j=1 ; j!=i&&j!=0 ; j<<=1){
for(int8 k=0 ; k<2 ; k++){
portb |= j ; delay_ms(Tblink) ;
portb &= ~j ; delay_ms(Tblink) ;
}
}
portb|=i ;
}
const int8 led_on[]={
0b00000001,0b00000010,0b00000100,0b00001000,0b00010000,0b00100000,0b01000000,0b10000000,
0b10000001,0b10000010,0b10000100,0b10001000,0b10010000,0b10100000,0b11000000,0b11000001,
0b11000010,0b11000100,0b11001000,0b11010000,0b11100000,0b11100001,0b11100010,0b11100100,
0b11101000,0b11110000,0b11110001,0b11110010,0b11110100,0b11111000,0b11111001,0b11111010,
0b11111100,0b11111101,0b11111110,0b11111111 };
const int8 led_off[]={
0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,
0b10000000,0b10000000,0b10000000,0b10000000,0b10000000,0b10000000,0b10000000,0b11000000,
0b11000000,0b11000000,0b11000000,0b11000000,0b11000000,0b11100000,0b11100000,0b11100000,
0b11100000,0b11100000,0b11110000,0b11110000,0b11110000,0b11110000,0b11111000,0b11111000,
0b11111000,0b11111100,0b11111100,0b11111110 };
#define Tblink 100
for(int8 n=0 ; n<36 ; n++){
for(int8 i=0 ; i<2 ; i++){
portb = led_on[n] ; delay_ms(Tblink) ;
portb = led_off[n] ; delay_ms(Tblink) ;
}
}
portb=led_on[35] ;
Después de subir ese código me di cuenta de algunas variaciones interesantes (al menos para mi :) ) , como ya lo tenía escrito, lo comparto.muchas gracias, con tus metodos logre reemplazar todos los arreglos que habia hecho y optimize el codigo un 80%.
Las intrucciónes bit_set(x,bit) y bit_clear(x,bit) son eficientes cuando bit es una constante, cuando es una variable genera un bucle donde va desplazando un '1' bit veces.
Saludos.
void secuencia8()
{
int8 cuenta ;
for(portb=1 , cuenta=0 ; portb ; portb <<= 1){
if(portb & 0b1000){
if(cuenta < 2){
cuenta++ ;
portb |= 1 ;
}
}
delay_ms(500);
}
}
Esto se podría hacer asi:huyyyyy hermano que "nota" trabajo de una. Que facilidad tienes, muchas gracias. ((:-)) ((:-))Código: [Seleccionar]void secuencia8()
{
int8 cuenta ;
for(portb=1 , cuenta=0 ; portb ; portb <<= 1){
if(portb & 0b1000){
if(cuenta < 2){
cuenta++ ;
portb |= 1 ;
}
}
delay_ms(500);
}
}
for(portb=1 , cuenta=0 , blink() ; portb ; delay_ms(500) , portb <<= 1 ){
if(portb & 0b1000){
if(cuenta < 2){
cuenta++ ;
portb |= 1 ;
}
}
}
cordial saludo,y gracias de nuevo por tu aclaracion, solo me queda una duda..
El for( : : ) trabaja asi:
for( se_ejecuta_al comienzo ; condición ; se_ejecuta_en_cada_iteración )