Vous êtes sur la page 1sur 9

INSTITUTO POLITÉCNICO NACIONAL

Nombre de la Escuela: Escuela Superior de Ingeniería


Mecánica y Eléctrica “ESIME”

MICROPROCESADORES

Practica 2: Contador con Display de 7 Segmentos

Profesor: Agustín Vázquez Zarate

Grupo: 6CV1

Objetivo:
Programar un contador del 0 al 9 a partir de un Display de 7 segmentos, asignando valores
a las salidas de nuestro PIC, para que se muestren de forma automática.

Introducción:

El display de 7 segmentos cuenta con un conjunto de 7 LEDS conectados los cuales se


utilizan para la representación de números en dispositivos electrónicos.

Este elemento se ensambla de manera que se pueda activar cada segmento (LED)
por separado logrando de esta manera combinar y representar todos los números en
el display (del 0 al 9). El display de 7 segmentos más común es el de color, por su
facilidad de visualización. Existen dos tipos de arreglos en los displays:

Display ánodo común, todos los ánodos de los LED unidos y conectados a la fuente
de alimentación. En este caso para activar cualquier elemento hay que poner el
cátodo del elemento a tierra a través de una resistencia para limitar la corriente que
pasa por el elemento. (Se encienden con un estado bajo “LOW” o0 lógico)

Display cátodo común, todos los ánodos de los LED unidos y conectados a tierra.
Para activar un segmento de estos hay que poner el ánodo del segmento a encender
a Vcc (tensiónde la fuente) a través de una resistencia para limitar el paso de la
corriente. (Se enciende con un estado alto “HIGH” o 1 lógico)

2
Los PIC (Controlador de Interfaz Periférico) son una familia de microcontroladores tipo RISC
fabricados por Microchip Technology Inc. Se diseñó para ser usado con la nueva CPU de
16bitsCP16000.

Se pueden considerar tres grandes gamas de MCU PIC en la actualidad: Los básicos
(Linebase), los de medio rango (MidRange) y los de alto desempeño (high performance).
Los PIC18 son considerados de alto desempeño y tienen entre sus miembros a PIC con
módulos de comunicación y protocolos avanzados (USB, Ethernet, Zigbee por ejemplo).

El PIC utilizado es el 18F4550 de 8 bits, cuenta35 Entradas/Salidas programables.

Desarrollo:

Para esta práctica lo primero que necesitamos es armar el siguiente circuito:

El material que necesitamos es:


 PIC18F4550
 Tarjeta para el PIC
 Protoboard
 Display de 7 segmentos ánodo/cátodo
 8 Resistencias de 330Ω
 Jumpers/Alambre
 Fuente de alimentación a 5V

3
Software:
 MPLAB (Versiones recientes)

Primero debemos conocer el lenguaje básico de programación en ensamblador y asignar


valores (0 al 9) para encender los LED del Display correspondientes.

Para el 0 es necesario encender los LED con 1 binario: f, e, d, c, b, a

0 0 1 1 1 1 1 1

En hexadecimal: 3 F

Número . g f e d c b a Hexadecimal
0 0 1 1 1 1 1 1 3F

0 0 0 0 0 1 1 0 06

0 1 0 1 1 0 1 1 5B

0 1 0 0 1 1 1 1 4F

0 1 1 0 0 1 1 0 66

0 1 1 0 1 1 0 1 6D

0 1 1 1 1 1 0 1 7D

0 0 0 0 0 1 1 1 07

0 1 1 1 1 1 1 1 7F

0 1 1 0 1 1 1 1 6F

Ya teniendo los valores de cada digito, procedemos a capturar nuestro código en un nuevo
proyecto diseñado en nuestro software MPLAB con la extensión asm, inicialmente debemos
crear variables en las cuales se guardarán registros y debemos configurar nuestros puertos
que usaremos como entradas o salidas, en este caso usamos el PUERTO D.

El programa principal o main debe tener las características del puerto a usar y mover los
datos obtenidos a PORTD, enseguida llamamos a un tiempo para que se logre visualizar la
cifra y cambie en un periodo considerable.

4
Nuestro tiempo lo debemos configurar en las subrutinas como un decremento en la
asignación de un digito a cierta variable de nuestro archivo, al ser compilada nos generara
un archivo HEX el cual debemos cargar a la tarjeta de nuestro micro.

Al ser cargada solo nos queda conectar de acuerdo a las especificaciones del PIC y las
salidas que configuramos.

Código:

