a como conectar pic 16f877a para encender contador con display 7 segmentos

Hola espero me puedan ayudar es el primer pic que programo y quemo y por eso no se como conectarlo este es mi programa:

Código:
    LIST P=16F877A
        INCLUDE <P16F877A.INC>
CONTA0 = 0X20
CONTA1 = 0X21
CONTA2 = 0X22
        ORG 0
        GOTO INICIO
        
INICIO
        BSF STATUS,5
        MOVLW 0X00
        MOVWF TRISC
        BCF STATUS,5
        
        
CONTADOR
        MOVLW B'01111110'
        MOVWF PORTC
        CALL RETARDO
        MOVLW B'00110000' 
        MOVWF PORTC
        CALL RETARDO
        MOVLW B'01101101' 
        MOVWF PORTC
        CALL RETARDO
        MOVLW B'01111001' 
        MOVWF PORTC
        CALL RETARDO
        MOVLW B'00110011' 
        MOVWF PORTC
        CALL RETARDO
        MOVLW B'01011011' 
        MOVWF PORTC
        CALL RETARDO
        MOVLW B'01011111' 
        MOVWF PORTC
        CALL RETARDO
        MOVLW B'01110000' 
        MOVWF PORTC
        CALL RETARDO
        MOVLW B'01111111' 
        MOVWF PORTC
        CALL RETARDO
        MOVLW B'01110011'
        MOVWF PORTC
        CALL RETARDO
        
        GOTO CONTADOR
        
RETARDO
        MOVLW D'100'
        MOVWF CONTA0
REP1    MOVLW D'100'
        MOVWF CONTA1
REP2    MOVLW D'32'
        MOVWF CONTA2
REP3    DECFSZ CONTA2,F
        GOTO REP3
        DECFSZ CONTA1,F
        GOTO REP2
        DECFSZ CONTA0,F
        GOTO REP1
        RETURN


END

Como veran mi puerto de salida es el puerto C entonces conecte las salidas RC0....RC7 a los segmentos de un display, pero no se en donde tengo que conectar la otra pata del oscilador de 4 Mhz ni tampoco se en donde conectar los capacitores espero me puedan ayudar !
gracias
 

Adjuntos

  • pic_160.jpg
    pic_160.jpg
    40.2 KB · Visitas: 366
Última edición por un moderador:
generalmente se conecta de esta forma , con condensadores de 33pF

OscCrisXT.gif
 
Contador de 0 a 99 con 16F877A solo hace la cuenta de las unidades no incrementa las decenas llega hasta 10 y regresa a cero. como dato las unidades salen por el PORTD y las decenas por el PORTC. la lógica del programa al parecer esta bien por en el simulador hace el recorrido tanto unidades como decenas. esta por demás decir que el programa lo hemos construido de distintas formas y tanto el isis de proteus como el simulador de MPLAB lo hacen correcto. Estoy empezando a creer en que en el proceso se modifica algún bit de STATUS o algo así como un desbordamiento. Ya no sé.

Código:
; -----------------------------------------------------------------
; Configuración del PIC
; -----------------------------------------------------------------
     LIST  p=16f877A
; -----------------------------------------------------------------
; Archivos de inclusión
; -----------------------------------------------------------------
     #INCLUDE P16F877A.INC     
     ORG 0X00
; -----------------------------------------------------------------
; Programa principal
; -----------------------------------------------------------------
  
 
  MOVLW 0x20     ;
  MOVWF 0X03     ; BANCO 1
  MOVLW 0X00     ;
  MOVWF 0X87     ; DEFINIR PORTC COMO SALIDA
  MOVWF 0X88     ; DEFINIR PORTD COMO SALIDA
  MOVLW 0X00
  MOVWF 0X83     ; BANCO 0

LIMPIAR
  CLRF  0X20     ; 
  CLRF  0X23
DECENAS:
  MOVLW 0X3F     ; GUARDA EN W EL CARACTER 0
  MOVWF 0X08     ; IMPRIME UN CERO EN DISPLAY DE UNIDADES CADA QUE CAMBIAN LAS DECENAS
  MOVF  0X20,W   ;
  CALL  TABLA1   ;
  MOVWF 0X07     ; IMPRIMIR DECENAS EN PORTC
  CALL  PAUSA    ; LAMADA A RETARDO    
  INCF  0X20,1   ; CONTADOR1 = CONTADOR +1   
  MOVF  0X20,W
  SUBLW 0X0A     ; CUENTA DE 0 A 9
  SWAPF STATUS,W
  MOVWF 0X23
  CLRF  0X21     ;  
UNIDADES: 
  MOVF  0X21,W   ;
  CALL  TABLA1   ;
  MOVWF 0X08     ; IMPRIMIR UNIDADES EN PORTD
  CALL  PAUSA    ; CUENTA HASTA NUEVE EN EL MISMO REGISTRO
  INCF  0X21,1   ; CONTADOR = CONTADOR +1 
  MOVF  0X21,W
  SUBLW 0X0A     ; CUENTA DE 0 HASTA 9
  BTFSS STATUS,2   
GOTO UNIDADES 
  
  SWAPF 0X23,W
  MOVWF STATUS
  BTFSS STATUS,2  
