Este proyecto es desarrollado en Assembler al final del post puedes descargar todo el proyecto + código + simulación
¡Un post más! Un buen SkullTraper sabe que aquí ponemos excelentes proyectos para motivarte, el día de hoy traemos un proyecto hecho en el lenguaje "Assembler" antes que nada quiero agradecer a +Juanita triana y +Nathan Bromberg que me facilitó su proyecto yo hice algunos vídeos y pequeñas modificaciones sobre su proyecto ya que son compañeros de la Universidad.
¿DE QUE TRATA EL PROYECTO?
Este proyecto tiene como objetivo realizar un cronómetro pero en lenguaje ensamblador (Este no es en C como los otros proyectos 😧), más exactamente el planteamiento dice lo siguiente:
- Tomando como referencia el diagrama que se ilustra en la figura, se desea diseñar e implementar un cronómetro cuyo conteo esté dado en décimas de segundo (0.0 - 0.1 - 0.2 --- 9.8 - 9.9 - 0.0 --). Un pulsador permite iniciar o continuar el conteo, otro permite detener y otro borrar.
DESARROLLO COMPLETO DEL PROYECTO
Como siempre y es sagrado de inicio aclaro que el proyecto fue realizado en MPLAB "El viejo confiable para proyectos con PIC" no se hizo uso de librerías especiales añadidas, para simulación proteus como siempre, como tal el proyecto es sencillo y fácil de entender al final podrás descargar todo el contenido de este proyecto 😄:
1. MATERIALES Y COMPONENTES En este proyecto fue necesario el siguiente uso de componentes:
- x1 Programador de PICS (Pickit2)
- x1 PIC16F877A
- x2 Displays 7 segmentos
- x3 leds pequeños
- x3 pulsadores normales
- x3 resistencias de 220 ohms
- x2 Capacitores de 15pF
- Jumpers o puentes de conexión
- x1 Protoboard
- x1 fuente de voltaje, 5V está bien para trabajar
- x1 Cristal de Cuarzo de 4MHz
- x2 resistencias de 330 ohms
- x1 resistencia de 10k ohms
- x1 capacitor de 0,1uF
¡Listo! con esto podremos iniciar el proyecto sin problema alguno.
1.1. Cálculos de resistencias y demás
Este paso es opcional pues prácticamente más arriba di los números precisos de cada componente, pero, si deseas saber como se hizo aquí te lo explico, este paso es para determinar a exactitud que valor de resistencias usar para los leds y displays, ¡Vamos que si llevan por seguridad!
- Resistencias de los LEDS, sabemos que la máxima corriente de salida de los puertos del micro que usamos, es decir, el PIC es de 25mA, pero, en este caso sólo se usará 15mA. El voltaje promedio son 5V y en los leds irán 3,5V usarán los leds, ahora, por ley de ohm nuestro pequeño despeje queda:
- Resistencias para los displays, aplicamos el mismo principio anterior, ley de Ohm, entonces nos da:
- Retardo en mS, para el retardo incialmente se había propuesto 100mS, pero, después del retardo siguen algunas instrucciones antes de volver a incrementar, se propone un retardo de 45mS aproximadamente:
La simulación como siempre hecha en Proteus todo normal y fácil de entender es apenas algo así:
3. CÓDIGO COMPLETO, PROGRAMA PIC
El código del proyecto no es muy largo y de hecho es bastante fácil de entender "siempre y cuando domines el lenguaje" no se hizo necesario el uso de alguna librería personalizada o similar:
;****************************************************************************************** ;* * ;* DESCRIPCIÓN DEL PROGRAMA ;* ;* *ESTE PROGRAMA PERMITIRA CONTAR DE 0 A 99 DE FORMA ASCENDENTE Y DESCENDENTE ;* ACCIONADO POR DOS BOTONES. AL PULSAR UN BOTON, ESTE EMPIEZA A CONTAR DE FORMA ASCENDENTE ; Y AL PULSAR EL OTRO, DE MANERA DESCENDENTE * ;* * ;* AUTORES: JUANITA TRIANA ;* *NATHAN BROMBERG ;* *EDGAR CHICA ;* MICRO: PIC 16F877A * ;* OSCILADOR: 4 MHz * ;* * ;****************************************************************************************** ; ; LIST p=16F877A #INCLUDE "p16F877A.inc" ; __CONFIG 3F71 ; ; ; ************* DECLARACIÓN DE VARIABLES ******************************* ; CBLOCK 20 UNID,DEC, R1, R2 ENDC ; ;EQU ; ; ******************** DEFINICIONES GENERALES ****************************** #DEFINE BOTON_START PORTB,7 #DEFINE BOTON_STOP PORTB,6 #DEFINE BOTON_RESET PORTB,5 #DEFINE LED_VERDE PORTB,0 #DEFINE LED_ROJO PORTB,1 #DEFINE LED_AZUL PORTB,2 ; ; ; ________________________________________________________________________________________ ;| | ;| DECLARACIÓN DE MACROS | ;|________________________________________________________________________________________| INI_PUERTOS MACRO BCF STATUS,RP1 ;BK1 BSF STATUS,RP0 ;BK0 BCF OPTION_REG,7 ;PULL UP BSF TRISB,7 ;RB7 ENTRADA BSF TRISB,6 ;RB6 ENTRADA BSF TRISB,5 ;RB5 ENTRADA BCF TRISB,0 ;RB0 SALIDA BCF TRISB,1 ;RB1 SALIDA BCF TRISB,2 ;RB2 SALIDA CLRF TRISC ;PORTC SALIDA CLRF TRISD ;PORTD SALIDA BCF STATUS,RP0 ;BK0 ENDM ;----------------------------------------------------------------------------------------- ; ORG 00 ; VECTOR DE RESET GOTO INICIO ; ; ; ________________________________________________________________________________________ ;| | ;| TABLAS Y PROCEDIMIENTOS | ;|________________________________________________________________________________________| ;TABLA DECO TABLA_DECO ;ANODO COMÚN CLRF PCLATH ADDWF PCL,F DT 40, 79, 24, 30, 19, 12, 2, 78, 0, 10 RETURN ;---------------------------------------------------------------------------------------------- ;VISUALIZA VISUALIZA MOVFW UNID CALL TABLA_DECO MOVWF PORTC MOVFW DEC CALL TABLA_DECO MOVWF PORTD RETURN ;INCREMENTA INCREMENTA INCF UNID,F MOVLW .10 XORWF UNID,W BTFSS STATUS,Z GOTO SALE_INC CLRF UNID INCF DEC,F MOVLW .10 XORWF DEC,W BTFSS STATUS,Z GOTO SALE_INC CLRF DEC SALE_INC RETURN ;RESET REINICIAR CLRF UNID CLRF DEC CALL VISUALIZA RETURN ;RETARDO_100MS RETARDO_100MS MOVLW .122 MOVFW R2 CICLO2 MOVLW .122 MOVWF R1 CICLO1 DECFSZ R1,F GOTO CICLO1 DECFSZ R2,F GOTO CICLO2 RETURN ;LEDS LED_1 BTFSC PORTB,7 GOTO SALE_L1 BCF PORTB,0 SALE_L1 RETURN LED_2 BTFSC PORTB,6 GOTO SALE_L2 BCF PORTB,1 SALE_L2 RETURN LED_3 BTFSC PORTB,5 GOTO SALE_L3 BCF PORTB,2 SALE_L3 RETURN APAGA1 BSF PORTB,0 RETURN APAGA2 BSF PORTB,1 RETURN APAGA3 BSF PORTB,2 RETURN ; ; ; ;****************************************************************************************** ;* * ;* PROGRAMA PRINCIPAL * ;* * ;****************************************************************************************** ; ; ; INICIO INI_PUERTOS CLRF UNID CLRF DEC CALL VISUALIZA PRINCIPIO BTFSC BOTON_START GOTO PRINCIPIO INCREMENTO CALL APAGA2 CALL APAGA3 CALL LED_1 CALL INCREMENTA CALL VISUALIZA CALL RETARDO_100MS BTFSC BOTON_STOP GOTO INCREMENTO CALL APAGA1 CALL LED_2 CALL VISUALIZA GOTO MIENTRAS MIENTRAS BTFSC BOTON_START GOTO REINICIO GOTO INCREMENTO REINICIO BTFSC BOTON_RESET GOTO MIENTRAS CALL APAGA2 CALL LED_3 CALL REINICIAR GOTO PRINCIPIO END
4. MONTAJE FINAL DEL PROYECTO
Como es siempre sagrado el montaje final del proyecto en una foto, aunque este proyecto no lo montó ningún miembro del equipo de SkullTrap damos la foto de como debería quedar similar:
Es todo en este proyecto, como siempre digo que en la publicación de proyectos no profundizamos mucho en explicaciones ya que seguro si buscas un proyecto de este calibre es porque entiendes la gran mayoría de cosas. De igual forma si tienes dudas puedes comentar libremente, seguro te la podemos resolver de ser posible.
Es todo en este artículo hasta la próxima 😊,
disculpa, si realizo el armado en físico de lo que hay en la simulación, con displays de ánodo común normales no me funcionan, también en la foto del armado hay dos capacitores que no aparecen en la simulación, estos que función tienen?
ResponderEliminarEstos capacitores van en paralelo al cristal de cuarzo
EliminarEstoy intentando realizr este proyecto pero que tenga, minutos, segundo y milescimas, estoy intentando realizarlo con 3 7segmentos dobles de anodo comun pero no he podido ni siquiera darle arranque, les agradeceria si tienen en sus archivos algun proyecto con esas caracteristicas.
ResponderEliminarHola no, lastimosamente no tenemos nada de lo que deseas.
EliminarSaludos,
el codigo de la parte de arriba se copita todo o no
ResponderEliminarHola Gregorio copias todo el código desde la línea 1 hasta la línea 220 todo lo requieres
EliminarSaludos,
hola que puedo hacer quiero que cuente de uno en uno pulsando
EliminarHola anónimo me es imposible explicarte en un comentario pero trata de buscar en Google contador por pulso en assembler a ver como te va.
EliminarSalu2,
Quiero simular el proyecto en proteus pero me aparecen dos errores [PIC16] Program filename has no extension. [U1] y Real Time Simulation failed to start. Que debo cambiar?
ResponderEliminarHola lastimosamente el proyecto no lo he desarrollado yo y ha sido un aporte de unos compañeros de la universidad hace ya 4 años
EliminarPodrian decirme como conectar? Lo conecte de acuerdo al diagrama de proteus y no sirve. Hice el modelo en proteus y me funciona perfectamente. De que valor el el capacitor que va en el pin 1 del PIC? Si tuvieran un diagrama me seria de super ayuda :c
ResponderEliminarEl capacitor es de 0.1uF
EliminarPasame el modelo del proteus
EliminarHola al final del post podrás encontrar el botón descargar todo el proyecto y podrás visualizarlo sin problema incluso dentro de la carpeta contenida está la simulación de proteus.
EliminarSalu2,