AÑO DEL CENTENARIO DE MACHU PICCHU PARA EL MUNDO

PROFESOR: CESAR QUISPE

CURSO: MICROPROCESADORES Y MICROCONTROLADORES

PROYECTO: RELOJ DIGITAL CON PIC 16F84A

ALUMNOS: SINCHE ROMERO, Jesús Miguel VASQUEZ QUINTANA

2011

Es bien sabido que existen muchas formas de llegar a algo en concreto.-COMPONENTES: PIC 16f84a Resistores: 10k.El circuito es un sencillo reloj digital el cual utiliza muy pocos componentes. El pulsador se utiliza para ajustar la hora y poner el circuito en marcha. en este proyecto se ha utilizado un oscilador externo un cristal de 4MHz el cual fija la frecuencia base y entrega los pulsos de reloj.INFORME DE RELOJ DIGITAL CON PIC 16f84a 1. al hacer el programa para que solo funcione con el oscilador internoes más exacto. pero también podría haber utilizado el oscilador interno del pic (modificando el programa) para evitar utilizar este componente.DESCRIPCION.. 220 Crystal 4 MHz Condensador 22pF Pulsadores LCD 1602b Switch 3. 2.-DIAGRAMA DEL CIRCUITO: LCD1 LM016L VSS VDD VEE RS RW E 4 5 6 C1 22pF 7 8 9 10 11 12 13 14 1 2 3 D0 D1 D2 D3 D4 D5 D6 D7 R3 X1 C2 22pF CRYSTAL U1 16 15 4 OSC1/CLKIN OSC2/CLKOUT MCLR RA0 RA1 RA2 RA3 RA4/T0CKI RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7 PIC16F84A 17 18 1 2 3 6 7 8 9 10 11 12 13 220 1 R1 10k R2 10k .

-DIAGRAMA DE FLUJO: .4.

EXP .MINUTO_INC .

HORA_INC .

MINUTO_INC .

.-CODIGO EMPLEADO: List P=16f84a INCLUDE "P16F84A...F ..W STATUS.W STATUS.2 HORA2.F .6 SEGUNDO2.RP0 #DEFINE BANCO1 BSF STATUS.Z REP MINUTO1 MINUTO2..Z REP HORA1 XXX EXP HORA1.INC" __CONFIG _XT_OSC & _CP_OFF & _PWRTE_ON & _WDT_OFF #DEFINE BANCO0 BCF STATUS.Z REP HORA1 .F .v XX.6 MINUTO2.4 BANCO0 clrf PORTA clrf PORTB clrf SEGUNDO1 clrf SEGUNDO2 clrf MINUTO1 clrf MINUTO2 clrf HORA1 clrf HORA2 CALL LCD_UP CALL LCD_INI movlw 0x05 call LCD_SETDDADDRESS MOVLW 'P' CALL LCD_WRITEDATO MOVLW 'I' CALL LCD_WRITEDATO MOVLW 'C' CALL LCD_WRITEDATO MOVLW ':' CALL LCD_WRITEDATO REP call movlw xorwf btfsc goto goto X incf movlw xorwf btfss goto clrf goto XX incf movlw xorwf btfss goto clrf ..Z REP SEGUNDO2 MINUTO1.W STATUS.Z REP SEGUNDO1 SEGUNDO2.W STATUS.W STATUS..F .F .4 HORA1.10 MINUTO1.5.10 HORA1.3 bsf TRISA.W STATUS..Z REP MINUTO2 ORG 0X00 INICIO BANCO1 bsf TRISA...F .RP0 #DEFINE LCD_CTRL PORTA #DEFINE LCD_DATA PORTB RUTINAS SEGUNDO1 SEGUNDO2 MINUTO1 MINUTO2 HORA1 HORA2 TIEMPO CAMBIOHORA LCD_LM EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU 0x0C 0x0F 0x10 0x11 0x12 0x13 0x14 0x15 0X16 0X17 incf movlw xorwf btfss goto clrf incf movlw xorwf btfss goto clrf incf movlw xorwf btfss goto clrf incf movlw xorwf btfss goto clrf SEGUNDO1.f HORA1.Z X.10 SEGUNDO1.W STATUS.

