You are on page 1of 26

Implementacin de un Analizador Lxico para una mquina expendedora de bebidas.

INDICACIONES: Implementar un analizador lxico, utilizando un traductor finito, para una mquina que suministrade 3 tipos de bebidas en lata: d: Cerveza; e: Gaseosa y f: Agua mineral. El costo de las bebidas esde S/.5, S/.2 y S/.1 respectivamente. Para la compra, la mquina recibe cualquier cantidad demonedas de 3 tipos: a:1 sol, b:2 soles y c:5 soles. El botn R activa la mquina, despus de haberpuesto monedas y seleccionando el producto, obtenindose el producto y el dinero sobrante obien todas las monedas si no alcanzaran para la seleccin efectuada. El lenguaje del autmata es el siguiente: L= (a+b+c)*(d+e+f) R. El funcionamiento de la mquina har tantas transiciones como entrada de monedasexista, luego se debe dar la seleccin del producto y la activacin de la obtencin delproducto, que incluye la devolucin del dinero sobrante. Alfabeto de entrada Te (Monedas ingresadas) y Alfabeto de salida Ts (traduccinMonedassobrantes) son las monedas de los 3 tipos. Los primeros estados son para la introduccin de monedas. El siguiente estado es el de seleccin de la bebida y un estado final donde el botn activa lamquina para obtener la bebida. Adems se considera otro estado final cuando se produce error: Cuando se ingresa una cantidad de monedas que no es mayor o igual que el costo del producto elegido. Cuando se acciona el botn activador sin haber seleccionado una opcin de bebida. La mquina utiliza la funcin de traduccin para la emisin del dinero sobrante: Cuando el monto ingresado supera el costo de la bebida seleccionada. Cuando el monto ingresado no alcanza el total del costo de la bebida seleccionada.

List C=132, W=1, P=16F877, ST=OFF, N=062 Include P16F877.INC Title "Control Logico para Maquina Expendedora de Alimentos"

;Configuracion del integrado: WDT off, CP on, OSC LP, BOR Off, _PWRTE On, LVP Off __Config _CP_ALL & _LVP_OFF & _BODEN_OFF & _WDT_OFF & _PWRTE_ON & _LP_OSC

; ;

#Define PRUEBA #Define OMITLCD

;Omitir rutina de base de tiempo ;Omitir Bit bf del Mdulo LCD

;------------------------------------------------------------------------------; ; ;Perifricos asociados: ; ; ; ; ; ; ; ; ; ; ; ; * Driver para Solenoide #1 * Driver para Solenoide #2 * Teclado Selector de Producto y Ajuste de la Hora. * Sensor de Cancelar Despacho. * Sensor de Modo de Servicio. * Interruptor Selector de Campo de producto a Modificar * Sensor de Moneda 100 Bs. * Sensor de Moneda 500 Bs. * Pantalla LCD 2 x 16. (Puerto C: RC0) (Puerto C: RC1) (Puerto C: RC2) (Puerto B: RB0 a RB7) Data (Puerto E: RE0 a RE2) Control (Puerto A: RA0) (Puerto A: RA1) (Puerto D: RD0 a RD5) (Puerto D: RD6) (Puerto D: RD7) Este programa controla el despacho automtico de Alimentos

; ; ; ; ; ;

* Driver para Solenoide #3 * Driver para Solenoide #4 * Driver para el Compresor del Refrigerador. * Driver para el Solenoide de Monto Vlido.

(Puerto A: RA2) (Puerto A: RA3)

(Puerto A: RA4)

(Puerto A: RA5)

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

;Definir registros de propsito general: Cblock 0x20 REGSEG REGMIN REGHORA REGTIEMPO REGCOMP REGTEMP PRODUCTO CANTPRO1 CANTPRO2 CANTPRO3 CANTPRO4 COSTO1 COSTO2 COSTO3 COSTO4 MONTO ;Contador BCD de segundos ;Contador BCD de minutos ;Contador BCD de horas ;Registro para eventos de segundos ;Registro para evento del Compresor ;Registro de propsito general ;Registro que contiene el producto seleccionado ;Registro de Cantidad del Producto #1 ;Registro de Cantidad del Producto #2 ;Registro de Cantidad del Producto #3 ;Registro de Cantidad del Producto #4 ;Registro Costo del Producto #1 ;Registro Costo del Producto #2 ;Registro Costo del Producto #3 ;Registro Costo del Producto #4 ;Registro Monto Ingresado por el Usuario

