Programación Específica > Microcontroladores
Realizacion De Un Frecuencimetro
jr.:
Imarte he escrito el codigo pero no me funciona, teoricamente el codigo esta bien , pero en la practica cuando lo simulo no me va.
A ver si puedes echarle un vistazo y decirme si hay algun fallo.
Aqui te envio el codigo.
rastrojero:
Hola esta buscando otra cosa y no entiendo eso del display. que tipo de display pensas usar? por favor si todavia estas avisame.
Una vez hice algo parecido es un dispenser donde tenia anidado 5 digitos y usaba un display de dos LINEAS (alfa numerico)
Bue! por favor si la siguen.
Desde argentina, un gran saludo diesel! :o
jr.:
Es un display de 7 segmentos, de los normales.
J1M:
jr. eres de la politécnica de cartagena?? pq la practica final es la misma. te dejo aki la mia, sirvió para un 10 asiq estará bien :P
te adjunto tb el .asm que he visto que esto sale deformado, para q lo abras con el mplab
Salu2!
--- Código: Text --- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;; FRECUENCÍMETRO ;;;;;;;;;; POR ;;;;;;;;;; JAIME FERNÁNDEZ-CARO BELMONTE ;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;; Realizado con MPLAB IDE 6.32 ;;;;;;;;;;;;;;;;;; Simulado con Proteus Pro 6.2 SP5 ;;;;;;;;;;;;;;;;;; Montaje en MicroPicTrainer 1.1 ;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; LIST P=16F84 ;Tipo de PIC usado ORG 00 ;Directiva inicio de programa en la posición 00 INICIO BSF 0x03,5 ;Ponemos a '1' el bit 5(6ª posición) del registro de Estado CLRF 0x06 ;Ahora estamos en el banco 1, ponemos a '0'(Salida) TrisB MOVLW 0xFF ;Copiamos el literal 'FF'H a W, todo 1 (Entrada) MOVWF 0x05 ;Copiamos de W al registro TrisA, quedando como entrada MOVLW B'11101000' ;Copiamos el literal de configuración del registro Option a W MOVWF 0x01 ;Copiamos el contenido de W a Option BCF 0x03,5 ;Ponemos a '0' el bit 5 del registro de Estado,estamos en el Banco 0 CLRF 0x06 ;Borramos el contenido del registro PortB CLRF 0x01 ;Borramos el contenido del registro TMR0 ;Retrasamos acontinuación la ejecución;del programa durante 1 segundo MOVLW D'40' ;Copiamos el literal (decimal) a W MOVWF 0x0C ;Copiamos el contenido de W a la 1ª posición de memoria libreLOOP1 MOVLW D'80' ;Copiamos el literal (decimal) a W MOVWF 0x0D ;Copiamos el contenido de W a la 2ª posición de memoria libreLOOP2 MOVLW D'103' ;Copiamos el literal (decimal) a W MOVWF 0x0E ;Copiamos el contenido de W a la 3ª posición de memoria libreLOOP3 DECFSZ 0x0E,1 ;Decrementamos 0x0E,y se almacena en 0x0E,si es 0 brincamos GOTO LOOP3 ;Como no es 0,hacemos un salto incondicional a LOOP3 DECFSZ 0x0D,1 ;Decrementamos 0x0D,y se almacena en 0x0D,si es 0 brincamos GOTO LOOP2 ;Como no es 0,hacemos un salto incondicional a LOOP2 DECFSZ 0x0C,1 ;Decrementamos 0x0C,y se almacena en 0x0C,si es 0 brincamos GOTO LOOP1 ;Como no es 0,hacemos un salto incondicional a LOOP1 ;Movemos el valor del registro TMR0 a una variable;para poder operar con él MOVF 0x01,0 ;Copiamos el contenido del registro TMR0 en W MOVWF 0x0C ;Movemos el valor de W a la posicion 0x0C ;Descomposición de un número en centenas,decenas y unidades;Explicación del algoritmo en la memoria de la practica CENTEN MOVLW D'100' ;Movemos el literal (decimal) a W SUBWF 0x0C,0 ;Restamos W a 0x0C y guardamos el resultado en W BTFSS 0x03,0 ;Miramos el bit 0 del registro de Estado, si es 1 brincamos GOTO DECEN ;Salto incondicional a DECEN, ya que hay acarreo MOVWF 0x0C ;Guardamos el resto para seguir restando INCF 0x0E,1 ;Incrementamos la variable 0x0E,y guardamos el resultado en ella GOTO CENTEN ;Salto incondicional a CENTEN DECEN MOVLW D'10' ;Movemos el literal (decimal) a W SUBWF 0x0C,0 ;Restamos W a 0x0C y guardamos el resultado en W BTFSS 0x03,0 ;Miramos el bit 0 del registro de Estado, si es 1 brincamos GOTO WAIT ;Salto incondicional a WAIT, ya que hay acarreo MOVWF 0x0C ;Guardamos el resto para seguir restando INCF 0x0D,1 ;Incrementamos la variable 0x0D,y guardamos el resultado en ella GOTO DECEN ;Salto incondicional a DECEN ;Esperamos a que se active cualquiera;de los pulsadores WAIT BTFSC 0x05,0 ;Miramos el bit 0 del registro PortA, y si (RA0) es 0 brinca CALL MUE_CEN ;Llamada a Subrutina MUE_CEN ya que RA0 es 1 BTFSC 0x05,1 ;Miramos el bit 1 del registro PortA, y si (RA1) es 0 brinca CALL MUE_DEC ;Llamada a Subrutina MUE_DEC ya que RA1 es 1 BTFSC 0x05,2 ;Miramos el bit 2 del registro PortA, y si (RA2) es 0 brinca CALL MUE_UNI ;Llamada a Subrutina MUE_UNI ya que RA2 es 1 BTFSC 0x05,3 ;Miramos el bit 3 del registro PortA, y si (RA3) es 0 brinca GOTO INICIO ;Salto incondicional a INICIO ya que RA3 es 1 GOTO WAIT ;Salto incondicional a WAIT ya que RA3 es 0 ;Rutina encargada de mostrar en el display;centenas,decenas ó unidades MUE_CEN MOVF 0x0E,0 ;Copio el valor de la posicion de memoria 0x0E en W CALL MUESTRA ;Llamo a la subrutina MUESTRA RETURN ;Retorno a WAIT desde esta subrutina MUE_DEC MOVF 0x0D,0 ;Copio el valor de la posicion de memoria 0x0D en W CALL MUESTRA ;Llamo a la subrutina MUESTRA RETURN ;Retorno a WAIT desde esta subrutina MUE_UNI MOVF 0x0C,0 ;Copio el valor de la posicion de memoria 0x0C en W CALL MUESTRA ;Llamo a la subrutina MUESTRA RETURN ;Retorno a WAIT desde esta subrutina MUESTRA CALL N_7SEG ;Llamo a la subrutina N_7SEG MOVWF 0x06 ;Copio el contenido de W en PortB RETURN ;Retorno desde subrutina ;Rutina encargada de dar;el equivalente en 7 segmentos de un numero N_7SEG ADDWF 0x02,1 ;Sumo el valor de W con el del PCL,y lo almaceno en PCL RETLW B'00111111' ;Retorno desde subrutina y W=Valor del 0 en 7 segmentos RETLW B'00000110' ;Retorno desde subrutina y W=Valor del 1 en 7 segmentos RETLW B'01011011' ;Retorno desde subrutina y W=Valor del 2 en 7 segmentos RETLW B'01001111' ;Retorno desde subrutina y W=Valor del 3 en 7 segmentos RETLW B'01100110' ;Retorno desde subrutina y W=Valor del 4 en 7 segmentos RETLW B'01101101' ;Retorno desde subrutina y W=Valor del 5 en 7 segmentos RETLW B'01111101' ;Retorno desde subrutina y W=Valor del 6 en 7 segmentos RETLW B'00000111' ;Retorno desde subrutina y W=Valor del 7 en 7 segmentos RETLW B'01111111' ;Retorno desde subrutina y W=Valor del 8 en 7 segmentos RETLW B'01100111' ;Retorno desde subrutina y W=Valor del 9 en 7 segmentos END ;Directiva fin de programa ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; Total: 68 Instrucciones;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
jr.:
Si, lo soy.Gracias por mandarme tu práctica,le echare un vistazo, pero la verdad es que solo tengo la complicacion en el convertido porque por lo demas está bien.
No me ocupe 68 lineas pero por hay andará(unas 75 mas o menos).
Me está dando un follon la práctica esta que estoy desesperado, haber si me la quito de enmedio y acabo.
Lo dicho gracias por dejarmela.
Navegación
[*] Página Anterior
Ir a la versión completa