3 HORA2.W LCD_TABNUM LCD_WRITEDATO movf SEGUNDO1.1 MINUTO1.Z EXP3 HORA1 XXX3 HORA2.W STATUS.goto XXX incf movlw xorwf btfss goto clrf goto XXX HORA2.F .W LCD_TABNUM LCD_WRITEDATO XX2 .f HORA1.3 HORA2.W STATUS.F .v XX2....W LCD_TABNUM LCD_WRITEDATO HORA1.F EXP2 X1 movlw xorwf btfsc goto goto incf movlw xorwf btfss GOTO clrf goto .4 $-.4 RUTINA_C PORTA.Z REP HORA2 REP call CALL LCD_TABNUM LCD_WRITEDATO return HORA_INC btfss GOTO PORTA.250 MOVWF TIEMPO EXP2 movlw call btfss GOTO btfss GOTO decfsz goto EXP3 movlw call movf call CALL movf call CALL movlw CALL movf call CALL 0x45 LCD_SETDDADDRESS HORA2.2 HORA2.1 EXP MOVLW .W GOTO MINUTO_INC btfss GOTO incf movlw xorwf btfss GOTO EXP3 PORTA.10 HORA1.W STATUS...4 HORA1.W LCD_TABNUM LCD_WRITEDATO ':' LCD_WRITEDATO MINUTO2.W STATUS.W STATUS..Z X1.4 MINUTO_INC TIEMPO.Z EXP3 HORA1 XXX3 incf movlw xorwf btfss GOTO clrf goto XXX3 incf movlw xorwf btfss GOTO clrf HORA1.Z EXP3 .3 HORA_INC PORTA..F .3 $-.F ..10 MINUTO1.Z EXP3 HORA2 CALL call CALL movf MINUTO1..F .W call LCD_TABNUM CALL LCD_WRITEDATO movlw ':' LCD_WRITEDATO movf SEGUNDO2.W STATUS..

¿Hay más caracteres? Return call LCD_WRITEDATO .2 .Recupera posicion de la tabla call LCD_TABLA .E=0 return LCD_INI call RUTINA_C más de 15ms movlw B'00111000' caracteres de 5x7 call LCD_COMAND movlw 0x05 movlw 0x0F .Cursor a Home goto LCD_COMAND B'00000010' .Desplazamiento sobre la tabla LCD_CLEAR movlw B'00000001' .Datos de 8 bits.Registro temporal de posicion de la .6 MINUTO2.Datos de 8 bits.Z EXP3 MINUTO2 EXP3 #define ENABLE bsf LCD_CTRL.Borra LCD y cursor a Home goto LCD_COMAND LCD_HOME movlw .0 .RS=0 ESCRIBIR .después de este punto no podran ser cambiados N ni F movlw B'00000100' .Espera un poco temporal del call RUTINA_C .(Especificacion de Fabricante) movlw B'00111000' .110 call RUTINA_A .Siguiente caracter goto M_E_N_S . 2 lineas y caracteres de 5x8 call LCD_COMAND movlw B'00001000' .1ms. 2 lineas y caracteres de 5x8 call LCD_COMAND movlw .RA0=RS RA1=R/W RA2=E salidas digitales BANCO0 bcf INTCON.110us > 100us.Desactiva #define LEER bsf LCD_CTRL.Pone LCD en Modo WR #define DATO bsf LCD_CTRL.clrf incf movlw xorwf btfss GOTO clrf GOTO MINUTO1 MINUTO2.Registro Endc SUBRUTINAS DEL LCD LCD_UP BANCO1 clrf LCD_DATA .2 .GIE .0 .RB <0-7> salidas digitales movlw B'11111000' andwf LCD_CTRL.Cursor apagado y Display prendido goto LCD_DISPCURSCONT LCD_MENSAJE movwf LCD_TEMP1 .Z .1 btfsc STATUS.0 .5ms > 4.Activa RS (modo dato) cblock LCD_TEMP1 tabla LCD_TEMP2 caracter ASCII LCD_LM .1 .1 .Repite con siguiente caracter LCD_TABLA movwf PCL .(Especificacion de Fabricante) movlw B'00111000' .F .R/W=0 DISABLE .Guarda el caracter movf LCD_TEMP2.Visualiza en el LCD el caracter incf LCD_TEMP1.b3 y b2 puedn ser cambiados para otra configuración call LCD_FUNCIONSET .1 .Desactivar interrupciones COMANDO .Salvaposicion de la tabla M_E_N_S movf LCD_TEMP1.Datos de 8 bits.Pone LCD en Modo RD #define ESCRIBIR bcf LCD_CTRL.W STATUS. 2 lineas y .Busca caracter de salida movwf LCD_TEMP2 .Activa E #define DISABLE bcf LCD_CTRL.Desactiva RS (modo comando) #define COMANDO bcf LCD_CTRL.F .