CSTATUS REGT_W REGT_STATUS REGT_FSR REGT_INDF Endc

;Registro Indicador de Eventos ;Stack del registro W ;Stack del registro STATUS ;Stack del registro FSR ;Stack del registro INDF

;Definir pines del Puerto A Control de Actuadores: Cblock 0 solend_1 solend_2 solend_3 solend_4 compre solend_c Endc ;Motor para gira del espiral #1 - RA0 ;Motor para gira del espiral #2 - RA1 ;Motor para gira del espiral #3 - RA2 ;Motor para gira del espiral #4 - RA3 ;Compresor para el Refrigerador de Refrescos - RA4 ;Soleiode de Bandeja de Monto Vlido - RA5

;Definir pin del Puerto B Bit Ocupado del Mdulo (LCD BF): bf Equ 7 ;Bit indicador de ocupado del mdulo LCD - RB7

;Definir pines del Puerto C Sensores del Equipo: Cblock 0 selcampo _100bs _500bs Endc ;Interruptor selector de campo a modificar - RC0 ;Sensor de Moneda de 100 Bs - RC1 ;Sensor de Moneda de 500 Bs - RC2

;Definir pines del Puerto D (Teclado): Cblock 0 pdto1 pdto2 pdto3 pdto4 ajthrs ajtmin clr_par puerta Endc ;Seleccin del producto 1 - RD0 ;Seleccin del producto 2 - RD1 ;Seleccin del producto 3 - RD2 ;Seleccin del producto 4 - RD3 ;Ajuste del campo de las horas - RD4 ;Ajuste del campo de los minutos - RD5 ;Interruptor de lmite N.C. Cancelar operacin - RD6 ;Interruptor de lmite N.C. (Servicio) - RD7

;Definir pines del Puertos E (Control LCD): Cblock 0 rs rw ena Endc ;Pin de habilitacin del mdulo LCD - RE0 ;Pin de lectura / escritura del mdulo LCD - RE1 ;Pin de habilitacin del mdulo LCD - RE2

;Definir bit de Control del Registro CSTATUS: Cblock 0 rtc key seg Endc ;Indicador de ciclo de registros del RTC ;Indicador de teclado en uso ;Indicador de evento de 1 segundo

;Definir constantes y variables: PTODATA CNFDATA PTOCTL MOD10MSH MOD10MSL MOD50MSH MOD50MSL MODXSEGH MODXSEGL MOD1SEG MODSEG MODMIN MODHRS Equ Equ Equ Equ Equ Equ Equ Equ Equ PORTB ;Puerto de Datos del mdulo LCD TRISB ;Registro de Configuracin TRIS del Puerto de Datos LCD PORTE ;Puerto de Control del mdulo LCD 0FF 0AE 0FC 0CC 0C0 0 Equ Equ Equ Equ ;Valor del TMR1H para retardo de 10 mseg ;Valor del TMR1L para retardo de 10 mseg ;Valor del TMR1H para retardo de 50 mseg ;Valor del TMR1L para retardo de 50 mseg ;Modulo del TMR1H para retardo de 2 seg ;Modulo del TMR1L para retardo de 2 seg .128 60 60 13 ;Mdulo del TMR0 para 1 seg ;Mdulo del contador de los segundos ;Mdulo del contador de los minutos ;Mdulo del contador de las horas

;******************************* VECTOR DE INICIO ****************************** Org 0 VECINI Goto INICIO

;**************************** VECTOR DE INTERRUPCION *************************** Org 4 VECINT Goto RTC ;Salto a la rutina de Interrupcin

;******************************** MENSAJES ************************************* TXT00 Addwf PCL ;Buscar un caracter del mensaje Identificador

