Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Practica 3 Contador Asc
Practica 3 Contador Asc
Práctica No. 3
Contador ascendente
Ingeniero en Mecatrónica
Microcontroladores
Profesor: Dr. Jesús Raúl Martínez Sandoval
Estudiante:
2) incf y decf.
incf contador,w
En este caso, se toma el valor del registro contador, se le suma 1 y el resultado se guarda
en el registro w.
decf: Aunque no encontré una fuente específica que defina decf, por convención en
lenguajes de programación de bajo nivel como el ensamblador, decf sería la instrucción
opuesta a incf, disminuyendo el valor del registro o variable en 1. por ejemplo:
decf contador,f
En este caso, se toma el valor del registro contador, se le resta 1 y el resultado se guarda
en el mismo registro contador.
3) call y return.
Call:
La instrucción "call" es una instrucción de lenguaje de programación que se utiliza
comúnmente en lenguajes de alto nivel y ensamblador para llamar a una función o
subrutina. Cuando se ejecuta una instrucción "call", el programa guarda la dirección actual
de ejecución en la pila (o en otro lugar adecuado, dependiendo de la arquitectura), salta a
la dirección de inicio de la función o subrutina especificada y comienza a ejecutar su
código.
La instrucción "call" se utiliza para lograr la ejecución de código modular y reutilizable.
Permite que el flujo del programa se desplace a una función o subrutina específica para
realizar ciertas tareas, y luego regresa al punto de origen después de completar la función.
Esto facilita la división de un programa en piezas más pequeñas y manejables, lo que
hace que el código sea más organizado y mantenible.
Return:
4) subwf y addwf.
Subwf
Se utiliza para restar un valor en un registro de trabajo (W) de un valor en un registro específico y
guardar el resultado en ese mismo registro.
La sintaxis general de "SUBWF" es la siguiente:
cssCopy code
SUBWF destino, d, a
Donde:
"destino" es el registro de destino donde se almacenará el resultado de la resta.
"d" es un indicador que especifica si se actualiza el registro de destino con el resultado (d=0) o si
se actualiza W con el resultado (d=1).
"a" es un indicador que especifica si se habilita la operación de acarreo (a=0) o si se deshabilita
(a=1).
La instrucción "SUBWF" resta el valor en W del valor en el registro de destino y guarda el
resultado en el registro de destino o en W, según los indicadores "d" y "a". El bit de acarreo se
establecerá si hay un acarreo en la resta.
Esta instrucción es útil para realizar operaciones de resta en ensamblador en microcontroladores
PIC.
addwf (Add with Carry):
ADDWF (sumar) el contenido del registro W con el contenido de un archivo. El resultado puede
ser guardado en el registro W (designador = 0) o emplazado en el archivo llamado (designador =
1). Con la orden ADDWF, en el registro STATUS se ven afectados los bits: C (Carry), Z (Cero) y el
DC (Dígito Carry).
Si el resultado de una instrucción ADD rebasa FF, la bandera C (Carry) es puesta a 1, si tiene
cualquier otro valor es 0.
Si el resultado de una instrucción ADD es cero 0000 0000, la bandera Z (Cero) se pone a 1 y 0 si
tiene cualquier otro valor.
La suma se realiza en aritmética binaria pura y sin signo. Si hay un (desborde) acarreo del bit 7,
es decir que el resultado es mayor de 255, el bit C (bandera Carry) resulta 1, en caso contrario
resulta 0. El PIC supervisa si hay acarreo del bit 3, es decir que, la suma de los dos (nibbles)
mitades menos significativas (bits 0 a 3) resulta mayor de 15, el bit DC (digit carry) se pone a 1, en
caso contrario se pone a 0.
Por ejemplo: Si agregamos 21h a 3Ch, el resultado es 5Dh, esto no afecta la bandera Carry, por
lo que la bandera DC (dígito carry) será puesta a 1, pero si a 2Dh le agregamos 3Eh, el resultado
es 6Bh, lo que desborda el contador (6B>FF) por lo que la bandera C (Carry) será puesta a 1.
5) Retlw.
6) Nop
"NOP" es una instrucción vacía que no tiene efecto en el flujo del programa. Su principal
utilidad radica en la creación de retardos, la alineación de código o simplemente para
llenar espacios en el código ensamblador sin realizar ninguna operación útil.
En muchas arquitecturas y ensambladores, la instrucción "NOP" generalmente se
representa como "NOP" o "nop". Un ejemplo de uso de "NOP" en ensamblador x86 sería:
7) incfsz y decfsz
DECFSZ Registro, F
8) Display de 7 segmentos.
Cada segmento se puede encender o apagar independientemente para mostrar los dígitos
del 0 al 9 y algunas letras, como A, b, C, d, E, F, etc.
9)
Los ciclos anidados se refieren a la práctica de colocar un ciclo dentro de otro ciclo en la
programación. Esto se utiliza para realizar tareas repetitivas o iteraciones dentro de otras tareas
repetitivas. Los ciclos anidados son una técnica común en la programación y se utilizan en
situaciones en las que se necesita un control más fino sobre las repeticiones.
En un ciclo anidado, el ciclo interior se ejecuta completamente dentro de cada iteración del ciclo
exterior. Esto significa que el ciclo interior se ejecutará varias veces para cada iteración del ciclo
exterior. Los ciclos anidados son útiles cuando necesitas procesar elementos en una estructura de
datos multidimensional, como una matriz bidimensional o una matriz tridimensional. También son
útiles para generar todas las combinaciones posibles de elementos en una colección.
2. Desarrollo
Del lado izquierdo se encuentra, el botón de reset con sus resistencia de pull -up, así
como el cristal, oscilador que genera la señal de reloj de 4 MHz, para el funcionamiento
del sistema mínimo, para el microcontrolador PIC16F84A.
; Declaración de variables
UNIDAD EQU 0x12 ; Dirección de memoria para la variable UNIDAD
DECENA EQU 0x13 ; Dirección de memoria para la variable DECENA
O EQU 0x14 ; Dirección de memoria para la variable O
M EQU 0x15 ; Dirección de memoria para la variable M
N EQU 0x16 ; Dirección de memoria para la variable N
TempUnidad EQU 0x17 ; Dirección de memoria para la variable TempUnidad
R_ContA EQU 0x18 ; Dirección de memoria para el registro R_ContA
R_ContB EQU 0x19 ; Dirección de memoria para el registro R_ContB
; Ciclo infinito
CICLO
movf PORTA, W ; Lee el bit RA0 del puerto A (botón)
call RETARDO_20ms ; Retardo antirrebote
call RETARDO_10ms ; Retardo antirrebote
call DISPLAY ; Llama a la subrutina DISPLAY
btfss PORTA, RA0 ; Salta si RA0 es igual a 1
goto CICLO ; Regresa al ciclo infinito
goto CONTAR ; Salta a la subrutina CONTAR
movf DECENA, 0
call TablaCodigo
bcf PORTA, RA1 ; Apaga el dígito de las UNIDADES
bsf PORTA, RA2 ; Enciende el dígito de las DECENAS
movwf PORTB ; Envía el código del dígito al puerto B (display de 7 segmentos)
call RETARDO_20ms ; Retardo para mostrar el dígito
call RETARDO_10ms ; Retardo para mostrar el dígito
return ; Regresa a la dirección desde la que se invocó la función
END.
Estados:
1) En la siguiente figura se muestra el display de 7 segmentos al iniciar el
programa con el valor de “00” en pantalla.
Figura 8. Display en 50
Durante la práctica, enfrenté varios desafíos que me llevaron a una experiencia valiosa. En primer
lugar, la configuración de los puertos y la interacción con el hardware del microcontrolador
resultaron más complejas de lo que esperaba. Tuve problemas iniciales al establecer los registros
TRISA y TRISB para los pines de entrada y salida, pero después de revisar detenidamente el
manual y realizar algunos ensayos, logré superar estos obstáculos.
Otro desafío significativo fue lidiar con el rebote del botón al presionar RA0. Para abordar este
problema, implementé subrutinas de retardo, RETARDO_20ms y RETARDO_10ms, que resultaron
ser efectivas para eliminar el rebote y garantizar la precisión del contador.
Una de las lecciones más valiosas que aprendí durante la práctica fue la importancia de la
planificación y la paciencia al enfrentar problemas técnicos. También mejoré mi comprensión de la
estructura de un programa en ensamblador y su relación con el hardware.
3. Referencias bibliograficas
Admin. (2023, 15 marzo). Instrucciones de comparación, PLC - EQU NEQ GRT LES GEQ LEQ
http://technology.niagarac.on.ca/staff/mboldin/18F_Instruction_Set/DECFSZ.html
https://www.programarya.com/Cursos/C++/Ciclos/Ciclos-anidados
https://www.diarioelectronicohoy.com/blog/instrucciones-pic
14/20-Pin Full-Featured, Low Pin count microcontrollers with XLP. (s. f.).
https://onlinedocs.microchip.com/pr/GUID-1D0144A3-6E9C-49D4-850F-2F7000F00CDF-
en-US-8/index.html?GUID-3EC45548-66D4-4FD9-BAAD-FEE7A5ABC71B