Está en la página 1de 12

UNIVERSIDAD AUTONOMA DE SINALOA

Facultad de Ingeniería

Ingeniería en Procesos Industriales

Laboratorio de Microprocesadores y Microcontroladores

Práctica 2
Contador



Contenido
INTRODUCCIÓN ........................................................................................................................... 1
OBJETIVO ....................................................................................................................................... 1
DIAGRAMAS DE FLUJO .............................................................................................................. 1
DIAGRAMA ESQUEMÁTICO ...................................................................................................... 2
Material utilizado .......................................................................................................................... 2
CODIGO ........................................................................................................................................... 3
CÓDIGO ENSAMBLADOR ....................................................................................................... 3
CODIGO EN ALTO .................................................................................................................... 6
RESULTADOS ................................................................................................................................ 9



INTRODUCCIÓN
En electrónica es bastante frecuente verse necesitado de contabilizar eventos y
por tanto se requiere utilizar un contador; por otra parte, en nuestros días
estamos rodeados de dispositivos que disponen de algún tipo de contador
digital, incluso en la mayoría de los electrodomésticos vienen equipados con
uno. Un contador digital, básicamente consta de una entrada de impulsos que
se encarga de conformar (escuadrar) las señales, de manera que el conteo de
los pulsos no sea alterado por señales no deseadas, las cuales pueden falsear
el resultado final. Estos impulsos son acumulados en un contador propiamente
dicho cuyo resultado, se presenta mediante un visor que puede estar
constituido por una serie de sencillos dígitos de siete segmentos o en su caso
mediante una sofisticada pantalla de plasma.

OBJETIVO
Familiarizar al alumno con la manipulación de los puertos del Microcontrolador
PIC16f887, de tal manera que estos interactúen con elementos externos a
dicho Microcontrolador, configurando los puertos en modo de receptores de
señales (pulsos) así como salida de señales digitales (1-0).

DIAGRAMAS DE FLUJO
Rebote
Inicio

W = 0FFH
i=0
Retardo = W

Imprimir i

Retardo = Retardo - 1

No No
RA0 = 0
Retardo = 0

Si Si

Si
Return
i=9

No
1
W=W+1
DIAGRAMA ESQUEMÁTICO

*Elaborado en LiveWire

Material utilizado
1 PIC16F887
1 Display 7 segmentos ánodo común
2 Resistencias 10 KOhms
1 Switch
7 Resistencias 220 Ohms
1 Cristal 4MHz
2 Capacitores 33µf
Placa fenólica
Alambre
Pulsera antiestática
Fuente de Voltaje
Multímetro

2

CODIGO
CÓDIGO ENSAMBLADOR
list p=16f887

#include "p16F887.inc"

__CONFIG _CONFIG1, _FOSC_XT & _WDTE_OFF & _PWRTE_OFF &


_MCLRE_ON & _CP_OFF & _CPD_OFF & _BOREN_ON & _IESO_ON &
_FCMEN_ON & _LVP_OFF

__CONFIG _CONFIG2, _BOR4V_BOR40V & _WRT_OFF

PCL EQU 02H

STATUS EQU 03H

PORTA EQU 05H

PORTB EQU 06H

CUENTA EQU 20H

RETARDO EQU 21H

ORG 00H

GOTO INICIO

TABLA MOVWF PCL

DISP RETLW 40H

RETLW 24H

RETLW 19H

RETLW 02H

RETLW 00H

3

INICIO

;NOS MOVEMOS AL BANCO 3------------------------------------------------

BSF STATUS,5

BSF STATUS,6

;----------------------------------------------------------------------

BCF ANSEL,0

CLRF ANSELH ;Indica el puerto B como salida digital

;NOS MOVEMOS AL BANCO 1------------------------------------------------

BCF STATUS,6

;----------------------------------------------------------------------

BSF TRISA,0

CLRF TRISB

;NOS MOVEMOS AL BANCO 0------------------------------------------------

BCF STATUS,5

;----------------------------------------------------------------------

CLRF CUENTA

MUESTRA MOVLW DISP

4

ADDWF CUENTA,0 ;Suma CUENTA a WREG

CALL TABLA

MOVWF PORTB ;Manda el valor binario al puerto B


mostrando el numero en el display.

BTFSS PORTA,0 ;Verifica el pin(si es 1 o 0)

CALL SUMA

GOTO MUESTRA

;================================================

SUMA INCF CUENTA,1 ;Incremente el registro y sera guardado en la


variable

MOVLW 0AH

SUBWF CUENTA,0 ;Realiza restas

BTFSC STATUS,2 ;Verifica si hay un 0

CLRF CUENTA

CALL REBOTE

ESPERA BTFSS PORTA,0

GOTO ESPERA

CALL REBOTE

RETURN

;================================================

REBOTE MOVLW 0FFH

MOVWF RETARDO

5

REBO DECFSZ RETARDO,1

GOTO REBO

RETURN

;================================================
=

END

CODIGO EN ALTO
#include <xc.h>

#define _XTAL_FREQ 4000000

#pragma config FOSC = XT // Oscillator Selection bits (XT oscillator:


Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN)

#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled
and can be enabled by SWDTEN bit of the WDTCON register)

#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT


disabled)

#pragma config MCLRE = ON // RE3/MCLR pin function select bit


(RE3/MCLR pin function is MCLR)

#pragma config CP = OFF // Code Protection bit (Program memory code


protection is disabled)

#pragma config CPD = OFF // Data Code Protection bit (Data memory
code protection is disabled)

#pragma config BOREN = ON // Brown Out Reset Selection bits (BOR


enabled)

#pragma config IESO = ON // Internal External Switchover bit


(Internal/External Switchover mode is enabled)

#pragma config FCMEN = ON // Fail-Safe Clock Monitor Enabled bit (Fail-


Safe Clock Monitor is enabled)

6

#pragma config LVP = OFF // Low Voltage Programming Enable bit (RB3
pin has digital I/O, HV on MCLR must be used for programming)

#pragma config BOR4V = BOR40V // Brown-out Reset Selection bit (Brown-


out Reset set to 4.0V)

#pragma config WRT = OFF // Flash Program Memory Self Write Enable
bits (Write protection off)

int cuenta;

int
display[10]={0b1000000,0b1111001,0b0100100,0b0110000,0b0011001,0b00
10010,0b0000010,0b1111000,0b0000000,0b0010000};

void main(void)

ANSEL=0;

ANSELH=0;

TRISAbits.TRISA0=1;

TRISB=0;

while(1)

if(PORTAbits.RA0==1)

PORTB=display[cuenta];

else

7

{

__delay_ms(300);

cuenta++;

cuenta= cuenta + 1;

if(cuenta>8)

cuenta=0;

return;

8

RESULTADOS

*Diseño PCB

*Diseño PCB (Artwork)

9

*Circuito finalizado en Placa fenólica

*Circuito Funcionando

10

También podría gustarte