Dt "USB-Vargas",0 TXT01 Addwf PCL ;Buscar un caracter del mensaje de Bienvenida

Dt "** Bienvenido **",0 TXT02 Addwf PCL ;Buscar un caracter del mensaje de Verificacin

Dt "Producto Agotado",0 TXT03 Addwf PCL ;Buscar un caracter del mensaje de Pago

Dt "Inserte Monedas",0 TXT04 Addwf PCL ;Buscar un caracter del mensaje de cancelar

Dt "Pedido Cancelado",0 TXT05 Addwf PCL Dt "Despachando... ",0 TXT06 Addwf PCL Dt "Retire Producto",0 TXT07 Addwf PCL ;Buscar un caracter del mensaje Ajuste Producto ;Buscar un caracter del mensaje Retire Producto ;Buscar un caracter del mensaje Despachando

Dt "#0 Cant:0",7E,"0000Bs",0

;******************** RUTINA DE SERVICIO DE INTERRUPCION *********************** ; ;Call RTC: ; ; RTC Base de tiempo de 1 seg para el RTC. Esta interrupcin provoca que el RTC sea actualizado cada segundo. Nivel de profundidad: 2 Movwf REGT_W Swapf STATUS,w Movwf REGT_STATUS ; ;Carga nuevamente el Temporizador para un proximo evento de la HORA: ;Salva el contenido del registro W ;Salva el contenido del registro STATUS

; Movlw MOD1SEG Movwf TMR0 ; ;Lleva el registro de la Hora en Tiempo Real (RTC). Para ello se ;utilizan los registro REGSEG, REGMIN y REGHORA: ; ;Incrementa un Segundo: ; RTCSEG Incf REGSEG Movlw 06 Addwf REGSEG,w Btfss STATUS,DC Goto SEG100 Movwf REGSEG Movlw 60 Addwf REGSEG,w Btfsc STATUS,C Movwf REGSEG Movlw MODSEG ; SEG100 Movlw 60 Xorwf REGSEG,w Btfss STATUS,Z Goto RTC100 Clrf REGSEG ;Carga W con el valor del mdulo de los segundos ;Verifica la cuanta mxima de los segundos ;REGSEG = 60 ? ;No, continua con el Servicio de Interrupcin ;Si, Coloca el REGSEG a 00 (Segundos a 00) ;Suma 60 al dgito superior SEG para verificar Acarreo ;Acarreo al Bit C ? ;Si, actualiza el contenido del dgito superior SEG ;Carga W con la direccin del Registro de los ;Suma 06 al dgito inferior SEG para verificar Acarreo ;Acarreo al dgito superior SEG ? ;No, Verifica cuenta mxima de los segundos ;Si, actualiza el contenido del dgito inferior SEG ;Incrementar contenido de los Segundos ;Cargar el temporizador TMR0

; ;Incrementa un Minuto: ; RTCMIN Incf REGMIN ;Incrementar contenido de los Minutos

Movlw 06 Addwf REGMIN,w Btfss STATUS,DC Goto MIN100 Movwf REGMIN Movlw 60 Addwf REGMIN,w Btfsc STATUS,C Movwf REGMIN ; MIN100 Movlw 60 ;Carga W con el valor del mdulo de los minutos ;Verifica la cuanta mxima de los minutos ;REGMIN = 60 ? ;No, continua con el Servicio de Interrupcin ;Si, Coloca el REGMIN a 00 (Minutos a 00) ;Suma 60 al dgito superior MIN para verificar Acarreo ;Acarreo al Bit C ? ;Si, actualiza el contenido del dgito superior MIN ;Suma 06 al dgito inferior MIN para verificar Acarreo ;Acarreo al dgito superior MIN ? ;No, Verifica cuenta mxima de los minutos ;Si, actualiza el contenido del dgito inferior MIN

Xorwf REGMIN,w Btfss STATUS,Z Goto RTC100 Clrf REGMIN ; ;Incrementa una Hora: ; RTCHRSIncf REGHORA Movlw 06 Addwf REGHORA,w Btfss STATUS,DC

;Incrementar contenido de la Hora

;Suma 06 al dgito inferior HRS para verificar Acarreo ;Acarreo al dgito superior HRS ?

