TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: sergioneri en 08 de Febrero de 2008, 04:03:02
-
saludos eee espera a ver si me ayudaban es ke miren tengo ke hacer un programa en el ke sume 4 bits + 4 bits dentro de el puerto b pero las operaciones se guardaran en variables y el resultado en el puerto a pero no lleov casi nada aunke si tengo idea pero la cosa es ke no se guardar las operaciones en el puerto c espero ke me puedan ayudar se los agredeceria las operaciones son sumar y restar saludos y gracias
-
Bienvenido Sergioneri al Foro Todopic!!!!!
Por favor ante de publicar una pregunta usa el Buscador y si no encuentra lo que busca entonce Publicalas,
por favor usa el Buscador
-
:shock: :shock: :shock: eeee saludos eee si pero ya trate y no logro encontrar lo ke necesito intente con el numero del pic omplab pero no encontre pero gracias por avisarme
-
No se si podría ayudarte....porq soy nuevillo...pero no acabo de entender lo que necesitas.
De donde lees los valores???puertaB uno o los dos???donde quieres reflejarlo en la A o C???
-
Hola Sergio. Lo primero sería pedirte que escribas más prolijo, usa las "," (coma) y "." (punto) para separar las frases y oraciones. Recuerda que los que estamos del otro lado, tenemos que entender lo que escribiste y luego entender tu problema para darte la solución.
Lo segundo, no puedes guardar nada en ningún puerto, solo lo puedes reflejar o enviarlo. Pero no lo puedes usar como memoria.
Tercero, esto es lo que entendí del problema: sumar dos números de 4 bit cada uno. Las operaciones se guardan en variables (o sea en la RAM) y el resultado mostrarlo por el puerto a. Lo que no logro entender es que haces con el puerto b y c. Si no me equivoco, de aquí obtenes los valores a sumar. O sea,el valor que hay en el puerto b se lo sumo al valor que hay en el puerto c. ¿Esto es correcto?
-
Parece que los 4 bits con los otros 4 bits a sumar estan en el mismo puerto B (o algo asi) si este es el caso podrias hace algo como esto:
clrf Reg_Resultado
clrf MS_PORTB
clrf LS_PORTB
;
movf PORTB,w
andlw H'0F'
movwf LS_PORTB ;coges 4 bits parte baja
;
movf PORTB,w
andlw H'F0'
movwf MS_PORTB ;coges 4 bits parte alta
;
swapf MS_PORTB,w
addwf LS_PORTB ;sumas ambos nibles
movwf Reg_Resultado ;el resultado si deseas lo llevas al puertoC o usalo como desees
Otra forma tal vez podria ser:
clrf Reg_Resultado
clrf LS_PORTB
;
movf PORTB,w
andlw H'0F'
movwf LS_PORTB ;coges 4 bits parte baja
;
swapf PORTB,w
andlw H'0F'
addwf LS_PORTB
movwf Reg_Resultado ;en este registro "Reg_Resultado" está el resultado
eee espero haberte ayudado en algo ;)
Javicho.
-
aaaaaa si perdon y gracias por ayudarme se los greadesco en serio miren la cosa es asi que en el puerto b tengo 8 bits pero quiero que se sumen o resten 4 bits del mismo puerto b (-menos o +mas) como sea el caso entre los otros 4 bits ke kedaron denttro del puerto b pero las operaciones sumar o restar se tienen ke guardar en variables dentro del puerto c y el resulatado de la suma o resta ke se hayya realizado en el puerto b se reflejara en el puerto a o guardara no se komo decirlo
espero ke me hayan entendido y de nuevo gracias a todos
-
Bueno. Te vuelvo a repetir. No se puede guardar datos en los puertos sea el puerto a, b o c.
Para hacer lo que quieres debes modificar el programa que te envió Javicho para tus propósitos. Pero ahora logro entenderte.
Tu quieres que la suma o resta del puerto b entre los bit más significaivos y los 4 bit menos significativos del mismo puerto b, se refleje o muestre en el puerto a, ahora el mismo valor va hacer reflejado o mostrado en el puerto c.
-
denle una mirada a: ¿Sabías que... (http://www.todopic.com.ar/foros/index.php?topic=14812.msg91150#msg91150)
-
aaa si pero no se como decirlo no guardar sino solo representtarlo y si no me etendieron en b se agarran 4 bits + 4 bits del mismo puerto y las operacion de suma y resta se guardan en variables y se representan en el puerto c y el resultado se guarda en el puerto a se llama miren tengo este ejemplo pero tiene ke realizar los mismo solo ke lo ocupo con otras instrucciones
;iNSTRUCCIONES:
;CONFIGURAR PUERTOB COMO ENTRADA
;CONFIGURAR PUERTOC COMO ENTRADA:
;RC0=ADD
;RC1=SUB
;RC2=XOR
;RC3=OR
;RC4=AND
;RC5=COMPLEMENTO <0:3>
;RC6=EJECUTAR OP.
;PORTA = PUERTOB<0:3> OPERACION PUERTOB<4:7>
LIST p=16F877A ; Tipo de procesador PIC16F877A
#include "P16F877A.inc" ; Archivo de definicion de registros del micro
; Palabra de configuracion
__config _CP_OFF & _DEBUG_OFF & _WRT_OFF & _CPD_OFF & _LVP_ON & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
org 0x00
goto main
org 0x04
main
;***************CONFIGURACION DE PUERTOS*****************
;CAMBIAMOS AL BANCO 1 DONDE SE ENCUENTRA TRISB
BSF STATUS,RP0 ; base de datos es 0
BCF STATUS,RP1 ; base de datos es 1
;CONFIGURA EL PUERTOB COMO ENTRADA
MOVLW 0XFF
MOVWF TRISB
;CONFIGURA EL PUERTOC COMO ENTRADA
MOVWF TRISC
CLRW
;CONFIGURAMOS EL PUERTOA COMO DIGITAL
MOVLW B'00000110'
MOVWF ADCON1
;CONFIGURA EL PUERTOA COMO SALIDA
CLRF TRISA
;CAMBIAMOS DE NUEVO AL BANCO 0
BCF STATUS,RP0
BCF STATUS,RP1
;****************BUSCANDO OPERACION A REALIZAR****************
@1 BTFSS PORTC,6 ; BTFSS checa f en el bit 6 x un 1
GOTO @1 ; si es 1 se brinca una instrucion y se va al siguiente
@2 BTFSS PORTC,0 ; checa si hay un 1 y si lo hay ejecuta ADD
GOTO @3
CALL ADD
@3 BTFSS PORTC,1
GOTO @4
CALL SUB
@4 BTFSS PORTC,2
GOTO @5
CALL XOR
@5 BTFSS PORTC,3
GOTO @6
CALL OR
@6 BTFSS PORTC,4
GOTO @7
CALL AND
@7 BTFSS PORTC,5
GOTO @1
CALL COMP
GOTO @1
;*******************DEFINIENDO SUBRUTINAS********************
ADD
CALL NUMX2 ;llama a la divicion del num de 8 bits
MOVF 0X20,0 ; el registro 0x20 lo mueve a w
ADDWF 0X21,0 ; el registro suma w con f 0x21
MOVWF PORTA ; el registro w mueve a la salida al PORTA
CLRW ; limpiamos w
RETURN ; regresa al main
SUB
CALL NUMX2
MOVF 0X21,0
SUBWF 0X21,0
MOVWF PORTA
CLRW
RETURN
XOR
CALL NUMX2
MOVF 0X21,0
XORWF 0X21,0
MOVWF PORTA
CLRW
RETURN
OR
CALL NUMX2
MOVF 0X21,0
IORWF 0X21,0
MOVWF PORTA
CLRW
RETURN
AND
CALL NUMX2
MOVF 0X21,0
ANDWF 0X21,0
MOVWF PORTA
CLRW
RETURN
COMP
CALL NUMX2 ;llama a la divicion del num de 8 bits
COMF 0X21,0 ;complemento de f 0x21 a w
MOVWF PORTA ; movemos de w al puerto f
BCF PORTA,4 ; limpiamos PORTA el bit 4
BCF PORTA,5 ; limpiamos PORTA el bit 5
CLRW ;limpiamos w
CLRF 0X21 ;limpiamos f el registro 0x21
RETURN ; regreso al main
;****************SEPARANDO NIBBLES DEL PORTB*******************
NUMX2 ; divicion del num de 8 bits
;PRIMER NUMERO
MOVF PORTB,0 ;movemos a PORTB
MOVWF 0X20 ; mov w a f 0x20
BCF 0X20,7
BCF 0X20,6
BCF 0X20,5
BCF 0X20,4
;SEGUNDO NUMERO
MOVWF 0X21 ;mov w a f al 0x21
SWAPF 0X21,1 ; aqui cambia los 4 primeros bit por los 4 ultimos bits
BCF 0X21,7
BCF 0X21,6
BCF 0X21,5
BCF 0X21,4
CLRW
RETURN
END
-
eeee palitrocquez vi lo ke me mandaste pero o le entiendo espero ke me puedan seguir ayudadndo ocupo ayuda gracias!!