Você está na página 1de 4

; Cabecera list p=16F628A #include <P16F628A.

inc>

__CONFIG _INTRC_OSC_CLKOUT & _CP_OFF & _CPD_OFF & _WDT_OFF & _MCL RE_ON & _PWRTE_ON & _BOREN_OFF & _LVP_OFF errorlevel -30 ; Bloque de variables

cblock 0x20 Display1 vertido se enviara al Display 1 Display2 vertido se enviara al Display 2 Display3 vertido se enviara al Display 3 DataEnviar go 7 Segmentos a enviar ContBits o de bits endc

; Valor que luego de con ; Valor que luego de con ; Valor que luego de con ; Dato convertido a codi ; Para controlar el envi

; Definir constantes Desc equ 0 Asc equ 1 BClock equ 0 BData equ 1 BReset equ 2 Pto equ 0 indica si se muestra un punto RST t org 0x00 goto Inicio

; ; ; ; ; ;

Definir el botn descendente Definir botn ascendente Pin Clock del 74LS164 Pin Data del 74LS164 Pin Reset del 74LS164 Bit para el punto, con este se ; Vector de Rese

; Salto al inicio del programa

; Tabla de conversin BCD a 7 Segmentos ; Se coloca al inicio para asegurar ubicacin en Pagina

org 0x05 abla para displays ctodo comn BCD7SEG addwf PCL,1

; Lugar del cdigo de la t ; Se incrementa el contador del

programa DT 0xFC , 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xF6 ; Programa principal ; Configuracion de puertos

Inicio bsf movlw movwf movlw idas movwf bcf movlw movwf o digital clrf clrf clrf bsf bcf bsf goto Checar_PB btfss goto btfss goto goto ; Rutinas Descender btfss goto uelte el botn decf movlw subwf btfss goto movlw movwf decf movlw subwf btfss goto movlw movwf decf movlw subwf btfss goto Display1,1 d'255' Display1,0 STATUS,Z RefrescaDisp d'9' Display1 Display2,1 d'255' Display2,0 STATUS,Z RefrescaDisp d'9' Display2 Display3,1 d'255' Display3,0 STATUS,Z RefrescaDisp ; Decrementar Display1 ; Si paso de 0 a 255 ; Decrementar Display2 ; no es 255 ; ; ; ; ; No es 10 ; Si, cargo 9 ; Decrementar Display3 ; Si paso de 0 a 255 ; No es 10 Si, cargo 9 Decrementar Display2 Si paso de 0 a 255 Decrementar Display3 PORTA,Desc $-1 ; Esperar hasta que se s PORTA,Desc Descender PORTA,Asc Ascender Checar_PB ; Checar si RA0 esta a 1 logico ; Checar si RA1 esta a 1 logico ; Verificar nuevamente Display1 Display2 Display3 PORTB,BReset PORTB,BData PORTB,BClock RefrescaDisp TRISB STATUS,RP0 0x07 CMCON ; Pasar del Banco 1 al Banco 0 ; Comparadores analogicos en mod STATUS,RP0 0xFF TRISA 0xF8 ; Pasar del Banco 0 al Banco 1 ; Puerto A como entradas ; 11111000 RB2,RB1,RB0, como sal

; Habilitar el 74LS164 ; Setear el Clock ; Verificar los de botones

movlw d'9' movwf Display3 ; Si, cargar 9 goto RefrescaDisp ;************************************************************************ Ascender btfss PORTA,Asc goto $-1 ; Esperar hasta que se s uelte el botn incf Display1,1 ; Incrementar Display1 movlw d'10' ; Si es 10 resetear e incrementa r Display2 subwf Display1,0 btfss STATUS,Z goto RefrescaDisp ; no es 10 clrf Display1 ; Si, resetear incf Display2,1 ; Incrementar Display2 movlw d'10' ; Si Decena = 10, resetear e inc rementar ;************************************************************************ splay3 subwf Display2,0 btfss STATUS,Z goto RefrescaDisp ; No es 10 clrf Display2 ; Si, resetear incf Display3,1 ; Incrementar Display3 movlw d'10' ; Si es 10 Resetear subwf Display3,0 btfss STATUS,Z goto RefrescaDisp ; No es 10 clrf Display3 ; Si, resetear goto RefrescaDisp ;************************************************************************ RefrescaDisp movfw Display1 call BCD7SEG ; Convertir BCD a cdigo 7 Segment os movwf DataEnviar ; Cargar el dato a enviar devuel to por BCD7SEG call EnviaDato movfw Display2 call BCD7SEG ; Convertir BCD a cdigo 7 Segment os movwf DataEnviar ; Cargar el dato a enviar devuel to por BCD7SEG ; bsf DataEnviar,Pto ; Como ejemplo se puede cargar un punto (Descomentar lnea) enviar call EnviaDato movfw Display3 call BCD7SEG ; Convertimos BCD a cdigo 7 Segme ntos movwf DataEnviar ; Cargamos dato a enviar devuelt o x BCD7SEG call EnviaDato goto Checar_PB

; Envar el dato a los registros de desplazamiento ;******************************************************************************* ************** ; Primero se enva el LSB, luego se va rotando a la derecha y se envan los bits de mayor peso ;******************************************************************************* ************** EnviaDato movlw d'8' ; Nmero de bits a transmitir movwf ContBits EnviaBit ; Comenzar a enviar dato s btfss DataEnviar,0 ; Es un "1" el bit a transmitir? bcf PORTB,BData ; No, transmitir un "0" btfsc DataEnviar,0 ; Es un "1" el bit a transmitir? bsf PORTB,BData ; Si, transmitir un "1" bcf PORTB,BClock ; Clock=0 nop bsf PORTB,BClock ; Clock=1 rrf DataEnviar,1 ; Rotar para enviar el siguiente bit decfsz ContBits,1 ; Comprobar si es el ltimo bit goto EnviaBit ; No es el ltimo bit repite la op eracin return ; Retornar End

Você também pode gostar