Goto HRS100 Movwf REGHORA Movlw 60 Addwf REGHORA,w Btfsc STATUS,C Movwf REGHORA ; HRS100 Movlw 13 Xorwf REGHORA,w Movlw 1 Btfss STATUS,Z Goto RTC100 Movwf REGHORA ;

;No, Verifica cuenta mxima de la hora ;Si, actualiza el contenido del dgito inferior HRS

;Suma 60 al dgito superior HRS para verificar Acarreo ;Acarreo al Bit C ? ;Si, actualiza el contenido del dgito superior HRS

;Carga W con el valor del mdulo de la hora ;Verifica la cuanta mxima de la hora

;REGHORA = 13 ? ;No, continua con el Servicio de Interrupcin ;Si, Coloca el REGHORA a 01 (Hora a 01)

;Finaliza la rutina de servicio de interrupcin, levantando el indicador ;de segundo cumplido, decrementando el contenido del registro REGTIEMPO ;y restableciendo los valores de los registros W, STATUS y FSR: ; RTC100 Bsf CSTATUS,seg Decf REGTIEMPO ; ;Decrementa el Temporizador del Ciclo del Compresor: ; Bcf PORTA,compre Decf REGCOMP Btfss STATUS,Z ;Desactiva el Compresor ;Decrementar el Temporizador del Compresor ;Temporizador del Compresor = 0 ? ;Indica 1 segundo cumplido ;Decrementa contador de segundos

Goto RTCFIN Bsf PORTA,compre Movlw .11 Movwf REGCOMP ;

;No, Culmina Rutina de Servicio de Interrupcin ;Si, Activa el Compresor ;Carga nuevamente el Temporizador del Compresor

;Finalizacin de la Rutina de Servicio de Interrupcin del RTC (TIMER0) ; RTCFIN Bcf INTCON,T0IF ;Borrar indicador de Overflow del TMR0

Swapf REGT_STATUS,w ;Recupera el contenido del registro STATUS Movwf STATUS Swapf REGT_W Swapf REGT_W,w Retfie ;Retorna ;Recupera el contenido del registro W

;******************************* SUBRUTINAS ************************************ ;*************************** SUBRUTINAS DE TIEMPO ****************************** ;Call RET10MS: Rutina para realizar un retardo de 10 mseg con la finalizadad de ; ; ; RET10MS establizar o "eliminar" los rebotes producidos por los contactos de los interruptores electromecnicos. Nivel de Profundidad: 1 Movlw MOD10MSH ;Carga Registro TMR1 para retardo de 10 mseg

Movwf TMR1H Movlw MOD10MSL Movwf TMR1L Bcf PIR1,TMR1IF RET10_M Btfss PIR1,TMR1IF ;Borra indicador de desbordamiento del TIMER1 ;Tiempo de rebotes cumplido ?

Goto RET10_M Return

;No, espera ;Si, Retorna

;Call RET100M: Rutina para realizar un retardo de 50 mseg con la finalizadad de ; ; ; RET100M establizar o "eliminar" los rebotes producidos por los contactos de los interruptores electrmecnicos de monedas de 100Bs y 500Bs. Nivel de Profundidad: 1 Movlw MOD50MSH ;Carga Registro TMR1 para retardo de 50 mseg

Movwf TMR1H Movlw MOD50MSL Movwf TMR1L Bcf PIR1,TMR1IF RET50_M Btfss PIR1,TMR1IF ;Borra indicador de desbordamiento del TIMER1 ;Tiempo de rebotes interruptor lmite cumplido ?

Goto RET50_M Return

;No, espera ;Si, Retorna

;Call RETXSEG: Rutina para realizar un retardo con la finalizadad de mantener ; ; ; ; RETXSEG abierta la compuerta del Producto seleccionado mientras este sale del dispensador. Tambien se utiliza para mantener en pantalla los mensajes de advertencia al consumidor. Nivel de Profundidad: 1 Movlw MODXSEGH ;Carga Registro TMR1 para retardo de Solenoide o