;***************************************************************************************************
; This file is a basictemplateforassemblycodefor a PIC18F4550. Copy *
; this file intoyourprojectdirectory and modifyoradd to it as needed. *
; *
; The PIC18FXXXX architectureallowstwointerruptconfigurations. This *
; templatecodeiswrittenforpriorityinterruptlevels and the IPEN bit *
; inthe RCON registermust be set to enableprioritylevels. If IPEN is *
; left in its default zerostate, onlytheinterrupt vector at 0x008 will *
; beused and the WREG_TEMP, BSR_TEMP and STATUS_TEMP variables willnot *
; beneeded. *
; *
; Refer to the MPASM User'sGuideforadditionalinformationonthe *
; features of theassembler. *
; *
; Refer to the PIC18FXX50/XX55 Data Sheetforadditional *
; informationonthearchitecture and instruction set. *
; *
;***************************************************************************************************
; *
; Filename: PlantillaASM *
; Date: 12/01/11 *
; File Version: 1.0 *
; *
; Author: Ing. Alejandro Vicente Lugo Silva *
; Company: Acad. Computación ICE - ESIME Zac. *
; *
;***************************************************************************************************
; *

5
; Files required: P18F4550.INC *
; *
;***************************************************************************************************

LIST P=18F4550, F=INHX32 ;directive to define processor


#include<P18F4550.INC> ;processorspecific variable definitions

;***************************************************************************************************
;Configuration bits

CONFIG PLLDIV = 5 ;(20 MHz crystalon PICDEM FS USB board)


CONFIG CPUDIV = OSC1_PLL2
CONFIG USBDIV = 2 ;Clocksourcefrom 96MHz PLL/2
CONFIG FOSC = HSPLL_HS
CONFIG FCMEN = OFF
CONFIG IESO = OFF
CONFIG PWRT = OFF
CONFIG BOR = ON
CONFIG BORV = 3
CONFIG VREGEN = ON ;USBVoltageRegulator
config WDT = OFF
config WDTPS = 32768
config MCLRE = ON
config LPT1OSC = OFF
config PBADEN = OFF ;NOTE: modifyingthisvalueherewon'thaveaneffect
;ontheapplication. Seethe top of
themain() function.
;By default the RB4 I/O pin isused to
detectifthe

;firmwareshouldenterthebootloaderorthemainapplication
;firmwareafter a reset. In order to do
this, itneeds to
;configure RB4 as a digital input,
therebychangingitfrom
;theresetvalueaccording to
thisconfiguration bit.
config CCP2MX = ON
config STVREN = ON
config LVP = OFF
config ICPRT = OFF ; Dedicated In-CircuitDebug/Programming
config XINST = OFF ; Extended Instruction Set
config CP0 = OFF
config CP1 = OFF
config CP2 = OFF
config CP3 = OFF
config CPB = OFF
config CPD = OFF
config WRT0 = OFF
config WRT1 = OFF
config WRT2 = OFF

6
config WRT3 = OFF
config WRTB = OFF ; Boot Block WriteProtection
config WRTC = OFF
config WRTD = OFF
config EBTR0 = OFF
config EBTR1 = OFF
config EBTR2 = OFF
config EBTR3 = OFF
config EBTRB = OFF
;***************************************************************************************************
;Variabledefinitions
; These variables are onlyneedediflowpriorityinterrupts are used.
; More variables may be needed to store otherspecialfunctionregistersused
; intheinterruptroutines.

cblock 0x20 ;Direccion


var1
var2
var3
endc
;***************************************************************************************************
;Reset vector
; Thiscodewillstartexecutingwhen a resetoccurs.

RESET_VECTOR ORG 0

goto Main ;go to start of maincode

;***************************************************************************************************
;***************************************************************************************************
;Start of mainprogram
; Themainprogramcodeis placed here.
ORG 0x1000
Main ; *** maincodegoeshere **
movlw #0Fh
movwf ADCON1
main movlw #00h
movwf TRISD
movlw #0c0h
call time
movlw H'3F'
movwf PORTD
call time
movlw H'06'
movwf PORTD
call time
movlw H'5B'
movwf PORTD
call time
movlw H'4F'
movwf PORTD

7
call time
movlw H'66'
movwf PORTD
call time
movlw H'6D'
movwf PORTD
call time
movlw H'7D'
movwf PORTD
call time
movlw H'07'
movwf PORTD
call time
movlw H'7F'
movwf PORTD
call time
movlw H'6F'
movwf PORTD
call time
gotomain
; end of main
;***************************************************************************************************
; Start of subrutines
;***************************************************************************************************
time
movlw d'4'
movwf var3
laso3 movlw d'250'
movwf var2
laso2 movlw d'250'
movwf var1
laso nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
decfsz var1
goto laso
decfsz var2

8
goto laso2
decfsz var3
goto laso3
return
;***************************************************************************************************
;End of program
END

Conclusiones:

En un principio se tuvo algunos inconvenientes en el momento de realizar el código, pero después


de revisar más cuidadosamente se corrigieron errores que este contenía.

Esta práctica fue de mucha utilidad ya que fue la primera en la que utilizamos el pic18f4550, con esta
práctica realizamos varios conceptos aprendidos como los retardos (nop) que básicamente son
“datos basura “para tener más tiempo entre una función y otra, también utilizamos los goto que son
“llamadas de función” y nos facilitan demasiado la programación acortando nuestro código.