Valor a escribir en la DDRAM o CGRAM call LCD_BUSY DATO goto LCD_E .Chequea bit de Busy goto $-1 DISABLE BANCO1 clrf LCD_DATA .Nos quedamos con b5-b4-b3-b2-b1-b0 iorlw 0x40 .Incorporamos el bit de función goto LCD_COMAND ------------------------------------------------------------------------LCD_SETDDADDRESS iorlw 0x80 .Incorporamos el bit de función goto LCD_COMAND ------------------------------------------------------------------------LCD_DISPCURSCONT andlw 0x07 .Nos quedamos con b1-b0 iorlw 0x04 .1 .Incorporamos el bit de función goto LCD_COMAND ------------------------------------------------------------------------LCD_DISPCURSSHIFT andlw 0x0C .Incorporamos el bit de función goto LCD_COMAND ------------------------------------------------------------------------LCD_READAC call LCD_BUSY LEER BANCO1 comf LCD_DATA.Valor leido de la DDRAM o CGRAM DISABLE BANCO1 clrf LCD_DATA BANCO0 ESCRIBIR COMANDO return ------------------------------------------------------------------------LCD_TABNUM addwf PCL.Puerto B como entrada BANCO0 ENABLE nop btfsc LCD_DATA.0 .Puerto B como entrada BANCO0 ENABLE nop movf LCD_DATA.Genera pulso de E ------------------------------------------------------------------------LCD_READDATO call LCD_BUSY DATO LEER BANCO1 comf LCD_DATA.Puerto B como salida BANCO0 ESCRIBIR return .Nos quedamos con b3-b2 iorlw 0x10 .Nos quedamos con b2-b1-b0 iorlw 0x08 .LCD_ENTRYMODE andlw 0x03 .0 andlw 0x7F .Puerto B como entrada BANCO0 ENABLE nop movf LCD_DATA.1 dt "0123456789ABCDEF" SUBRUTINAS INTERNAS DEL LCD LCD_BUSY: LCD_BUSY Lectura del FlagBusy y la direccion.Incorporamos el bit de función goto LCD_COMAND ------------------------------------------------------------------------LCD_SETCGADDRESS andlw 0x3F . LEER BANCO1 comf LCD_DATA.7 .1 .Valor de la dirección de la DDRAM o CGRAM DISABLE BANCO1 clrf LCD_DATA BANCO0 ESCRIBIR return ------------------------------------------------------------------------LCD_WRITEDATO movwf LCD_DATA .1 .

call LCD_BUSY goto LCD_E .W TEMPORIZACION B'11010001' OPTION_REG TMR0 INTCON.LCD_COMAND: Escritura de comandos del LCD W = Codigo de comando para el LCD W ==> LCD_DATA LCD_COMAND movwf LCD_DATA Codigo de comando. b0.------------------------------------------------------------------------.4-7 : sin importancia LCD_FUNCIONSET andlw 0x0C .F RUTINA_G TEMPORIZACION. El modo de control deseado deberá cargarse en los 2 bits terceros de W: .1.Desactiva E COMANDO Return ------------------------------------------------------------------------. BLOQUE DE ETIQUETAS decfsz goto return RUTINA_C RUTINA_1.LCD_FUNCIONSET: Configura ela fuente del caracter y número de lineas.T0IF RUTINA_E RUTINA_1.W RUTINA_C B'11010011' OPTION_REG RUTINA_2 INTCON.W OPTION_REG .Nos quedamos con b3-b2 (DL no se cambia) iorlw 0x30 .Inicio de las variables.C RUTINA_1.LCD_E: Pulso de Enable LCD_E ENABLE nop DISABLE . x xxx b3 b2 x x .F RUTINA_H RUTINA_1. b2 : 0 = caracter de 5x7 1 = de 5x10 . La primera dirección libre disponible RUTINA_1 RUTINA_2 TEMPORIZACION ENDC RUTINA_A movwf bcf rrf bcf rrf RUTINA_B RUTINA_1 STATUS.T0IF INTCON.F RUTINA_D TEMPORIZACION.1 STATUS.F RUTINA_B RUTINA_D RUTINA_E movwf BANCO1 movf movwf movlw movwf BANCO0 clrwdt clrf bcf btfss goto decfsz goto BANCO1 movf movwf BANCO0 return RUTINA_1 OPTION_REG.Incorporamos el bit de función y 8 bits goto LCD_COMAND .Genera pulso de E ------------------------------------------------------------------------. No se cambia DL . b3 : 0 = display de 1 linea 1 = de 2 lineas .T0IF RUTINA_I RUTINA_2.T0IF TMR0 INTCON.W OPTION_REG RUTINA_F RUTINA_G RUTINA_H RUTINA_I CBLOCK RUTINAS .C RUTINA_1.1 nop movwf BANCO1 movf movwf movlw movwf BANCO0 clrf clrwdt bcf clrf btfss goto decfsz goto decfsz goto BANCO1 movf movwf BANCO0 return END RUTINA_1 OPTION_REG.

blogspot.wanadoo.com.es/pictob/ensamblador.html electronicatuxtla.com/2010/04/reloj-digital-con-displays-de-7.com/...com/Download02.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programaspic16f84a-y-pic16f628a/15/ www.fortunecity.6./CA1602B-Datasheet-16x2-Character-LCD-module.htm .-FUNTE DE INFORMACION: http://www.html http://members.php http://perso.es/electronico/reloj.ucontrol.pdf http://rolandopalermo.mmtelec.

Sign up to vote on this title
UsefulNot useful