Movwf TMR1H Movlw MODXSEGL Movwf TMR1L Bcf PIR1,TMR1IF

;retardo de Mensaje al Consumidor

;Borra indicador de desbordamiento del TIMER1

RETX100

Btfss PIR1,TMR1IF

;Tiempo de Solenoide cumplido ?

Goto RETX100 Return

;No, espera ;Si, Retorna

;Call INCBCD: ; ;

Incrementa en BCD el contenido del registro especificado en la direccin apuntada por FSR. Nivel de Profundidad: 1 ;Incrementar contenido del registro (INDF) ;Verificar el contenido del nibble inferior

INCBCD Incf INDF Movlw 06 Addwf INDF,w Btfss STATUS,DC Return Movwf INDF Movlw 60 Addwf INDF,w Btfsc STATUS,C Movwf INDF Return

;Acarreo al nibble superior ? ;No, retorna. ;Si, actualiza el contenido del nibble inferior ;Verificar el contenido del nibble superior

;Acarreo al bit C ? ;Si, actualiza el contenido del nibble superior ;Retorna

;************************** SUBRUTINAS DEL MODULO LCD ************************** ; ;CNFDATA = Registro de Configuracin TRIS del Puerto de Datos ;PTOCTL = Puerto de Control del mdulo LCD ;PTODATA = Puerto de Datos PORT ; ;

;Call RDBF: ; ; ; RDBF

Lee la bandera de ocupado (busy flag) del mdulo LCD. Esta rutina se utiliza para evitar enviar un dato o comando al mdulo LCD mientras este ocupado. Nivel de Profundidad: 1

Bsf PTOCTL,rw Bsf STATUS,RP0 Movlw 0FF Movwf CNFDATA Bcf STATUS,RP0 Bsf PTOCTL,ena Nop Ifndef OMITLCD

;Operacion de Lectura

;Configurar Puerto de Datos como entrada

;Habilita pantalla LCD

RDBF100

Btfsc PTODATA,bf

;Pantalla ocupada?

Goto RDBF100 Endif Bcf PTOCTL,ena Bsf STATUS,RP0 Clrf CNFDATA Bcf STATUS,RP0 Bcf PTOCTL,rw Return

;Esperar que bf = 0

;Deshabilitar pantalla LCD

;Configurar Puerto de Datos como salida

;Operacion de Escritura

;Call CLKLCD: ;

Genera un impulso de 1 seg para que la pantalla LCD acepte el dato o comando respectivo. ;Habilitar LCD

CLKLCD Bsf PTOCTL,ena Nop

Bcf PTOCTL,ena Return

;Deshabilitar LCD

;Call WRDATA: Envia un dato en formato ASCII cargado en el registro W hacia ; ; WRDATA la pantalla LCD para visualizar o para la CGRAM. Nivel de Profundidad: 2 Bcf PTOCTL,rs ;Modo Comando al LCD ;Colocar valor ASCII o direccin AC en el Puerto ;de Datos Call RDBF Bsf PTOCTL,rs Goto CLKLCD ;Leer BF ;Modo Dato al mdulo LCD ;Generar pulso en pin "E"

Movwf PTODATA

;Call WRCMDO: Envia un comando cargado en el registro W hacia ; ; WRCMDO la pantalla LCD. Nivel de Profundidad: 2 Bcf PTOCTL,rs ;Modo Comando al mdulo LCD ;Colocar codigo de comando en el Puerto de Datos ;Leer BF ;Generar pulso en pin "E"

Movwf PTODATA Call RDBF Goto CLKLCD

;Call TXTINI: ; ; ; ;

Envia el Texto Inicial a la pantalla LCD. En la primera lnea se muestra el Logotipo y la Hora. En la segunda lnea se muestra la invitacin a adquirir el producto. Nivel de Profundidad: 3

