Trabajo realizado por:
·
|
Diego Armando Buitrago
Buitragofuentes@gmail.com
|
·
|
Andrey Baquero Acevedo
Andreybaquero@gmail.com
|
·
|
Oscar Felipe Yepes
|
felipeyepes@gmail.com
|
Montaje del Circuito.
Componentes a utilizar
- 2 Display de 7 segmento2
- 2 Resistencia de 1 K
- PIC 16F877A
- Cristal de 20 MHZ.
- 2 condensadores de 22 Picos
- 1 pulsador
- 1 Resistencia de 220 Ohm
Código implementado.
;********************************************************************
; CONTADOR DECIMAL DE PULSOS
;********************************************************************
; NOMBRE: p1_led.asm
; FECHA: 14/07/2011
; VERSION: 1.00
; PROGRAMADOR: Vicente Alexander Macas
;********************************************************************
; DESCRIPCION:
;Este programa cuenta mediante una variable los pulsos ingresados mediante ;una botonera en RB0. También habrá un SWITCH en el puerto A que indique ;modo: de incremento o de decremento. El resultado se lo visualiza en un ;DISPLAYS de 7 segmentos colocado en el puerto C.
;********************************************************************
;DIRECTIVAS
LIST p=16F887 ;Tipo de microcontrolador
INCLUDE P16F887.INC ;Define los SFRs y bits del
;P16F887
__CONFIG _CONFIG1, _CP_OFF&_WDT_OFF&_INTOSCIO&_FCMEN_OFF
;Setea parámetros de configuración
errorlevel -302 ;Deshabilita mensajes de
;advertencia por cambio
;bancos
;*********************************************************************
CONTEO EQU 0X21
;PROGRAMA
ORG 0x00 ;Vector de RESET
GOTO MAIN
ORG 0x04 ;Vector de interrupción
GOTO Interrupcion ;Va a rutina de interrupción
MAIN
;SETEO DE PUERTOS
BSF STATUS,5
BSF STATUS,6 ;Selecciona el Banco 3
CLRF ANSELH ; Digitaliza puertos ANS.
CLRF ANSEL
BCF STATUS,6 ;Selecciona el Banco 1
BSF OSCCON,6
BSF OSCCON,5
BCF OSCCON,4 ; Selecciona el reloj de 8MHz
BSF OSCCON,0 ; Selecciona el oscilador de rejor interno.
MOVLW 0XFF
MOVWF TRISA ;Setea PORTA como entrada.
MOVLW 0XFF
MOVWF TRISB ;Setea PORTB como entrada.
CLRF TRISC ;Setea PORTC como salida.
MOVLW B'10010000'
MOVWF INTCON ; GIE, INTE Habilita interrupcion por RB0.
;INICIALIZACION
BCF STATUS,5 ;Selecciona el Banco 0.
CLRF PORTA ;Encera PORTA
CLRF PORTB ;Encera PORTB
CLRF PORTC ;Encera PORTCINTCON
CLRF PORTE ;Encera PORTD
CLRF CONTEO ;Encera CONTEO
MOVFW CONTEO ;Encera el registro W.
CALL TABLA
MOVWF PORTC
INICIO
NOP
GOTO INICIO ; Lazo infinito
Interrupcion
BCF INTCON,INTF ; Borra la bandera de interrupcion TMR0IF
CLRF PORTB ; Encera el PORTB.
BTFSC PORTA,0 ; Pregunta si en RA0 esta con cero.
GOTO INCREMENTO ; RA0=1 INCREMENTO
GOTO DECREMENTO ; RA0=0 DECREMENTO
INCREMENTO
INCF CONTEO ; Incrementa CONTEO
MOVFW CONTEO ; A W le asiga CONTEO
CALL TABLA
MOVWF PORTC ; PORTC se le asigna el código de 7 segmentos.
MOVFW CONTEO ; a W se le asigna CONTEO
SUBLW 0X0A ; W=10-CONTEO
BTFSS STATUS,Z ; Si CONTEO=10 salta.
GOTO SALIDA
MOVLW 0X00
MOVWF CONTEO ; CONTEO=0
MOVFW CONTEO ; W=CONTEO
CALL TABLA
MOVWF PORTC ; PORTC se carga con el código de 7 segmentos.
GOTO SALIDA
DECREMENTO
DECF CONTEO ; Decrementa CONTEO en una unidad.
MOVFW CONTEO ; W=CONTEO
SUBLW 0XFF ; W=255-CONTEO
BTFSC STATUS,Z ; Verifica si desborde mediante Z=1.
GOTO DESBORDE
MOVFW CONTEO ; W=CONTEO
CALL TABLA
MOVWF PORTC ; PORTC le asigna el código de 7 segmentos.
GOTO SALIDA
DESBORDE
MOVLW 0X09
MOVWF CONTEO ; CONTEO=9
MOVFW CONTEO
CALL TABLA
MOVWF PORTC ; PORTC se carga con 9.
SALIDA
BSF INTCON,GIE ; Se habilita la interrupcion global
RETFIE ; Regresamos al lazo infinito a espera
; de otra interrupcion.
TABLA
ADDWF PCL,F ; PCL + W -> W
; El PCL se incrementa con el
; valor de W proporcionando un
; salto
RETLW 0x3F ; Retorna con el código del 0
RETLW 0x06 ; Retorna con el código del 1
RETLW 0x5B ; Retorna con el código del 2
RETLW 0x4F ; Retorna con el código del 3
RETLW 0x66 ; Retorna con el código del 4
RETLW 0x6D ; Retorna con el código del 5
RETLW 0x7D ; Retorna con el código del 6
RETLW 0x07 ; Retorna con el código del 7
RETLW 0x7F ; Retorna con el código del 8
RETLW 0x67 ; Retorna con el código del 9
RETLW 0X00
END ; Fin del programa fuente
-
; CONTADOR DECIMAL DE PULSOS
;********************************************************************
; NOMBRE: p1_led.asm
; FECHA: 14/07/2011
; VERSION: 1.00
; PROGRAMADOR: Vicente Alexander Macas
;********************************************************************
; DESCRIPCION:
;Este programa cuenta mediante una variable los pulsos ingresados mediante ;una botonera en RB0. También habrá un SWITCH en el puerto A que indique ;modo: de incremento o de decremento. El resultado se lo visualiza en un ;DISPLAYS de 7 segmentos colocado en el puerto C.
;********************************************************************
;DIRECTIVAS
LIST p=16F887 ;Tipo de microcontrolador
INCLUDE P16F887.INC ;Define los SFRs y bits del
;P16F887
__CONFIG _CONFIG1, _CP_OFF&_WDT_OFF&_INTOSCIO&_FCMEN_OFF
;Setea parámetros de configuración
errorlevel -302 ;Deshabilita mensajes de
;advertencia por cambio
;bancos
;*********************************************************************
CONTEO EQU 0X21
;PROGRAMA
ORG 0x00 ;Vector de RESET
GOTO MAIN
ORG 0x04 ;Vector de interrupción
GOTO Interrupcion ;Va a rutina de interrupción
MAIN
;SETEO DE PUERTOS
BSF STATUS,5
BSF STATUS,6 ;Selecciona el Banco 3
CLRF ANSELH ; Digitaliza puertos ANS.
CLRF ANSEL
BCF STATUS,6 ;Selecciona el Banco 1
BSF OSCCON,6
BSF OSCCON,5
BCF OSCCON,4 ; Selecciona el reloj de 8MHz
BSF OSCCON,0 ; Selecciona el oscilador de rejor interno.
MOVLW 0XFF
MOVWF TRISA ;Setea PORTA como entrada.
MOVLW 0XFF
MOVWF TRISB ;Setea PORTB como entrada.
CLRF TRISC ;Setea PORTC como salida.
MOVLW B'10010000'
MOVWF INTCON ; GIE, INTE Habilita interrupcion por RB0.
;INICIALIZACION
BCF STATUS,5 ;Selecciona el Banco 0.
CLRF PORTA ;Encera PORTA
CLRF PORTB ;Encera PORTB
CLRF PORTC ;Encera PORTCINTCON
CLRF PORTE ;Encera PORTD
CLRF CONTEO ;Encera CONTEO
MOVFW CONTEO ;Encera el registro W.
CALL TABLA
MOVWF PORTC
INICIO
NOP
GOTO INICIO ; Lazo infinito
Interrupcion
BCF INTCON,INTF ; Borra la bandera de interrupcion TMR0IF
CLRF PORTB ; Encera el PORTB.
BTFSC PORTA,0 ; Pregunta si en RA0 esta con cero.
GOTO INCREMENTO ; RA0=1 INCREMENTO
GOTO DECREMENTO ; RA0=0 DECREMENTO
INCREMENTO
INCF CONTEO ; Incrementa CONTEO
MOVFW CONTEO ; A W le asiga CONTEO
CALL TABLA
MOVWF PORTC ; PORTC se le asigna el código de 7 segmentos.
MOVFW CONTEO ; a W se le asigna CONTEO
SUBLW 0X0A ; W=10-CONTEO
BTFSS STATUS,Z ; Si CONTEO=10 salta.
GOTO SALIDA
MOVLW 0X00
MOVWF CONTEO ; CONTEO=0
MOVFW CONTEO ; W=CONTEO
CALL TABLA
MOVWF PORTC ; PORTC se carga con el código de 7 segmentos.
GOTO SALIDA
DECREMENTO
DECF CONTEO ; Decrementa CONTEO en una unidad.
MOVFW CONTEO ; W=CONTEO
SUBLW 0XFF ; W=255-CONTEO
BTFSC STATUS,Z ; Verifica si desborde mediante Z=1.
GOTO DESBORDE
MOVFW CONTEO ; W=CONTEO
CALL TABLA
MOVWF PORTC ; PORTC le asigna el código de 7 segmentos.
GOTO SALIDA
DESBORDE
MOVLW 0X09
MOVWF CONTEO ; CONTEO=9
MOVFW CONTEO
CALL TABLA
MOVWF PORTC ; PORTC se carga con 9.
SALIDA
BSF INTCON,GIE ; Se habilita la interrupcion global
RETFIE ; Regresamos al lazo infinito a espera
; de otra interrupcion.
TABLA
ADDWF PCL,F ; PCL + W -> W
; El PCL se incrementa con el
; valor de W proporcionando un
; salto
RETLW 0x3F ; Retorna con el código del 0
RETLW 0x06 ; Retorna con el código del 1
RETLW 0x5B ; Retorna con el código del 2
RETLW 0x4F ; Retorna con el código del 3
RETLW 0x66 ; Retorna con el código del 4
RETLW 0x6D ; Retorna con el código del 5
RETLW 0x7D ; Retorna con el código del 6
RETLW 0x07 ; Retorna con el código del 7
RETLW 0x7F ; Retorna con el código del 8
RETLW 0x67 ; Retorna con el código del 9
RETLW 0X00
END ; Fin del programa fuente
-