Autor Tema: ayudaaa---contador up/down de 4 digitos  (Leído 3759 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado nanii

  • PIC10
  • *
  • Mensajes: 2
ayudaaa---contador up/down de 4 digitos
« en: 16 de Noviembre de 2009, 00:54:03 »
ola...antes que nada, soy nueva :-/ en esto...bueno ay les va...Deseo ayuda en una tarea :D, la cual consta y dice asi: Se trata de un contador up/down de tres digitos que cuenta desde 000 hasta 999. la entrada de pulsos a contar se aplica por ra4 es sensible al flanco descendente. la entrada ra3 determina si la cuenta es ascendente "1" o descendente "0"...ay les va el codigo .asm (quiero saber si tiene algun error, pork lo checo en el mplab y me manda errores, pero ni idea, y si poor fiis, tambien podrian decirme donde le puedo componer para que vayan mas rapido los numero, sk lo paso en proteus y los numero van k buelan :D) gracias y espero me hayan entendido, pork hasta yo me hize bolas,...jajaja!!! :shock:

;Pratcica9

;contador Up/down de 3 digitos

;se trata de un contador Up/down de 3 digitos que cuenta desde 000 hasta 999. la entrada de
;pulsos a contar se aplica por RA4 es sensible al flanco descendente. la entrada RA3  determina
;si la cuenta es ascendente "1" o descendete "0"

   List   p=16F84
   INCLUDE "P16F84.INC" ; definiciones de registros internos

DIG0   equ   0x0c      ;variable para el digito 0
DIG1   equ   0x0d      ;variable para el digito 1
DIG2   equ   0x0e      ;variable para el digito 2
Delay_Fijo   equ   0x0f   ;variable de temporizacion fija

   org   0x00         ;vector de reset
   goto       Inicio
   org   0x05         ;salva vector de interrupcion

;Tabla_7_seg: esta rutina convierte el codigo BCD    presente en los 4 bits de menos peso
;del reg. W en su equivalente a 7 segmenstos. el codigo 7 segmentos retornos retorna tambien
; en el reg. W

Tabla_7_seg   addwf   PCL,F   ;desplaza al pc tantas posiciones como indique el valor del registro W

      retlw   b'11000000'     ;codigo 7 seg del digito 0
      retlw   b'11111001'     ;codigo del 1
      retlw   b'10100100'     ;2
      retlw   b'10110000'     ;3
      retlw   b'10011001'     ;4
      retlw   b'10010010'     ;5
      retlw   b'10000010'     ;6
      retlw   b'11111000'     ;7
      retlw   b'10000000'     ;8
      retlw   b'10011000'     ;9

;Display: esta rutina activa secuencialemnte cada uno de los digitos D0, D1 Y D2
;conectados a RA0 Y RA1 Y RA2 respectivamente, a la vez que visualiza en cada uno de
;ellos el contenido de las variables DIG1, DIG2 Y DIG3, previa conversion a 7 segmentos

Display   bsf   PORTA,0       ;ACTIVA DIGITO0
   movf   DIG0,W      ;CARGA VARIANLE DIGO
       call     Tabla_7_seg ;convierte 7 segmentos
       movwf    PORTB       ;visualiza DIG0 sobre el digito 0
       call     Delay       ;Temporiza 1ms
       bcf      PORTA,0      ;desactiva digito 0
   movlw   b'11111111'
   movwf   PORTB
   bsf   PORTA,1      ;activa digito 1
   movf   DIG1,W      ;CARGA VARIABLE DIG1
   call   Tabla_7_seg   ;convierte a 7 segmentos
   movwf   PORTB      ;visualiza dig1 sobre el digito 1
   call   Delay      ;temporiza 1mS
   bcf   PORTA,1      ;desactiva digito 1
   movlw   b'11111111'
   movwf   PORTB      ;desactiva segmentos
   bsf   PORTA,2      ;ACTVIA DIGITO 2
   movf   DIG2,W      ;carga variable DIG2
   call   Tabla_7_seg   ;convierte a 7 segmentos
   movwf   PORTB      ;VISUALIIZA dig2 sobre el digito 2
   call   Delay      ;temporiza 1mS
   bcf   PORTA,2      ;desactiva digito 2
   movlw   b'11111111'
   movwf   PORTB      ;desactiva segementos
   return         ;fin del multiplexado

;Delay: rutina de tmeporizacion por software. Un bucle hae decermentar una variable hasta alcanzar 0. El tiempo que consue su ejecucion es del orden de 1mS, dado que la ejecucion de
;tres instrucciones que consumen 4 uS, se repite 255 veces

Delay   clrf   Delay_Fijo   ;se manda repetir el bucle 255   veces
Delay_1   nop         ;consume 1uS  le quite el nop
      decfsz   Delay_Fijo,F   ;consume 1uS
      goto   Delay_1      ;consume 2uS
      return
;*************************************************************
;*******************************************************

;Incrementa en una unidad las variables DIG0, DIG1, y DIG2 con el correspondiente ajuste BCD

Incrementa   incf   DIG0,F   ;Incrementa DIG0 en una unidad
   movlw   0x0a
   subwf   DIG0,W
   btfss   STATUS,Z   ;ES MAYOR DE 9??
   return         ;no
                  ;movlw   .10 esta de mas
   clrf   DIG0      ;SI, AJUSTA A 0 VARIABLE DIG0
   incf   DIG1,F      ;INCREMENTA DIG1
   movlw   0x0a
   subwf   DIG1,W
   btfss   STATUS,Z   ;ES MAYOR DE 9
   return   ;no
                  ;   movlw   .10 "esta de mas----"
   clrf   DIG1      ;SI, AJUSTA A 0 VARIABLE DIG1
   incf   DIG2,F      ;incrementa DIG2
   movlw   0x0a
   subwf   DIG2,W
   btfss   STATUS,Z   ;ES MAYOR QUE 9??
   return            ;no
                  ;movlw   .10    esta de masss
   clrf   DIG2      ;SI, AGISTA A 0 VARIABLE DIG2
   return
;*********************************
;***********************************

;Decrementa en una unidad las variables dig1, dig1, y dig2 con el correspondiente ajuste BCD
;
Decrementa   decf   DIG0,F   ;decrementa dig0 en una unidad
   movlw   0xff
   subwf   DIG0,W
   btfss   STATUS,Z   ;ES MENOR DE 0?
   return         ;no
   movlw   .9
   movwf   DIG0      ;si ajuste de DIG0
   decf   DIG1,F      ;DECREMENTA DIG1
   movlw   0xff
   subwf   DIG1,W
   btfss   STATUS,Z   ;ES MEOR DE 0?
   return         ;no
   movlw   .9
   movwf   DIG1      ;SI, AJUSTA DIG1
   decf    DIG2,F      ; se agrego
   movlw   0xff      ;se agrego
   subwf   DIG2,W       ; se agrego de masss
   btfss   STATUS,Z   ;ES MENOR DE 0?
   return         ;no
   movlw   .9   
   movwf   DIG2      ;SI, AJUSTA DIG2
   return

Inicio   movlw   b'11111111'
   movwf   PORTB      ;PONE LOS LATCH   DE SALIDA
   clrf   PORTA      ;desconecta los digitos
   bsf   STATUS,RP0   ;SELECCIONA BANCO 1
   clrf   TRISB      ;PUERTA B SE COFIGURA COMO SALIDA
   movlw   b'00011000'
   movwf   TRISA      ;RA0-RA2 SE CONFIGURA COMO SALIDA
   movlw   b'00000111'
   movwf   OPTION_REG   ;presscaler de 256 para el TMR0   
   bcf   STATUS,RP0   ;SELECCIONA BANCO 0
   
   
   clrf   DIG0
   clrf   DIG1
   clrf   DIG2      ;CARGA LAS VARIABLES CON VALOR INICIAL 000
   
Loop   clrwdt         ;refrescar el wdt
   btfsc   PORTA,4      ;FLACO ASCENENTE EN RA4??
   goto   Descendente   ;Si
   call   Display      ;no, mantiene el refresco del display
   goto   Loop      ;Esperar

Descendente   clrwdt      ;refrescar el wdt
   btfss   PORTA,4      ;FLANCO DECENDETE EN RA4
   goto   Pulso      ;si ha habido un pulso en RA4
   call    Display         ;no, mantiene el refresco del display
   goto   Descendente   ;esperar
   
Pulso   btfss   PORTA,3      ;RA3 ESTA A "1"??


   goto   Dec_Cont   ;no
   call   Incrementa   ;si, incrementa el contador
   
   goto   Loop      ; esperar al siguiente pulso
Dec_Cont   call   Decrementa   ;decrementar el contador
   goto   Loop      ;esperar el siguiente pulso

   end         ;fin


Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: ayudaaa---contador up/down de 4 digitos
« Respuesta #1 en: 16 de Noviembre de 2009, 01:31:56 »
Exactamente que errores marca? Respecto a la velocidad, dependerá de los pulsos recibidos en RA4, es quien maneja el contador así que revisa eso.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado mtristan

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 395
Re: ayudaaa---contador up/down de 4 digitos
« Respuesta #2 en: 16 de Noviembre de 2009, 12:14:57 »
.

Al parecer el programa no tiene errores. El problema con el MPLAB puede deberse a que tenés seleccionado otro pic (en Configure->Select Device) o que no agregaste el archivo P16F84.INC en la carpeta Header files de la ventana de proyecto (tal archivo lo encontrás en la carpeta MPASM Suite donde tenés instalado el MPLAB). Seguramente también te está dando unos cuantos warnings que dicen algo como "Operand not in bank 1". Por estos últimos no te preocupes, pues son más bien una advertencia del programa que un error en realidad. Los podés desactivar escribiendo ERRORLEVEL -302 debajo del include.
Espero haber sido de ayuda. ¡Saludos!

When you see a good move, look for a better one (Emanuel Lasker)

Desconectado nanii

  • PIC10
  • *
  • Mensajes: 2
Re: ayudaaa---contador up/down de 4 digitos
« Respuesta #3 en: 16 de Noviembre de 2009, 21:15:51 »

wooo gracias...pero como eso de la velocidad..k en ra4?? sk la verdad el maestro solo nos dio el monton de practicas y en especial dan lata la 9 y 10 y no nos explicoo niii tantitoo..asi k yaa sabras k tan gravee esta mi situacion jajaja....
Besos y muchas gracias x sus respuestas:::)

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: ayudaaa---contador up/down de 4 digitos
« Respuesta #4 en: 17 de Noviembre de 2009, 00:03:46 »

wooo gracias...pero como eso de la velocidad..k en ra4?? sk la verdad el maestro solo nos dio el monton de practicas y en especial dan lata la 9 y 10 y no nos explicoo niii tantitoo..asi k yaa sabras k tan gravee esta mi situacion jajaja....
Besos y muchas gracias x sus respuestas:::)


Lee las reglas del foro y reescribe las dudas, no es el lenguaje adecuado.

Saludos!
No contesto mensajes privados, las consultas en el foro