;Enviar texto Inicial a la lnea superior en la pantalla LCD: ; TXTINI Movlw 80 Call WRCMDO Clrf REGTEMP TXT000 Movf REGTEMP,w Call TXT00 Xorlw 00 Btfsc STATUS,Z Goto TXT100 Call WRDATA Incf REGTEMP Goto TXT000 ; ;Enviar texto Inicial a la lnea inferior en la pantalla LCD: ; TXT100 Movlw 0C0 Call WRCMDO Clrf REGTEMP TXT200 Movf REGTEMP,w Call TXT01 Xorlw 00 Btfsc STATUS,Z Return Call WRDATA Incf REGTEMP ;Borra apuntador de tabla ;Carga valor de apuntador de caracter ;Busca caracter de texto lnea inferior ;Verificar dato obtenido de texto ;Dato del texto = 00h ? ;Si, Retorna ;No, enva caracter a la lnea inferior ;Si, incrementa apuntador de caracter ;DD RAM 40h, lnea inferior ;Borra apuntador de tabla ;Carga valor de apuntador de caracter ;Busca caracter de texto lnea superior ;Verifica dato obtenido de texto ;Dato del texto = 00h ? ;Si, envia texto a la lnea inferior ;No, enva caracter a la lnea superior ;Si, incrementa apuntador de caracter ;Busca prximo caracter del texto lnea superior ;DD RAM 00h, lnea superior

Goto TXT200

;Busca prximo caracter del texto lnea inferior

;Call TXTAGO: Indica al Usuraio en la segunda lnea que el producto seleccionado ; ; ; ;Enviar texto agotado a la lnea inferior en la pantalla LCD: ; TXTAGO Movlw 0C0 ;DD RAM 40h, lnea inferior se encuentra agotado. Nivel de Profundidad: 3

Call WRCMDO Clrf REGTEMP TXT300 Movf REGTEMP,w Call TXT02 Xorlw 00 Btfsc STATUS,Z Return Call WRDATA Incf REGTEMP Goto TXT300 ;Borra apuntador de tabla ;Carga valor de apuntador de caracter ;Busca caracter TXT02 lnea inferior ;Verifica dato obtenido de texto ;Dato del texto = 00h ? ;Si, Retorna ;No, enva caracter a la lnea inferior ;Si, incrementa apuntador de caracter TXT02 ;Busca prximo caracter TXT02 lnea inferior

;Call TXTINS: ; ; ;

Indica al Usuraio en la segunda lnea que inserte las monedas para pagar el producto seleccionado Nivel de Profundidad: 3

;Enviar texto Inserte Monedas a la lnea inferior en la pantalla LCD: ;

TXTINS Movlw 0C0 Call WRCMDO Clrf REGTEMP TXT400 Movf REGTEMP,w Call TXT03 Xorlw 00 Btfsc STATUS,Z Return Call WRDATA Incf REGTEMP Goto TXT400

;DD RAM 40h, lnea inferior

;Borra apuntador de tabla ;Carga valor de apuntador de caracter ;Busca caracter TXT03 lnea inferior ;Verifica dato obtenido de texto ;Dato del texto = 00h ? ;Si, Retorna ;No, enva caracter a la lnea inferior ;Si, incrementa apuntador de caracter TXT03 ;Busca prximo caracter TXT03 lnea inferior

;Call TXTCNC: Indica al Usuraio en la segunda lnea que la operacin del ; ; ; ;Enviar texto Cancelado a la lnea inferior en la pantalla LCD: ; TXTCNCMovlw 0C0 Call WRCMDO Clrf REGTEMP TXT500 Movf REGTEMP,w Call TXT04 Xorlw 00 Btfsc STATUS,Z Return ;Borra apuntador de tabla ;Carga valor de apuntador de caracter ;Busca caracter TXT04 lnea inferior ;Verifica dato obtenido de texto ;Dato del texto = 00h ? ;Si, Retorna ;DD RAM 40h, lnea inferior despacho del producto ha sido cancelada. Nivel de Profundidad: 3

Call WRDATA Incf REGTEMP Goto TXT500

;No, enva caracter a la lnea inferior ;Si, incrementa apuntador de caracter TXT04 ;Busca prximo caracter TXT04 lnea inferior

;Call TXTDSP: ; ; ;

Indica al Usuario en la segunda lnea que se est efectuando el despacho del producto seleccionado. Nivel de Profundidad: 3

