Una que seguro es fácil para vosotros... como hago para mi programa este "quieto" hasta que por el RC0 gracias a un pulsador le llegue "1".
He leido y no sé comos ería exactamente, que instrucción debo utilizar? BTFSS?
LIST P=16F877, ; usar PIC 16F877
#include <p16f877.inc>
__CONFIG _CP_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC ; code protec off
; power up timer on
; watchdog off
; osc XT
ORG 0
BSF STATUS,5 ; activa la pagina 1
MOVLW B'000000' ; carga 00000 en W
MOVWF TRISA ; puerto a todos salidas
MOVLW B'00000000' ; carga 00000000 en W
MOVWF TRISB ; puerto b todos salidaS
MOVLW B'11111111' ; cargo 11111111 en W
MOVWF TRISC ; PUERTO C TODO ENTRADAS.
MOVLW B'11111111' ; cargo 11111111 en W
MOVWF TRISD ; PUERTO D TODO ENTRADAS.
MOVLW B'11111111' ; cargo 11111111 en W
MOVWF TRISE ; PUERTO E TODO ENTRADAS.
BCF STATUS,5 ; volvemos a la pagina 0
BCF PORTA,0 ; ponemos a 0 RA0
BCF PORTA,1 ; ponemos a 0 RA1
BCF PORTA,2 ; ponemos a 0 RA2
BCF PORTA,3 ; ponemos a 0 RA3
BCF PORTA,4 ; ponemos a 0 RA4
BCF PORTA,5 ; ponemos a 0 RA5
BCF PORTB,0 ; ponemos a 0 RB0
BCF PORTB,1 ; ponemos a 0 RB1
BCF PORTB,2 ; ponemos a 0 RB2
BCF PORTB,3 ; ponemos a 0 RB3
BCF PORTB,4 ; ponemos a 0 RB4
BCF PORTB,5 ; ponemos a 0 RB5
BCF PORTB,6 ; ponemos a 0 RB6
BCF PORTB,7 ; ponemos a 0 RB7
_ESPERAR
btfss PORTC,0 ; espera a que haya un 1 en RC0
goto _ESPERAR
BSF PORTA,0 ; pone a 1 RA0
BSF PORTA,1 ; pone a 1 RA1
BSF PORTA,2 ; pone a 1 RA2
BSF PORTA,3 ; pone a 1 RA3
BSF PORTA,4 ; pone a 1 RA4
BSF PORTA,5 ; pone a 1 RA5
BSF PORTB,0 ; pone a 1 RB0
BSF PORTB,1 ; pone a 1 RB1
BSF PORTB,2 ; pone a 1 RB2
BSF PORTB,3 ; pone a 1 RB3
BSF PORTB,4 ; pone a 1 RB4
BSF PORTB,5 ; pone a 1 RB5
BSF PORTB,6 ; pone a 1 RB6
BSF PORTB,7 ; pone a 1 RB7
END ; fin de programa
BCF PORTA,0; ponemos a 0 RA0
BCF PORTA,1; ponemos a 0 RA1
BCF PORTA,2; ponemos a 0 RA2
BCF PORTA,3; ponemos a 0 RA3
BCF PORTA,4; ponemos a 0 RA4
BCF PORTA,5; ponemos a 0 RA5
BSF PORTA,0; pone a 1 RA0
BSF PORTA,1; pone a 1 RA1
BSF PORTA,2; pone a 1 RA2
BSF PORTA,3; pone a 1 RA3
BSF PORTA,4; pone a 1 RA4
BSF PORTA,5; pone a 1 RA5
BSF PORTB,0; pone a 1 RB0
BSF PORTB,1; pone a 1 RB1
BSF PORTB,2; pone a 1 RB2
BSF PORTB,3; pone a 1 RB3
BSF PORTB,4; pone a 1 RB4
BSF PORTB,5; pone a 1 RB5
BSF PORTB,6; pone a 1 RB6
BSF PORTB,7; pone a 1 RB7
No te olvides de poner
bsf STATUS,RP0 ; para cambiar de banco
....
clrf TRISB
clrf TRISA
...
....
Movlw 07h
movwf ADCON1 ; para hacer puerto A digital, sino es analógico por defecto
....
.....
bcf STATUS,RP0 ; para volver a banco 0
Y si, yo lo leo así :
BTFSS = Bit Test iF iS Set (mira si es 1 y si lo es saltea la intruccion que sigue)
Exactamente que es eso de cambair de banco? que hay 2 bancos? Para que sirven? Q pasa si no cambio de banco?
Ya entiedo Banco 0= 00000000.
Banco 1 = 00000100.
Banco 2 = 00001000.
Banco 3= 00001100.
no? Algo así?
LIST P=16F877, ; usar PIC 16F877
#include <p16f877a.inc>
__CONFIG _CP_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC ; code protec off
; power up timer on
; watchdog off
; osc XT
ORG 0
bsf STATUS,RP0 ; activamos banco 1, poniendo RP0 a 1 y RP1 a 0
bcf STATUS,RP1 ; activamos banco 1, poniendo RP0 a 1 y RP1 a 0
MOVLW 0X00 ; carga 00000 en W
MOVWF TRISA ; puerto A todos salidas
MOVLW 0X00 ; carga 00000 en W
MOVWF TRISB ; puerto B todos salidas
MOVLW 0X00 ; carga 00000 en W
MOVWF TRISC ; puerto C todos salidas
MOVLW 0XFF ; carga 1111 en W
MOVWF TRISE ; puerto E todo entradas
bcf STATUS,RP0 ; vovlemos al banco 0 poniendo RP0 a 0 y RP1 a 0
bcf STATUS,RP1 ; vovlemos al banco 0 poniendo RP0 a 0 y RP1 a 0
CLRF PORTA ;inicializamos a 0 el puerto A
CLRF PORTB ;inicializamos a 0 el puerto B
CLRF PORTC ;inicializamos a 0 el puerto C
ESPERAR ;etiqueta
btfss PORTC,0 ;si RE0 es 1 saltara el goto, si es 0 pasará a GOTO ESPERAR
goto ESPERAR ;salta a la etiqueta esperar
movlw 0xFF ;cargo todo a 1 en W
movwf PORTB ;pongo a 1 todo el puerto B
movwf PORTA ;pongo a 1 todo el puerto A.
movwf PORTC ;pongo a 1 todo el puerto C.
END
Bruno una explicación maestra! No sé como agradeceros la ayuda.Exactamente que es eso de cambair de banco? que hay 2 bancos? Para que sirven? Q pasa si no cambio de banco?
El PIC que estas utilizando actualmente(16F877) tiene cuatro banco.
Cada banco es una sub-division de la memoria total, tanto FLASH como RAM del PIC.
Si no cambias de banco, todos los registros que esten ubicados en bancos distintos al que estas no van a verse afectados por mas que te refieras a ellos(ejemplo: registros TRISA,TRISB) y en lugar de afectarlos, se veran afectados los registros de memoria ubicados a la misma "altura" de las mismas(ver Memory Organization en el datasheet del PIC que uses).
Ejemplo si no cambio de banco:
INICIO
bcf STATUS,RP0
bcf STATUS,RP1
clrf TRISA
clrf TRISB
Analizando: Fijate en la tabla(Memory Organization del datasheet del PIC) y vas a ver que TRISA = 0x85 y TRISB=0x86.
Estos registros estan ubicados en el banco 1 del PIC, sin embargo en el ejemplo que puse arriba, no pase al banco 1 antes de aplicarles alguna instruccion, entonces lo que sucede es que:
El ensamblador considera solo los 7 bits de menor peso de la direccion ingresada(¿por que? Mira en "Instruction Set Summary" y veras que el valor ingresado para trabajar con registros RAM deben ser / 0x00<=X<=0x7F), entonces:
En lugar de hacer: clrf 0x85, hara clrf 0x05 y en lugar de clrf 0x86 hara clrf 0x06.
Si te fijas en la tabla, veras que 0x05 es PORTA y 0x06 es PORTB. Y estan a la misma "altura" de los registros de configuracion de cada puerto(los TRIS).
Por lo tanto, debes ubicarte en el banco correcto antes de trabajar con registros que esten en un banco distinto al que estas.
Saludos.
Hola, estas checkeando el PORTC,0 cuando en realidad deberia ser el PORTE,0
Cambia:
btfss PORTC,0 ;si RE0 es 1 saltara el goto, si es 0 pasará a GOTO ESPERAR
Por
btfss PORTE,0 ;si RE0 es 1 saltara el goto, si es 0 pasará a GOTO ESPERAR
Saludos.
Minetras no te aparezca un mensaje de Error todo anda bien :mrgreen:.
Saludos LabPIC
Lo mas comun es hacerlo vía software, generalmente el antirrebote no necesita un tiempo mayor a los 20 ms.
Saludos LabPIC
¿A que frecuencia manejas el cristal oscilador del micro?. Enseguida te muestro un ejemplo.
Saludos LabPIC
ORG 0
bsf STATUS,RP0 ; activamos banco 1, poniendo RP0 a 1 y RP1 a 0
bcf STATUS,RP1 ; activamos banco 1, poniendo RP0 a 1 y RP1 a 0
N EQU 0x1A
M EQU 0x0
cont1 EQU 0x20
cont2 EQU 0x21
Movlw 07h ; pongo en digital el puerto A.
movwf ADCON1
MOVLW 0X00 ; carga 00000 en W
MOVWF TRISA ; puerto A todos salidas
MOVLW 0X00 ; carga 00000 en W
MOVWF TRISB ; puerto B todos salidas
MOVLW 0X00 ; carga 00000 en W
MOVWF TRISC ; puerto C todos salidas
MOVLW 0XFF ; carga 1111 en W
MOVWF TRISE ; puerto E todo entradas
bcf STATUS,RP0 ; volvemos al banco 0 poniendo RP0 a 0 y RP1 a 0
bcf STATUS,RP1 ; volvemos al banco 0 poniendo RP0 a 0 y RP1 a 0
CLRF PORTA ;inicializamos a 0 el puerto A
CLRF PORTB ;inicializamos a 0 el puerto B
CLRF PORTC ;inicializamos a 0 el puerto C
DEMORA
pau MOVLW N ;(1) Carga dato N
MOVWF cont1 ;(1) inicializa contador1 ciclo externo
rep1 MOVLW M ;(1) Carga dato M
MOVWF cont2 ;(1) inicializa contador2 ciclo interno
rep2 DECFSZ cont2,1 ;(1,2)Decrementa contador2 y escapa si cero
GOTO rep2 ;(2) si no es cero, repite ciclo interno
DECFSZ cont1,1 ;(1,2)Decrementa contador1 y escapa si cero
GOTO rep1 ;(2) si no es cero repite ciclo externo
esc RETURN ;(2) regresa de esta subrutina
END
INICO
ESPERAR ;etiqueta
btfss PORTE,0 ;si RE0 es 1 saltara el goto, si es 0 pasará a GOTO ESPERAR
CALL DEMORA
goto ESPERAR ;salta a la etiqueta esperar
enciende
movlw 0XFF ;cargo todo a 1 en W
movwf PORTB ;pongo a 1 todo el puerto B
movwf PORTA ;pongo a 1 todo el puerto A.
movwf PORTC ;pongo a 1 todo el puerto C.
btfsc PORTE,0 ;si RE0 está a 0 saltara el goto, si es 1 pasará a GOTO
CALL DEMORA
goto enciende ;salta a la etiqueta apaga
CLRF PORTA ;inicializamos a 0 el puerto A
CLRF PORTB ;inicializamos a 0 el puerto B
CLRF PORTC ;inicializamos a 0 el puerto C
goto ESPERAR
ENDESPERAR ;etiqueta
btfss PORTE,0;si RE0 es 1 saltara el goto, si es 0 pasará a GOTO ESPERAR
goto ESPERAR;salta a la etiqueta esperar
CALL DEMORA
enciende
movlw 0XFF;cargo todo a 1 en W
movwf PORTB;pongo a 1 todo el puerto B
movwf PORTA;pongo a 1 todo el puerto A.
movwf PORTC;pongo a 1 todo el puerto C.
btfsc PORTE,0;si RE0 está a 0 saltara el goto, si es 1 pasará a GOTO
goto enciende;salta a la etiqueta apaga
CALL DEMORA
Hola, estas checkeando el PORTC,0 cuando en realidad deberia ser el PORTE,0
Cambia:
btfss PORTC,0 ;si RE0 es 1 saltara el goto, si es 0 pasará a GOTO ESPERAR
Por
btfss PORTE,0 ;si RE0 es 1 saltara el goto, si es 0 pasará a GOTO ESPERAR
Saludos.
Bruno, antes lo tenía en PORTE,0 pero no hacúia nada y he pegado el código de las pruebas´. PEro ya lo he solucionado!
Por cierto, es normal que con el MPlab al compilar me salgan todos estos errores?
No son errores, si tenes un error, no se crea el archivo .hex.
Message[301] C:\ARCHIVOS DE PROGRAMA\MICROCHIP\MPASM SUITE\P16F877A.INC 36 : MESSAGE: (Processor-header file mismatch. Verify selected processor.) <- Tenes configurado un modelo de PIC en el MPLAB distinto al que estas trabajando. Anda en el MPLAB a la pestaña Configure--> Select Device y selecciona el que estes usando.
Warning[205] : Found directive in column 1. (ORG) -> Todas las directivas deben ir a partir de la segunda columna de codigo, es decir, hace un TAB antes de poner una instruccion.
Warning[203] : Found opcode in column 1. (bsf) -> Todas las instrucciones deben ir a partir de la segunda columna de codigo, es decir, hace un TAB antes de poner una instruccion.
Message[302] : Register in operand not in bank 0. Ensure that bank bits are correct.
Te indica que estas haciendo referencia a un registro que no esta ubicado en el BANCO 0 del pic. Es simplemente para recordarte que verifiques que has pasado al banco correcto antes de trabajar con dicho registro.
__CONFIG _CP_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC ; code protec off
; power up timer on
; watchdog off
; osc XT
ORG 0
bsf STATUS,RP0 ; activamos banco 1, poniendo RP0 a 1 y RP1 a 0
bcf STATUS,RP1 ; activamos banco 1, poniendo RP0 a 1 y RP1 a 0
Movlw 07h ; pongo en digital el puerto A
movwf ADCON1 ; pongo en digiatl el puerto A
MOVLW 0X00 ; carga 00000 en W
MOVWF TRISA ; puerto A todos salidas
MOVLW 0X00 ; carga 00000 en W
MOVWF TRISB ; puerto B todos salidas
MOVLW 0X00 ; carga 00000 en W
MOVWF TRISC ; puerto C todos salidas
MOVLW 0XFF ; carga 1111 en W
MOVWF TRISE ; puerto E todo entradas
bcf STATUS,RP0 ; volvemos al banco 0 poniendo RP0 a 0 y RP1 a 0
bcf STATUS,RP1 ; volvemos al banco 0 poniendo RP0 a 0 y RP1 a 0
espera_apaga ;etiqueta
CLRF PORTA ;inicializamos a 0 el puerto A
CLRF PORTB ;inicializamos a 0 el puerto B
CLRF PORTC ;inicializamos a 0 el puerto C
btfss PORTE,0 ;si RE0 es 1 saltara el goto, si es 0 pasará a esperar y apagar
Goto espera_apaga ;salta a la etiqueta ESPERAR
enciende
movlw 0XFF ;cargo todo a 1 en W
movwf PORTB ;pongo a 1 todo el puerto B
movwf PORTA ;pongo a 1 todo el puerto A.
movwf PORTC ;pongo a 1 todo el puerto C.
btfss PORTE,0 ;si RE0 está a 1 saltara el goto espera_apaga, si es 0 pasará a GOTO enciende
goto espera_apaga ;al estar RE0 a 0 salta a espera_apaga
goto enciende ;al estar RE0 a 1 salta a la etiqueta enciende
end
Esto está mal:
MOVLW b'11111111' ;
MOVWF TRISE
El bit 4 debe estar a 0 para ser entradas salidas digitales, sino estas habilitando el puerto E para modo PSP.
btfss PORTE,0 ;si RE0 es 1 saltara a enciende si es 0 salta a espera_apaga
Goto espera_apaga ;salta a la etiqueta ESPERAR
GOTO enciende
enciende
movlw b'00000001' ;cargo a 1 en W
movwf PORTA ;pongo a 1 RA0 del puerto A
btfss PORTE,0 ;si RE0 es 1 saltara a enciende2 si es 0 salta a enciende
goto enciende
GOTO enciende2
enciende2
movlw b'00000011'
movwf PORTA
btfss PORTE,0 ;si RE0 está a 1 saltara a enciende3 si es o a enciende2
goto enciende2
goto enciende3
enciende3
movlw b'00000111'
movwf PORTA
btfss PORTE,0 ;si RE0 está a 1 saltara a enciende4 si es o a enciende3
goto enciende3
goto enciende4
enciende4
loop goto loop
[/quote]
btfss PORTE,0 ;si RE0 es 1 saltara a enciende si es 0 salta a espera_apaga
Goto espera_apaga ;salta a la etiqueta ESPERAR (no veo la etiqueta espera_apaga)
GOTO enciende ; esto es innecesario , ya que salta a la linea que sigue
enciende
movlw b'00000001' ;cargo a 1 en W (aqui es mas corto BSF PORTA,0)
movwf PORTA ;pongo a 1 RA0 del puerto A
btfss PORTE,0 ;si RE0 es 1 saltara a enciende2 si es 0 salta a enciende
goto enciende
GOTO enciende2 ; innecesaria
enciende2
movlw b'00000011'
movwf PORTA
btfss PORTE,0 ;si RE0 está a 1 saltara a enciende3 si es o a enciende2
goto enciende2
goto enciende3 innecesaria
enciende3
movlw b'00000111'
movwf PORTA
btfss PORTE,0 ;si RE0 está a 1 saltara a enciende4 si es o a enciende3
goto enciende3
goto enciende4 innecesaria
enciende4
loop goto loop
LIST p=16f877 ; Indicamos que se utiliza el PIC16F877
#include <p16f877.inc> ;y esto también
__config _CP_OFF & _XT_OSC & _WDT_OFF & _PWRTE_ON & _LVP_OFF
; Esto es para suprimir los mensajes de warning del MPLAB ( a veces son molestos)
ERRORLEVEL -302 ;suppress "not in bank 0" message
ERRORLEVEL -203 ;suppress message
ERRORLEVEL -305 ;suppress message
ERRORLEVEL -205 ;suppress message
org 00h ; Vector de reset (aqui viene el micro cuando arranca)
goto inicio ; Y inmediatamente lo mandamos a Inicio
org 04h ; Vector de interrupciones
goto interrupciones ; para uso futuro si usas interrupciones
org 05h ; Aqui le dices al micro en que posicion de memoria comienza lo que sigue
inicio
bsf STATUS,RP0 ; activamos banco 1, poniendo RP0 a 1 y RP1 a 0
bcf STATUS,RP1 ; activamos banco 1, poniendo RP0 a 1 y RP1 a 0
Movlw 07h ; pongo en digital el puerto A
movwf ADCON1 ; pongo en digiatl el puerto A
MOVLW 0X00 ; carga 00000 en W
MOVWF TRISA ; puerto A todos salidas
MOVLW 0X00 ; carga 00000 en W
MOVWF TRISB ; puerto B todos salidas
MOVLW 0X00 ; carga 00000 en W
MOVWF TRISC ; puerto C todos salidas
MOVLW b'11101111' ; carga 1111 en W
MOVWF TRISE ; puerto E todo entradas digitales
bcf STATUS,RP0 ; volvemos al banco 0 poniendo RP0 a 0 y RP1 a 0
bcf STATUS,RP1 ; volvemos al banco 0 poniendo RP0 a 0 y RP1 a 0
espera_apaga ;etiqueta
CLRF PORTA ;inicializamos a 0 el puerto A
CLRF PORTB ;inicializamos a 0 el puerto B
CLRF PORTC ;inicializamos a 0 el puerto C
btfss PORTE,0 ;si RE0 es 1 saltara a enciende si es 0 salta a espera_apaga
Goto espera_apaga ;salta a la etiqueta espera_apaga
enciende1
movlw b'00000001' ;cargo a 1 en W
movwf PORTA ;pongo a 1 RA0 del puerto A
btfss PORTE,0 ;si RE0 es 1 se saltara el goto si es 0 hace el goto
goto enciende1 ;salta a enciende1
enciende2
movlw b'00000011' ;movemos el valor 00000011 a W
movwf PORTA ;colocamos a 1 las salidas RA0 y RA1
btfss PORTE,0 ;si RE0 está a 1 se saltará el goto si es 0 hace el goto
goto enciende2 ;salta a enciende 2
enciende3
movlw b'00000111' ;movemos el valor 00000111 a W
movwf PORTA ;pasamos a 1 las salidas RA0,RA1 y RA2
btfss PORTE,0 ;si RE0 está a 1 se saltará el goto, si es 0 hace el goto
goto enciende3
enciende4
movlw b'00001111' ;movemos el valor 00001111 a W
movwf PORTA ;pasamos a 1 las salidas RA0,RA1,RA2 y RA3
btfss PORTE,0 ;si RE0 está a 1 se saltará el goto, si es 0 hace el goto
goto enciende4
clrf PORTA
goto espera_apaga
interrupciones
; Aqui escribes tu programas de interrupciones si lo tienes, sino no pasa nada. Es para usos
;futuros.
retfie
end ; aqui termina el programa
Hola picto un saludo, antes que nada felicitarte por el empeño que le has puesto al ensamblador y en hora buena por los avances que has logrado. Ademas de comentar que he modificado los errores que habian quedado en el programa que he subido anteriormente :D (una disculpa, pero andaba un poco despistado :mrgreen:).
Con respecto a lo que has comentado en el mensaje anterior estoy seguro que es por lo del antirrebotes, se aconseja que cuando a un solo pulsador se asignen dos o más tareas diferentes en un programa se de be considerar el efecto de rebote.
Por eso creo que sería conveniente lo del antirrebote, como te ha comentado BrunoF anteriormente.
Saludos LabPIC
Como ya dije al final lo que quiero es un probador para conectarlo a una electrónica y poder ver si la electrónica funciona o nó gracias a un circuito probador hecho con pic.
Hola picto pues yo soy de Querétaro, México. Una pregunta a que te refieres:CitarComo ya dije al final lo que quiero es un probador para conectarlo a una electrónica y poder ver si la electrónica funciona o nó gracias a un circuito probador hecho con pic.
No te molestes por lo de la compensación, dijo para ayudar es el foro :mrgreen:. "Hoy por ti, mañana por mi :mrgreen:.
Saludos LabPIC
OK, ahora entiendo :mrgreen:, me parece una buena idea de tu parte, pues a ehcarle kilos de ganas. Luego nos dices como vas.
Por cierto que aguante de tu parte, pues en el momento de publicar este mensaje en España son las 2:27 AM, demasiado temprano para estar despierto :D, o demasiado tarde para empezar a dormir :D :D.
Saludos LabPIC
Holas:
El programa lo he grabado en un 877 y funciona perfectamente.
Te comento que tuve el mismo problema que me dices: cuenta sin parar , y eso se debe a que el puerto E no está con su resistencia a masa.
En resumen: Ponle una resistencia al del pin E0 de entrada a masa de 10k y el pulsador entre este pin y positivo. Entonces ese pin siempre será 0 volts y cuando pulses le entrará los +5v .
La instrucción goto $-1 le dice al micro que vaya una instrucción atrás. Si le pones goto $-2 irá 2 renglones atrás. Si pones goto $+2 irá dos renglones por delante. Es mas facil que ir poniendo etiquetas y llamándolas con el goto , no?
Pero hazme caso tal y como te dije que lo conectaras: PIN E0 con resistencia a masa de 10k y pulsador entre el mismo pin y +. Ni condensador ni leches :mrgreen:
Bueno, esto vá cogiendo forma. :D
Lo siguiente qyue tengo en mente es utilizar 6 salidas más, que serían:
RC4, RC5, RC6,RC7,RE1 y RE2.
Como sabeis el programa toma como entrada RE0, mi pregunta es... se puede hacer que RE0 sea solo entrada y RE1 y RE2 sean salidas? Como lo hago?
Entonces me sobran 8 salidas osea todo el puerto D que estoy pensando colocarme un LCD para que muestre mensajes, lo veis muy complicado para mi nivel?
Gracias
Pudiera ser que al poner 11101001 le esté diciendo aparte de RE0 entrada, RE1 salida Re2 salida, que:
0 en el bit4= PSPmode functions in general purpose I/O mode ?
Y porque en el bit 3 hay un 1?
Gracias
picto en realidad los ultimos 4 bits no importan el estado en que se encuentren pq como ya ha mencionado pibe el Puerto E unicamente cuenta con 4 pines.
Saludos LabPIC :mrgreen:
Pudiera ser que al poner 11101001 le esté diciendo aparte de RE0 entrada, RE1 salida Re2 salida, que:
0 en el bit4= PSPmode functions in general purpose I/O mode ?
Y porque en el bit 3 hay un 1?
Gracias
Lo del bit 4 del PORTE ya te lo he explicado antes.
Es correcta tu deducción: 1 entrada, 0 salida. En todos los puertos es igual. La única excepción es el puerto E, que al solo tener 4 pines solo utiliza los 4 primeros bits para setear entrada o salida con TRISE.
Puedes conectar un lcd de 2 maneras: usando 4 u 8 pines.
Mira la página www.todopic.com.ar, pincha en el boton asembler y busca LCD en el directorio. Creo que hay un programa para usar el LCD.
Picto: Todo esto está en la hoja de datos, pero asumo que no entiendes ni papa de inglés, o si? De todas maneras y aunque no entiendas , echale una ojeada y veras que hace cada bit del TRISE.
Por cierto pibe MOVLW b'11101111' ;ojo que TRISE tambien actua sobre puerto D , porque actua sobre el puerto D?
De ingles se algo... pero se mezcla que el datasheet es amplio, y no controlo mucho el assembler :lol:
Por cierto pibe MOVLW b'11101111' ;ojo que TRISE tambien actua sobre puerto D , porque actua sobre el puerto D?
De ingles se algo... pero se mezcla que el datasheet es amplio, y no controlo mucho el assembler :lol:
Si te fijas en el datasheet, el TRISE en sus bits 4 al 7 se usa para configurar y controlar el Parallel Slave Port que es un módulo que usa todo el puerto D (para los datos) y el puerto E (para la señalización).
Saludos
Ah ok ok.
Ahora estoy intentando conectar un display que me muestre unos mensajes con los 8 bits del puerto D que me sobran del Pic16f877, pero es más complejo de lo que pensaba...
tapi8 me puedes explicar por que es mas facil equivocarse en binario que en hexadecimal?. Un ejemplo:
Palabra de configuración del puerto en binario: 0b1101 0110 => EESE SEES <= Entradas y salidas con:
0 = Salida y 1 = Entrada