list p=16f84 #include p16f84.inc indo equ 00h fsr equ 04h portb equ 06h ;el puerto b esta en la posicion 06h de la ram trisb equ 86h ;regis de config de puerto b esta en la direcc 86h de la ram trisa equ 85h ;regis de config de puerto a esta en la direcc 85h de la ram status equ 03h ;registro de estado esta en la direcc 03h de la ram ;--------------------------------------------------------------------------------- ;se definen las posiciones de memorias de los registros que contendran lo datos en la tabla dato0 equ 0ch dato1 equ 0dh dato2 equ 0eh dato3 equ 0fh dato4 equ 10h dato5 equ 11h dato6 equ 12h dato7 equ 13h dato8 equ 14h dato9 equ 15h tempo1 equ 16h tempo2 equ 17h tempo3 equ 18h ;------------------------------------------------------------------------------- ;los datos corresponden a display de 7 segmentos (de leds) ;se cargan los datos en la tabla, atencion orden RB7-RB6-RB5-RB4-RB3-RB2-RB1-RB0 tabla movlw b'00111111'; decimal 0 movwf dato0 movlw b'00000110' ;decimal 1 movwf dato1 movlw b'01011011' ;decimal 2 movwf dato2 movlw b'01001111' ;decimal 3 movwf dato3 movlw b'01100110' ;decimal 4 movwf dato4 movlw b'01101101' ;decimal 5 movwf dato5 movlw b'01111100' ;decimal 6 movwf dato6 movlw b'00000111' ;decimal 7 movwf dato7 movlw b'01111111' ;decimal 8 movwf dato8 movlw b'01100111' ;decimal 9 movwf dato9 ;comienza el programa principal ;-------------------------------------------------------------------------------- ;definicion de la funcion de los puertos bsf status,5 ;se posiciona en banco1 clrf trisb ;define el portb como salida clrf trisa ;define el porta como salida bcf status,5; se posiciona en banco 0 ;-------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------- ;lectura de datos desde la tabla inicio movlw 0x0c movwf fsr ;carga en fsr la direccion del dato0 ciclo comf indo,0 ;complementa el contenido de indo y lo guarda en w ;esto se hace porque el display es de anodo comun ;si fuera de catodo comun hay que desactivar la instrucc anterior ;y activar la siguiente. movf indo,0 ;mueve el contenido de indo a w que es el apuntado por fsr o sea dato1 movwf portb ;carga w en portb call retardos incf fsr,1 ;incrementa fsr para direccionar al dato siguiente en la tabla movf fsr,0 xorlw 0x16; prueba si el contenido de fsr coincide con 16h, o sea leyo los datos de la tabla btfss status,2 ;prueba si el bit2 de status es 1 o sea bit Z operac dio cero goto ciclo goto inicio ;---------------------------------------------------------------------- ;termino la parte principal del programa, abajo estan las subrutinas ;---------------------------------------------------------------------- ;subrutina retardos retardos clrf tempo1 clrf tempo2 clrf tempo3 retardo1 incf tempo1,1 retardo2 incf tempo2,1 retardo3 incf tempo3,1 btfss tempo3,6 ;para cambiar el tiempo goto retardo3 clrf tempo3 btfss tempo2,6 ;para cambiar el tiempo goto retardo2 clrf tempo2 btfss tempo1,6 ;para cambiar el tiempo goto retardo1 return ;--------------------------------------------------------------------- end