;Envia texto Despachando a la lnea inferior en la pantalla LCD: ; TXTDSP Movlw 0C0 Call WRCMDO Clrf REGTEMP TXT600 Movf REGTEMP,w Call TXT05 Xorlw 00 Btfsc STATUS,Z Return Call WRDATA Incf REGTEMP Goto TXT600 ;Borra apuntador de tabla ;Carga valor de apuntador de caracter ;Busca caracter TXT05 lnea inferior ;Verifica dato obtenido de texto ;Dato del texto = 00h ? ;Si, Retorna ;No, enva caracter a la lnea inferior ;Si, incrementa apuntador de caracter TXT05 ;Busca prximo caracter TXT05 lnea inferior ;DD RAM 40h, lnea inferior

;Call TXTLST: ; ; ;

Indica al Ususario en la segunda lnea que puede retirar el producto seleccionado. Nivel de Profundidad: 3

;Envia texto Retire Producto a la lnea inferior en la pantalla LCD: ; TXTLST Movlw 0C0 Call WRCMDO Clrf REGTEMP TXT700 Movf REGTEMP,w Call TXT06 Xorlw 00 Btfsc STATUS,Z Return Call WRDATA Incf REGTEMP Goto TXT700 ;Borra apuntador de tabla ;Carga valor de apuntador de caracter ;Busca caracter TXT06 lnea inferior ;Verifica dato obtenido de texto ;Dato del texto = 00h ? ;Si, Retorna ;No, enva caracter a la lnea inferior ;Si, incrementa apuntador de caracter TXT06 ;Busca prximo caracter TXT06 lnea inferior ;DD RAM 40h, lnea inferior

;Call TXTSVC: ; ; ;

Indica en la segunda lnea el Modo de Servicio, mostrando la Cantidad y el costo del Prducto #1 por defecto. Nivel de Profundidad: 3

;Envia texto Producto, Cantidad, Costo a la lnea inferior en la pantalla LCD: ; TXTSVC Movlw 0C0 Call WRCMDO Clrf REGTEMP TXT800 Movf REGTEMP,w Call TXT07 Xorlw 00 ;Borra apuntador de tabla ;Carga valor de apuntador de caracter ;Busca caracter TXT07 lnea inferior ;Verifica dato obtenido de texto ;DD RAM 40h, lnea inferior

Btfsc STATUS,Z Return Call WRDATA Incf REGTEMP Goto TXT800

;Dato del texto = 00h ? ;Si, Retorna ;No, enva caracter a la lnea inferior ;Si, incrementa apuntador de caracter TXT07 ;Busca prximo caracter TXT07 lnea inferior

;Call VISRTC: ;

Muestra la hora en la pantalla LCD. Nivel de Profundidad: 4 ;Selecciona el Campo de las Horas en la pantalla

VISRTC Movlw 8B Call WRCMDO Swapf REGHORA,w Andlw 0F Btfss STATUS,Z Addlw 30 Btfsc STATUS,Z Movlw 20 Call WRDATA ; Movf REGHORA,w Call CNVASC Movlw ":" Call WRDATA Swapf REGMIN,w Call CNVASC Movf REGMIN,w Call CNVASC

;Carga el MSD de la Hora ;Codifica a ASCII el valor de MSD de la Hora

;Envia MSD de la Hora a la pantalla

;Carga el LSD de la Hora ;Codifica a ASCII y envia el LSD de la Hora ;Envia separados de Campos a la pantalla

;Carga el MSD de los Minutos ;Codifica a ASCII y envia el MSD de los Minutos ;Carga el LSD de los Minutos ;Codifica a ASCII y envia el LSD de los Minutos

Return

;Call CNVASC: Convierte el LSD (BCD) de un byte cargado en el registro W a ; ; CNVASC cdigo numrico ASCII. Nivel de Profundidad: 3 Andlw 0F ;Borra el MSD del Byte ;Convierte el nmero del LSD (BCD) a Cdigo ASCII

Addlw 30 Call WRDATA Return

