TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: joel06 en 16 de Junio de 2021, 00:19:19
-
porfa ayuden
a) Realizar la variacion del programa para mostrar el dato binario en ya no en un display sino en 8 leds en el Puerto B pero solo se mostrara las decenas y unidades en codigo BCD
; ZONA DE DATOS **********************************************************************
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84A
INCLUDE <P16F84A.INC>
Centenas equ 0x0C
Decenas equ 0x0D
Unidades equ 0x0E
Contador1 equ 0x0F ; Registro utilizado en demora.-
Contador2 equ 0x10 ; Registro utilizado en demora.-
Contador equ 0x11 ; Control de Refresco de Display.-
MuestroU equ 3 ; Para control del 1º Display unidades
MuestroD equ 2 ; Para control del 2º Display decenas
MuestroC equ 1 ; Para control del 3º Display centenas
Numero EQU .235 ; Por ejemplo.
; ZONA DE CÓDIGOS ********************************************************************
ORG 0 ; El programa comienza en la dirección 0.
Inicio
bsf STATUS,RP0 ; Acceso al Banco 1.
clrf TRISA
clrf TRISB ; Las líneas del Puerto B se configuran como salida.
bcf STATUS,RP0 ; Acceso al Banco 0.
Principal
clrf Centenas ; Carga los registros con el resultado inicial.
clrf Decenas ; En principio (Centenas)=0 y (Decenas)=0.
movlw Numero
movwf Unidades ; Se carga el número binario a convertir.
BCD_Resta10
movlw .10 ; A las unidades se les va restando 10 en cada
subwf Unidades,W ; pasada. (W)=(Unidades)-10.
btfss STATUS,C ; ¿(C)=1?, ¿(W) positivo?, ¿(Unidades)>=10?.
goto BIN_BCD_Fin ; No, es menor de 10. Se acabó.
BCD_IncrementaDecenas
movwf Unidades ; Recupera lo que queda por restar.
incf Decenas,F ; Incrementa las decenas y comprueba si llega a
movlw .10 ; 10. Lo hace mediante una resta.
subwf Decenas,W ; W)= (Decenas)-10.
btfss STATUS,C ; ¿(C)=1?, ¿(W) positivo?, ¿(Decenas)>=10?.
goto BCD_Resta10 ; No. Vuelve a dar otra pasada, restándole 10.
BCD_IncrementaCentenas
clrf Decenas ; Pone a cero las decenas
incf Centenas,F ; e incrementa las centenas.
goto BCD_Resta10 ; Otra pasada, resta 10 al número a convertir.
BIN_BCD_Fin
swapf Decenas,W ; En el nibble alto de W también las decenas.
addwf Unidades,W ; En el nibble bajo de W las unidades.
goto Actualizo_Display ; Salto a inicio de mi programa.-
;**** Tabla de conversion BCD a 7 Segmentos ****
; Se coloca al inicio para asegurar ubicación en Pagina.-
; org 0x05 ; Origen del código de tabla.-
BCD7SEG ; retlw b'gfedcba' para display ANODO comun
addwf PCL,1 ; Se incrementa el contador del programa.-
DT 0X40, 0X79, 0X24, 0X30, 0X19, 0X12, 0X02, 0X78, 0X00, 0X10
;**** Se multiplexan los Display ****
Actualizo_Display
movlw .20 ; Cargo Contador = 20
movwf Contador ; Para repeticiones de visualizacion del mismo valor
; durante 150 ms.-
Refresco
movf Unidades,W ; Obtengo codigo de 7 Segmentos para Unidad.-
call BCD7SEG ;
bcf PORTA,MuestroC ; Apago Display de Centena, Se entiende al mirar rutina.-
movwf PORTB ; Cargo unidad en PORTB.-
bsf PORTA,MuestroU ; Enciendo Display de Unidad.-
call Demora_5ms
movf Decenas,W ; Obtengo codigo 7 Segmentos para Decena.-
call BCD7SEG
bcf PORTA,MuestroU ; Apago Display de Unidad.-
movwf PORTB ; Cargo PORTB con Decena.-
bsf PORTA,MuestroD ; Enciendo Display de Decena.-
call Demora_5ms
movf Centenas,W ; Obtengo codigo de 7 Segmentos para Centena.-
call BCD7SEG
bcf PORTA,MuestroD ; Apago Display de Decena.-
movwf PORTB ; Cargo PORTB con Centena.-
bsf PORTA,MuestroC ; Enciendo Display Centena.-
call Demora_5ms
decfsz Contador,F ; Pregunto si ya se ha repetido 10 veces el ciclo?
goto Refresco ; No, repito.-
goto Actualizo_Display ; Si, actualizo cuenta.-
;**** Demora ****
Demora_5ms
movlw .05 ;
movwf Contador1 ; Iniciamos contador1.-
Repeticion1
movlw .249 ;
movwf Contador2 ; Iniciamos contador2
Repeticion2
nop
decfsz Contador2,1 ; Decrementa Contador2 y si es 0 sale.-
goto Repeticion2 ; Si no es 0 repetimos ciclo.-
decfsz Contador1,1 ; Decrementa Contador1.-
goto Repeticion1 ; Si no es cero repetimos ciclo.-
return ; Regresa de la subrutina.-
END ; Fin del programa.
-
Hola Joel.
¿Y cuál es el problema?
-
porfa ayuden
....... copypaste........
Ayuda a que te ayuden. Describí lo que te está pasando.
-
Sacando gran parte del programa que tiene y escribiendo 3 instrucciones y listo... Ya tendria su programa ...
Pero si ese programa no lo hizo el usuario, entonces no va a tener idea de que hacer..
-
Joel ni se volvió a conectar.
Evidentemente es el típico usuario que entra en cada foro y hace la misma pregunta.