jueves, 4 de agosto de 2011

Ejercicios del Capitulo 8 PIC16f84


Ejercicios Capitulo 8:
Elemental_1.asm: Por el puerto B se obtiene el dato de las 5 líneas del puerto A, al que está conectado un array de interruptores, sumándole un valor de una constante, por ejemplo 74 decima. Es decir (PORTB) = (PORTA) + Constante.
En ASM:
Loop
                movf     PORTA,W
                addlw   b'1001001'
                movwf PORTB
                goto    Loop
En C:
void main(){
   int valor;
   int valor2;

   while(1) {
   valor = input_A();
   valor2 = valor + 1001001;
   output_B(valor2);
   }
 }
Elemental_2.asm: Por el puerto B se obtiene el dato del puerto A multiplicando por 2. Es decir (PORTB) = 2 * (PORTA) = (PORTA) + (PORTA).
En ASM:
Loop
                movf     PORTA,W
                addwf   PORTA,W
                movwf PORTB
                goto      Loop
En c:
void main(){
   while (1){
      output_B(input_A()+ input_A());
      }
}

Elemental_3.asm: Por el puerto B se obtiene el dato introducido por el puerto A, pero los bits pares de la salida se fijan siempre a “1”. El orden de los bits será “b7 b6 b5 b4 b3 b2 b1 b0”, siendo los pares b6 b4 b2 b0. Por ejemplo, si por el Puerto A se introduce el dato  “----01100”, por el puerto B se visualiza “----11101”. Observá que
·         Los bits pares están a “1”, efectivamente (Puerto B) = “---1x1x1”
·         Los bits impares permanecen con el dato del puerto de entrada, efectivamente: (Puerto A) = “---x1x0x” y (Puerto B) = “---x1x0x”

En ASM:
Loop
                movf     PORTA,W
                addlw   PORTA
                movwf PORTB
                bsf                         PORTB,6
                bsf                         PORTB,4
                bsf                         PORTB,2
                bsf                         PORTB,0
                goto      Loop

En C:
void main(){
while(1){
output_B(input_A());
output_high (PIN_B0,PIN_B2,PIN_B4,PIN_B6);
}
}

Elemental_04.asm: Por el puerto B se obtiene el contenido del Puerto A, pero los bits impares de la salida se fijan siempre a “0”. El orden de los bits será “b7 b6 b5 b4  b3 b2 b1 b0”
En Asm:
Loop   
            movf    PORTA,W
            movwf PORTB
            bcf                   PORTB,7
            bcf                   PORTB,5
            bcf                   PORTB,3
            bcf                   PORTB,1
            goto     Loop
En C:

void main(){
   while(1){
      output_B(input_A());
      output_low (PIN_B1,PIN_B3,PIN_B5,PIN_B7);
}
}

Elemental_05.asm: Por el puerto B se obtiene el contenido del Puerto A, pero invirtiendo los unos y los ceros. Por ejemplo, si por el puerto A se obtiene el dato “---11001”, por el puerto B se obtendrá el dato “xxx00110”. (No importa el estado de los 3 bits superiores del puerto B.)
En Asm:
Loop
            movf  PORTA,W
            xorlw b'11111'
            movwf          PORTB
            goto   Loop
En C:
void main(){
   while(1){
      output_B(input_A() ^11111);
   }
}
Elemental_06.asm: Por el puerto B se obtiene el contenido del Puerto A, pero intercambiando los nibbles alto y bajo.  Por ejemplo, si por el puerto A se obtiene el dato “---11001”, por el puerto B se obtendrá el dato “1001xxx1”.
En ASM:
Loop 
            movf    PORTA,W
            swapf            W,PORTB
            goto   Loop
En C:
void main(){
   int  valor;
   while(1){
   valor = input_A();
   swap (valor);
   output_B(valor);
}
}

Elemental_07.asm: Por el puerto B se obtiene el contenido del Puerto A, desplazando un bit hacia la izquierda. Por la derecha entrará un “1”..  Por ejemplo, si por el puerto A se obtiene el dato “---11001”, por el puerto B se obtendrá el dato “xx110011”.
En ASM:
Loop 
            rlf                   PORTA,W
            andlw            .1
            movwf          PORTB          
            goto   Loop
EN C:
void main(){
   int valor;
   while(1){
   valor=input_A();
   rotate_left(valor,1)
   output_B(valor | 1);
   }
}

Elemental_08.asm: Por el puerto B se obtiene el contenido del Puerto A, desplazando un bit hacia la derecha. Por la izquierda  entrará un “0”.  Por ejemplo, si por el puerto A se obtiene el dato “---11001”, por el puerto B se obtendrá el dato “0x1100”.

En ASM:
Loop 
            rrf                   PORTA,W
            bcf                  W,7
            movwf          PORTB
            goto   Loop
En C:
void main(){
   int valor;
   while(1){
   valor=input_A();
   rotate_right(valor,1);
   bit_clear(valor,7);
   output_B(valor);
   }
}

Elemental_09.asm: Por el puerto B se obtiene el contenido del Puerto A, invirtiendo los bits pares. Los bits impares se dejan como en la entrada.
En ASM:
Loop
            movf  PORTA,W
            xorlw b'01010101'
            movwf          PORTB
            goto   Loop

EN C:

void main()
{
   while(1){
   output_B(input_A() ^01010101);
   }
}


Elemental_10.asm: Por el puerto B se obtiene el contenido del Puerto A, invirtiendo los bits pares. Los bits impares se dejan como en la entrada.
En ASM:
movf  PORTA,W
movwf          PORTB
SLEEP

En C:
void main(){
   output_B(input_A());
   sleep();
}

No hay comentarios:

Publicar un comentario