Autor Tema: como mostrar un numero en displays de 7 segmentos en asm  (Leído 13305 veces)

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

Desconectado ma77ias

  • PIC10
  • *
  • Mensajes: 5
como mostrar un numero en displays de 7 segmentos en asm
« en: 15 de Noviembre de 2008, 19:45:54 »
q tal! Con un pic 16f84a estoy haciendo un velocimetro con 3 display de 7 segmentos pero no se como puedo hacer para mostrar los valores que me da un contador y uicarlos en centena, decena y unidad. Estuve viendo en otro tema pero la solucion te la daban en C y yo solo me manejo con assembler :? . Alguien me podria ayudar con un ejemplo?

jacrmr

  • Visitante
Re: como mostrar un numero en displays de 7 segmentos en asm
« Respuesta #1 en: 15 de Noviembre de 2008, 20:39:26 »
Me imagino que lo que te está dando problemas es la conversión de tu número binario en centenas, decenas y unidades. De tu número binario final debes dividirlo primero entre 100 para obtener las centenas y después entre 10 para obtener las decenas. Puesto que en ASM no hay división debes realizarla mediante restas sucesivas. A tu número le restas de 100 en 100 hasta que el resultado sea negativo. Las veces que alcanzaste a obtener las divisón son tus centenas. De igual forma para las decenas.
Supongamos que tu número binario de velocidad es 123
123 - 100 = 23 y el resultado no fue negativo. Centenas = 1.
23 - 100 = -77. Resultado negativo. Hasta aquí llegaron las centenas, vamos con las decenas ahora restando sucesivamente 10.
23 - 10 = 13 y el resultado no fue negativo. Decenas = 1.
13 - 10 = 3 y el resultado no fue negativo. Decenas = 2.
3 - 10 = -7. Resultado negativo. Hasta aquí llegaron las decenas, vamos con las unidades.
3 - 1 (aquí ya no tiene ningún caso hacer la resta. Automáticamente éste último valor que te queda son las unidades).
Binario = 123... Centenas = 1, Decenas = 2, Unidades = 3.
« Última modificación: 15 de Noviembre de 2008, 20:41:58 por jacrmr »

Desconectado ma77ias

  • PIC10
  • *
  • Mensajes: 5
Re: como mostrar un numero en displays de 7 segmentos en asm
« Respuesta #2 en: 16 de Noviembre de 2008, 09:09:29 »
UH! gracias por el razonamiento... me quede toda la noche programando pero al final lo hice con 2 display de 7 segmentos, ahora tengo el programa en asm en donde uso RB4 como contador de pulsos externos en 1 segundo (pienso ponerle un CI555 para simularlo) ; RA0 y RA1 como señales independientes a la entrada del anodo de cada display y asi multiplexarlos... Me surgio un problema, pense que me iba a andar bien pero lo probe en el proteus y pic simulator IDE  y no me funciono. Yo soy nuevo en esto del pic por eso queria saber si me podrian dar una mano  y pegarle un vistazo porque por ahi le pifie en algo y no me di cuenta...desde ya gracias!!!

    REG1   EQU   0X0C
   REG2   EQU   0X0D
   REG3   EQU   0X0E
    cont_timerd   EQU   0X0F   ;valor de contador deL tmr0 para calcular decena
    cont_dec   EQU   0X10   ;valor final de decena
    cont_uni   EQU   0X20   ;valor final de unidad
    multiplex   EQU   0X30   ;realiza el multiplexado
    cont_timeru   EQU   0X40   ;valor de contador del TMR0 para calcular unidad


 org   0x0000
INICIO   bsf   status,rp0
   clrf   trisb
   bsf   trisa,4
   movlw   b'00111000'
   movwf   option_reg
   bcf   status,rp0
TIMER   clrf   tmr0      ; comienza timer en cero
RETARDO movlw    0x45      ;retardo de 1 seg
        movwf    REG3
TRES    movlw    0x45
        movwf    REG2
DOS     movlw    0x45
        movwf    REG1
UNO     decfsz    REG1,1
        goto     UNO
        decfsz    REG2,1
        goto    DOS
        decfsz    REG3,1
        goto    TRES
     
PRINCIPAL   
   movf   tmr0,w      ;despues de transcurrido el tiempo se lee cuantos pulsos hubo en el contador   
   
   movwf   cont_timerd
DECENA   movlw   d'10'      ;carga 10 para compararlo con el contador y sacar decenas
   subwf   cont_timerd,0
   btfsc   status,0
   goto   UNIDAD
   movwf   cont_timerd
   movlw   0x00
   movwf   cont_dec
   incf   cont_dec,1
   goto   DECENA
UNIDAD   bcf   status,0
    movf   tmr0,w
   movwf   cont_timeru
   movlw   d'1'      ;carga 1 para compararlo con el contador y sacar unidades
   subwf   cont_timeru,0
   btfsc   status,0
   goto   CALCUL
   movwf   cont_timeru
   movlw   0x00
   movwf   cont_uni
   incf   cont_uni,1
   goto   UNIDAD

CALCUL   movlw   b'00000010'    ; valor para visualizar 1° display
   movwf   multiplex
   movf   multiplex,0
   movwf   porta
   movf   cont_dec,0
   call   DISPLAY
   movwf   portb
      
   bcf   status,0
   rrf   multiplex,1   ;valor para visualizar 2° display
   movf   multiplex,0
   movwf   porta
   movf   cont_uni,0
   call   DISPLAY
   movwf   portb
   
   goto   TIMER      ;vuelve a contar
DISPLAY   addwf   pcl,f       ;tabla del display de 7 segmentos
   retlw   3fh
   retlw   06h
   retlw   5bh
   retlw   4fh
   retlw   66h
   retlw   6dh
   retlw   7dh
   retlw   07h
   retlw   7fh
   retlw   6fh
   end
« Última modificación: 16 de Noviembre de 2008, 09:13:53 por ma77ias »


 

anything