Professional Documents
Culture Documents
Iniciamos el display
•comparar:
(Puerto C) prendido y Ubicamos la parte
activamos las resitencias •//TABLA • IN R17, PIND
•//DDRx • LDI R16,$3F alta del puntero en • MOV R19, R17
de pull up del puerto D $00
•LDI R16, $FF •MOV R0, R16 • ANDI R17, $F0
•OUT DDRC, R16 •//PORTx •LDI R16,$06 • SWAP R17
•LDI R16, $00 •LDI R16, $FF •//UBICAR EL
•MOV R1, R16 • ANDI R19, $0F
•OUT DDRD, R16 •OUT PORTC, R16 PUNTERO
Configuramos todo el •..............
•LDI R16, $FF • LDI XH,$00
puerto C como salida del •OUT PORTD, R16 Creamos la tabla Leemos el puerto D y lo
display y todo el puerto •CALL espera500ms utilizando los registro del guardamos en R17 y R19,
D como entrada de los R0 al R15 para guardar la aplicamos una mascara de
switchs. tabla. $F0 y $0F respectivamente y
a R17 lo movemos 4 bits con
swap.
B) el puntero de pila es un registro especial que se utiliza para saber la posición siguiente en donde estará la
memoria disponible, la pila se encuentra en la memoria RAM y su función es durante las llamadas a las
subrutinas y cuando hay un interrupción.
Registros PORTx:
Este registro se utiliza para dependiendo del DDRx, en este caso si el pin es de salida se utiliza para poner alto (1)
o bajo (0) y si es de entrada se utiliza para activar (1) o desactivar (0) la resistencia de pull up.
Ejemplo:
PORTx 7654 3210
A7-A0 (OFF) 0000 0000 = $00
D3-D0 (IN) 0000 1111 = $0F
LDI R16, $00
OUT PORTA, R16
LDI R16, $0F
OUT PORTD, R16
En este ejemplo observamos que el puerto A es de salida entonces se iniciara todos los leds apagados y el
hexadecimal que se carga a PORTA es $00, y a los 4 switch se les activara la resistencia de pull up y el
hexadecimal que se carga a PORTD es $0F.
Registros PINx:
Este registro se utiliza solamente para los pines de entrada, y su función es la de leer el puerto que necesitemos.
Ejemplo:
leerpulsador:
IN R17, PIND
SBRC R17, 3
JMP leerpulsador
JMP antirrebote
En este ejemplo vemos que para leer algún puerto necesitaremos de la instrucción IN que siempre va acompaña
del registro PINx, en este caso leeremos el Pin 3 y si en la entrada hay un cero saltara a “antirrebote” y si hay un
uno se quedara en “leerpulsador”.
D)
SWAP: se utiliza para intercambiar nibbles ósea que correr 4 bits a la posición contraria.
MOV: se utiliza para hacer copias de datos pero solo de un registro a otro registro.
CP: se utiliza para comparar dos registros.
LD: se utiliza para cargar un dato en un puntero.
LPM: se utiliza para cargar la memoria de un programa hacienda un puntero.
Ejemplo:
IN R17, PIND
MOV R19, R17
ANDI R17, $F0
SWAP R17
ANDI R19, $0F
CP R19, R17
BRPL aMayor
JMP bMayor
Su pongamos que en este ejemplo la entrada del Puerto D es 10101001 que se movería al registro R19 y R17, al
registro 17 se le aplicara una máscara con $F0 y el resultado seria 10100000, el SWAP hace que se intercambien
los nibbles y R17 quedaría así 00001010, al registro 19 también se le aplica una máscara pero con $0F y el
resultado seria 00001001 y por ultimo con CP se compararían los dos registros para saber cuál es mayor y se
llegaría a la conclucion de que R17 es mayor que R19 y saltaría a “aMayor”.
E) la instrucción JMP significa salto, y salta a una subrutina con la diferencia que se queda en esa subrutina, la
instrucción IJMP significa salto indirecto y lo que hace es saltar a una dirección selecciona por un puntero y la
instrucción RJMP significa salto relativo y lo que realiza es un salto a un registro que está dentro de la memoria.