GOTO DECENAS
GOTO LIMPIAR
;------------------------ RUTINA DE RETARDO -----------------------
PAUSA 
 MOVLW 0XFF
 MOVWF 0X25
WEY1
 MOVLW 0XFF
 MOVWF 0X26 
 WEY2
  DECFSZ 0X26,1
  GOTO WEY2 
  DECFSZ 0X25,1 
 GOTO WEY1
RETURN
;------------------------ FIN DE RETARDO --------------------------


TABLA1:             ; TABLA DE DECENAS
  ADDWF PCL,1       ; PCL = PCL + W 
   CONTADOR
      RETLW 0X3F    ;0
      RETLW 0X06    ;1
      RETLW 0X5B    ;2
      RETLW 0X4F    ;3
      RETLW 0X66    ;4
      RETLW 0X6D    ;5
      RETLW 0X7D    ;6
      RETLW 0X07    ;7
      RETLW 0X7F    ;8
      RETLW 0X6F    ;9
RETURN
END

El siguiente código hace lo mismo.
; -----------------------------------------------------------------
; Configuración del PIC
; -----------------------------------------------------------------
     LIST  p=16f877A
; -----------------------------------------------------------------
; Archivos de inclusión
; -----------------------------------------------------------------
     #INCLUDE P16F877A.INC     ; CONTROLADOR DE DESTINO
     ORG 0X00
; -----------------------------------------------------------------
; Programa principal
; -----------------------------------------------------------------
  
 
  MOVLW 0x20     ;
  MOVWF 0X03     ; BANCO 1
  MOVLW 0X00     ;
  MOVWF 0X87     ; DEFINIR PORTC COMO SALIDA
  MOVWF 0X88     ; DEFINIR PORTD COMO SALIDA
  MOVLW 0X00
  MOVWF 0X83     ; BANCO 0



DECENAS
 MOVLW 0X3F
 MOVWF 0X07
 CLRF 0X21
 CALL UNIDADES
 MOVLW 0X06
 MOVWF 0X07
 CLRF 0X21
 CALL UNIDADES
 MOVLW 0X5B
 MOVWF 0X07
 CLRF 0X21
 CALL UNIDADES
 MOVLW 0X4F
 MOVWF 0X07
 CLRF 0X21
 CALL UNIDADES
 MOVLW 0X66
 MOVWF 0X07
 CLRF 0X21
 CALL UNIDADES
 MOVLW 0X6D
 MOVWF 0X07
 CLRF 0X21
 CALL UNIDADES
 MOVLW 0X7D
 MOVWF 0X07
 CLRF 0X21
 CALL UNIDADES
 MOVLW 0X07
 MOVWF 0X07
 CLRF 0X21
 CALL UNIDADES
 MOVLW 0X7F
 MOVWF 0X07
 CLRF 0X21
 CALL UNIDADES
 MOVLW 0X6F
 MOVWF 0X07
 CLRF 0X21
 CALL UNIDADES

GOTO DECENAS
UNIDADES: 
  MOVF  0X21,W   ;
  CALL  TABLA1   ;
  MOVWF 0X08     ; IMPRIMIR UNIDADES EN PORTD
  CALL  PAUSA    ; CUENTA HASTA NUEVE EN EL MISMO REGISTRO
  INCF  0X21,1   ; CONTADOR = CONTADOR +1 
  MOVF  0X21,W
  SUBLW 0X0A     ; CUENTA HASTA NUEVE EN EL MISMO REGISTRO
  BTFSS STATUS,Z   
GOTO UNIDADES 
  RETURN

;------------------------ RUTINA DE RETARDO -----------------------
PAUSA 
 MOVLW 0XFF
 MOVWF 0X25
WEY1
 MOVLW 0XFF
 MOVWF 0X26 
 WEY2
  DECFSZ 0X26,1
  GOTO WEY2 
  DECFSZ 0X25,1 
 GOTO WEY1
RETURN
;------------------------ FIN DE RETARDO --------------------------

TABLA1:             ; TABLA DE DECENAS
  ADDWF PCL,1       ; PCL = PCL + W 
   CONTADOR1
      RETLW 0X3F    ;0
      RETLW 0X06    ;1
      RETLW 0X5B    ;2
      RETLW 0X4F    ;3
      RETLW 0X66    ;4
      RETLW 0X6D    ;5
      RETLW 0X7D    ;6
      RETLW 0X07    ;7
      RETLW 0X7F    ;8
      RETLW 0X6F    ;9
RETURN
END
 
Última edición por un moderador:
Tu segundo programa funciona correctamente ya lo probe con Proteus 7.5 sp3 y lo hise funcionar con el pic, puede aver existido un error de conexion en el simulador actualizalo, de hecho tu programa me sirvio para comenzar con display's en mi clase de micros te debo una
 
aqui les dejo unas simulaciones en proteus y microcode studio de un contador con display de 7 segmentos anodo comun, usando el pic 16f628a, espero les sirva

solo abran la simulacion en proteus y carguen el programa que esta en hex
 

Adjuntos

  • simulacion display.rar
    33.1 KB · Visitas: 385
Atrás
Arriba