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