;***************** SUBRUTINAS DE RECOPILACION DE INFORMACION ******************* ; ;Call SELPRO: ; ; ; ; ; ; Obtiene del teclado el producto seleccionado, quedando almacenado en el registro PRODUCTO, cuyo valor esta comprendido entre 01H al 04H. Si se detecta una tecla no vlida o error el contenido de PRODUCTO es FFH. El bit KEY ubicado en el registro CSTATUS indica si el teclado esta en uso (1) o libre (0). Nivel de Profundidad: 2 ;Teclado en uso? ;No, verifica teclas de seleccin del producto

SELPRO Btfss CSTATUS,key Goto SPRO100 ; SPRO000 Movf PORTD,w

;Lee el teclado ;Omite teclas SERV, AJTHR y AJTMIN. ;Verifica teclas de seleccin, cancelar (Pulsada) ;Tecla liberada ?

Andlw b'01001111' Xorlw b'01001111' Btfss STATUS,Z

Return Call RET10MS Bcf CSTATUS,key Return ; SPRO100 Movf PORTD,w

;No, retorna con el teclado en uso (key = 1) ;Si, elimina rebote tecla liberada ;Borra indicador de teclado en uso (key = 0)

;Lee el teclado ;Omite teclas SERV, CANCELAR, AJTHR y AJTMIN. ;Verifica teclas de seleccin ;Tecla Pulsada ? ;No, Retorna ;Si, elimina rebote tecla pulsada ;Activa indicador de teclado en uso (key = 1)

Andlw b'00001111' Xorlw b'00001111' Btfsc STATUS,Z Return Call RET10MS Bsf CSTATUS,key SPRO101 Movlw 1

Btfss PORTD,pdto1 Goto SPRO200 Movlw 2 Btfss PORTD,pdto2 Goto SPRO200 Movlw 3 Btfss PORTD,pdto3 Goto SPRO200 Movlw 4 Btfsc PORTD,pdto4 Movlw 0 SPRO200 Return Movwf PRODUCTO ;Producto #4 seleccionado ;Tecla errada ;Producto #3 seleccionado ;Producto #2 seleccionado ;Producto #1 seleccionado

;*******************************************************************************

;**************************** PROGRAMA PRINCIPAL ******************************* ; ;Configuracin inicial del procesador ;Valores Iniciales de los registros SFR a utilizar: ; INICIO Clrf PCLATH Clrf INTCON Clrf TMR0 Clrf TMR1H Clrf TMR1L Clrf PORTA Movlw b'11111111' Movwf PORTD Movwf PORTB Clrf PORTE ;Carga inicial del registro PORTB ;Carga inical del registro PORTE ;RS=0, R/W=0, E=0 Movlw b'00000111' Movwf PORTC Clrf ADCON0 ; ;Configuracin de Puertos, Temporizadores e Interrupciones: ; Bcf STATUS,RP1 ;Seleccionar Banco 1 de la memoria RAM ;Deshabilita Convertidor A/D ;Carga inicial del registro PORTC ;Carga inicial del Registro PORTA ;Carga inicial del Registro PORTD ;Borrar PCH (Pgina ROM 00) ;Deshabilitar todas las interrupciones ;Borrar Temporizador TMR0 ;Borrar Temporizador TMR1

Bsf STATUS,RP0 Clrf PIE1 Clrf PIE2 Movlw b'11010101' Movwf OPTION_REG Movlw b'00000110' Movwf ADCON1 Clrf TRISA Movlw b'11111111' Movwf TRISB Movlw 5 Btfsc STATUS,Z Movwf INDF Goto SVSPRO ;Costo del Producto > 20 (2000 Bs) ? ;Si, Carga el Costo a 5 (500 Bs) ;Visualiza Campos del Producto ;Configura el puerto A como salida ;Configura el puerto B como entrada (por defecto): ;RB7 a RB4 20 (2000 Bs) ;Configurar el Temporizador TMR0: ;Pull-Up On, Clk Int, Prescaler 1:64 ;Configura el Puerto A como Digital ;Deshabilitar Interrupciones de Perifricos

De "Memotronics - Derechos Reservados 2007"

End

http://www.gratistaringa.net/f8/programa-dond-pueda-aplicar-automata-1165959/

You might also like