Sie sind auf Seite 1von 4

Circuito del reloj digital con PIC

Circuito del reloj digital con PIC 16F877A y display de 7 segmentos. La hora se muestra en formato 1 !"# $dos de la tarde y "# minutos%. &ispone de 'otones para ajuste de horas y minutos. (n 'ot)n adicional permite acti*ar la presentaci)n $encender el display% por un lapso de 1 segundo. Luego de lo cual el display se apaga pero el conteo del tiempo sigue corriendo. (n pin se acti*a por un lapso de 1 segundo a dos horas diferentes programa'les por soft+are. Para ,ue los proyectos funcionen correctamente el PIC16F877A se tiene ,ue polari-ar de acuerdo al es,uema indicado en la polari-aci)n '.sica $*er lin/ m.s a'ajo%.

Cdigo en lenguaje C (mikroC PRO) A continuaci)n se muestra el c)digo completo para este reloj digital0 con el PIC16F877A tra'ajando con el cristal oscilador e1terno de 23-. Luego de *arios intentos fallidos de simulaci)n en Proteus I4I4 pude compro'ar ,ue el pro'lema se de'e a un error generado por el propio simulador0 para eso me *al5 de un ejemplo muy sencillo con el cual pude comparar los resultados e1perimentales y simulados. Aparentemente falta depurar esta *ersi)n del famoso simulador pues presenta pro'lemas con el puerto 6.

//reloj7seg.c //Microcontrolador: PIC16F877A //Oscilador: Externo 4M ! "#odo $% //&&&&&& //El Prote's 7.( Pro)essional no ace*ta la si#'laci+n del *'erto E , *resenta 'n #ensaje de error //al intentar s' si#'laci+n. $e *ro-+ 'n eje#*lo -.sico *ara encender 'n /E0 el c'al //)'ncion+ *er)ecta#ente en la *r.ctica *ero el Prote's genera-a el error 1Internal Exce*tion: //acces 2iolation in #od'le PIC16.0//1. //&&&&&& //Entradas: //AA: A2ance A'to#.tico al #antener *resionado "ta#-i3n a2ance *aso a *aso al *'lsar , soltar%. //Aj'ste de O4A$ "AA% 56477"48% //Aj'ste de MI9:;O$ "AA% 564C7"<6% //AC;I=A4 56407">8% //$alidas: // oras 56 P'ertos A , 7 //Min'tos 56 P'ertos C , 0 //0os *'ntos ":% 564E1"?% //P'lso de 1 seg'ndo 56 4E8"8% //F'nci+n *ara trans)or#ar de -inario"deci#al% a 7 seg#entos: c@ar 7in<A7seg"c@ar digit%B sCitc@ "digit%B

E E

case case case case case case case case case case

