TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: expertmex en 08 de Diciembre de 2004, 18:45:00
-
Estoy programando mis primeros Pic. 16f877
Tengo la multiplicacion de 2 puertos de (B y C), la salida es el el puerto D.
Mi problema es cuando EL RESULTADO DE la multiplicacion sale mayor a 9 , por el display de 7 segmentos.
Cual es la programación para poder mostral la salida en display de 7segmentos.
ANEXO ES PROGRAMA DE MULTIPLICACION DE 2 PUERTOS B Y C
*************************************************
title "PIC16F877 counting program"
LIST P=16F877
INCLUDE "P16F877.INC"
ORG 0X00 ;reset vector
Goto Start
ORG 0X06
ENTB equ 0x22 ;Variable ocupada dirección 22
ENTC equ 0x23 ;Variable ocupada dirección 23
CONTA1 equ 0x24 ;Variable ocupada dirección 24
RESULD equ 0x26 ;Variable ocupada dirección 26
SUMA equ 0x27 ;Variable ocupada dirección 27
Start
clrw ;clear W register
clrf PORTB ;clear PORTB
clrf PORTC ;clear PORTB
clrf PORTD ;clear PORTD
clrf ENTB
clrf ENTC
clrf CONTA1 ;clr count
clrf SUMA ;clr count
clrf RESULD
CALL ENTRADAPORTB
CALL ENTRADAPORTC
CALL MULTIPLICADOR
CALL SALIDAPORTD
GOTO FIN
ENTRADAPORTB
BSF STATUS,RP0
BCF STATUS,RP1 ;configure PORTB as
MOVLW B"11111111" ;bit7-0 input,
MOVWF TRISB ;
BCF STATUS,RP0
BCF STATUS,RP1
MOVF PORTB,0 ;captura puerto B a registro W
MOVWF ENTB ;Envia los datos del registro W a ENTB
RETURN
ENTRADAPORTC
BSF STATUS,RP0
BCF STATUS,RP1 ;configure PORTC as
MOVLW B"11111111" ;bit7-0 input,
MOVWF TRISC ;
BCF STATUS,RP0
BCF STATUS,RP1
MOVF PORTC,0 ;captura puerto C a registro W
MOVWF ENTC ;Envia los datos del registro W a ENTC
RETURN
MULTIPLICADOR
Movf ENTC,0 ;Envia ENTC a registro W
movwf CONTA1 ;Envia los datos del registro W a CONTA1
CONTADOR
MOVF ENTB,0 ; captura los datos de ENTB al registro W
MOVWF SUMA
ADDWF SUMA,1 ; suma los datos de w y ENTB almacena W
movwf RESULD ; Mueve los datos del registro W a RESULD
Decfsz CONTA1,f ;Resta 1 al contenido de CONTA1
;Si el CONTA1 llega a cero: salta
;La instruccion de GOTO Contador
;Si CONTA1 no llega a cero; ejecuta
;La instruccion GOTO contadfor
goto CONTADOR ;loop
return
SALIDAPORTD
BSF STATUS,RP0
BCF STATUS,RP1 ;configure PORTD as
MOVLW B"00000000" ;bit7-0 output,
MOVWF TRISD ;
BCF STATUS,RP0
BCF STATUS,RP1
MOVF RESULD,0 ; captura los datos de Var1 al registro W
movwf PORTD ; display on Port D datos de W
RETURN
FIN
end
-
OK, debes crearte un convertidor binario BCD para extraer los numeros individuales del resultado, en este mismo foro existen varios convertidores y links a codigo para ese proposito, luego de convertir el numero en datos BCD puedes:
a) sacar los datos usando un 4511 o un 7447, en este caso el multiplexaje te queda mejor que estar usando dos puertos
b) crear tablas de salida (que no son las mismas que el binario) en base al tipo de display que estes usando, si es de anodo comun, entonces un "0" a la salida lo prendera, si es catodo comun un "1" lo hara.
Solo recuerda que depende del lenguaje q estes usando.