8: 1: <: >: 4: (: 6: 7: 8: ?:

ret'rn ret'rn ret'rn ret'rn ret'rn ret'rn ret'rn ret'rn ret'rn ret'rn

8x>FD 8x86D 8x(7D 8x4FD 8x66D 8x60D 8x70D 8x87D 8x7FD 8x67D

//8x>F es el c+digo 75seg#entos del 8. //8x86 es el c+digo 75seg#entos del 1.

c@ar contadorF8Gseg'ndosF8G#in'tosF8G@orasF8G decenasG @oras7C0G jF8D -it acti2arD

#in'tos7C0G

'nidadesG

2oid #ain"%B PO4;AF8x88D 4E8A-itF8D 4E1A-itF8D A0CO91F8x86D //Pines 4AH(:86 co#o E/$ digital. PO4;7F8x88D //Iniciali!aci+n. PO4;CF8x88D PO4;0F8x88D ;4I$AF8x88D //P'erto A co#o salida. ;4I$7F8x88D //477 co#o entrada. 47H6:86 co#o salidas. ;4I$CF8x88D //4C7 co#o entrada. 4CH6:86 co#o salidas. ;4I$0F8x88D //407 co#o entrada. 40H6:86 co#o salidas. ;4I$E8A-itF8D //4E8 co#o salida. ;4I$E1A-itF8D //4E1 co#o salida. OP;IO9A4EIF8-81818111D //P'll '*s @a-ilitados.;i#er8 co#o te#*ori!ador. //Prescaler asignado al ;i#er8. Prescaler 1:<(6. ;M48F61D cada (8 #s. IIEA-itF1D ;8IEA-itF1D acti2arF1D C@ile "1%B i) "seg'ndosFF68%B #in'tosJJD seg'ndosF8D E i) "#in'tosFF68%B @orasJJD #in'tosF8D E i) "@orasFF<4% @orasF8D //Encender los dis*la,s *or 1 seg'ndo al *resionar AC;I=A4: i) "acti2arFF1%B //Encender los dos *'ntos 1:1 : 4E1A-itF1D //;rans)or#ar los #in'tos *ara s' *resentaci+n: #in'tos7C0F0ec<7cd"#in'tos%D //;rans)or#a de -inario a 7C0. //=alor inicial del ;M48. Interr'*ci+n //Interr'*ciones @a-ilitadas. //Interr'*ci+n del ;i#er8 @a-ilitada.

'nidadesF8-1111K#in'tos7C0D decenasF8-11118888K#in'tos7C0D decenasFdecenas664D derec@a. PO4;0F7in<A7seg"'nidades%D PO4;CF7in<A7seg"decenas%D

//$acar las 'nidades. //$acar las decenas. //0es*la!ar 4 -its a la //:nidades al *'erto 0. //0ecenas al *'erto C.

//;rans)or#ar las @oras *ara s' *resentaci+n: @oras7C0F0ec<7cd"@oras%D //;rans)or#a de -inario a 7C0. 'nidadesF8-1111K@oras7C0D //$acar las 'nidades. decenasF8-11118888K@oras7C0D //$acar las decenas. decenasFdecenas664D //0es*la!ar 4 -its a la derec@a. PO4;7F7in<A7seg"'nidades%D //:nidades al *'erto 7. i) "decenasFF1% PO4;AF7in<A7seg"decenas%D //0ecenas al *'erto A. i) "decenasFF<% PO4;AF8x>7D //For#ar el nL#ero 1<1. i) "decenasFF8% PO4;AF8D //A*agar las decenas c'ando 2algan cero. E elseB PO4;AF8D PO4;7F8D PO4;CF8D PO4;0F8D PO4;EF8D E //Ienerar 'n *'lso a 'na deter#inada @oraG *or eje#*lo a las <@81. i) "@orasFF< KK #in'tosFF81 KK seg'ndosFF8% 4E8A-itF1D i) "@orasFF< KK #in'tosFF81 KK seg'ndosFF1% 4E8A-itF8D //Ienerar 'n *'lso a 'na deter#inada @oraG *or eje#*lo a las 1(@<(. i) "@orasFF1( KK #in'tosFF<( KK seg'ndosFF8% 4E8A-itF1D i) "@orasFF1( KK #in'tosFF<( KK seg'ndosFF1% 4E8A-itF8D

E E

2oid interr'*t"2oid%B //7ot+n O4A$ *resionado: i) "7'tton"KPO4;7G7G1G8%%B acti2arF1D @orasJJD i) "@orasFF<4% @orasF8D 0ela,A#s"<88%D E //7ot+n MI9:;O$ *resionado: i) "7'tton"KPO4;CG7G1G8%%B acti2arF1D #in'tosJJD i) "#in'tosFF68% #in'tosF8D 0ela,A#s"<88%D E //7ot+n AC;I=A4 *resionado:

i) "7'tton"KPO4;0G7G1G8%% acti2arF1D //Medir 1 seg'ndo "*ara el encendido de los dis*la,s%: i) "acti2arFF1%B jJJD i) "jFF<8%B jF8D acti2arF8D E E //Medidor de seg'ndos "*ara el reloj%: ;M48F61D //=alor inicial del ;M48. Interr'*ci+n cada (8 #s. contadorJJD i) "contadorFF<8%B seg'ndosJJD contadorF8D E ;8IFA-itF8D //7orra la -andera de interr'*ci+n. E

Circuito del reloj digital con PIC

Informacin complementaria

Das könnte Ihnen auch gefallen