Autor Tema: Ayuda con PSP de P16F877A  (Leído 1975 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado maurogamer

  • PIC10
  • *
  • Mensajes: 2
Ayuda con PSP de P16F877A
« en: 25 de Enero de 2011, 11:25:28 »
Estimados,

tengo que realizar un proyecto para el Instituto y me solicitaron una aplicación que utilice el Puero Esclavo paralelo de la Pic 16F877A, revise el datasheet y me aparecen solo 2 hojas de información y la verdad es que no me queda muy claro. Ustedes me podrian ayudar con esto.

Lo que pienso hacer es comunicar dos PIC16F877A, una con un teclado matricial y luego envíe datos por el puerto D (Master) y el otro PIC pueda recibir por el puerto D (esclavo).

Yo trabajo en Assembler.

Muchas Gracias

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: Ayuda con PSP de P16F877A
« Respuesta #1 en: 25 de Enero de 2011, 15:57:21 »
¿Has usado el buscador?

¿HAs leido las reglas del foro?
Todos los días se aprende algo nuevo.

Desconectado maurogamer

  • PIC10
  • *
  • Mensajes: 2
Re: Ayuda con PSP de P16F877A
« Respuesta #2 en: 26 de Enero de 2011, 08:58:35 »
Hola Fer_TACA, si leí los hilos que aparecen referente al Puerto Esclavo Paralelo, pero con esa información no he logrado dar solución a mi problema, la verdad es que no llevo mucho tiempo programando PIC, por ello me cuesta entender algunas cosas. Si me puede ayudar se lo agradecería.

Lo que estoy haciendo es un teclado matricial de 3x4 (tipo telefónico) el cual es leido por un 16F877A, luego codifique la lectura y la envío al puerto D (salida). Esta salida esta conectada directamente a otro 16F877A en el puerto D configurado como PSP. Lo que debe hacer es recibir el byte paralelo y enviarlo al puerto A que está conectado con un display de 7 seg BCD (muestra la lectura del teclado). El pic1 lee el teclado sin problemas y envia los datos por el puertoD, pero el PIC2 no lee el puertoD, por ello no me envia los datos al display.

Adjunto el diagrama en Proteus y dejo los codigos de las 2 PIC,

Codigo del Pic 1, encargado de la lectura del teclado

Código: [Seleccionar]
INCLUDE <P16F877A.INC>
LIST P=16F877A

org 0
goto         inicio

inicio
bsf STATUS,RP0
movlw b'11110001'
movwf TRISB
clrf         TRISD
bcf STATUS,RP0

tecla
bsf PORTB,1
bsf PORTB,2
bsf PORTB,3
btfsc PORTB,4
goto lectura
btfsc PORTB,5
goto lectura
btfsc PORTB,6
goto lectura
btfsc PORTB,7
goto lectura
goto tecla

lectura
bsf PORTB,1
bcf PORTB,2
bcf PORTB,3
btfsc PORTB,4
goto tecla_1
btfsc PORTB,5
goto tecla_4
btfsc PORTB,6
goto tecla_7
btfsc PORTB,7
goto tecla_A
bcf PORTB,1
bsf PORTB,2
bcf PORTB,3
btfsc PORTB,4
goto tecla_2
btfsc PORTB,5
goto tecla_5
btfsc PORTB,6
goto tecla_8
btfsc PORTB,7
goto tecla_0
bcf PORTB,1
bcf PORTB,2
bsf PORTB,3
btfsc PORTB,4
goto tecla_3
btfsc PORTB,5
goto tecla_6
btfsc PORTB,6
goto tecla_9
btfsc PORTB,7
goto tecla_B
goto tecla


tecla_0
movlw b'00000000'
movwf PORTD
goto inicio

tecla_1
movlw b'00000001'
movwf PORTD
goto inicio

tecla_2
movlw b'00000010'
movwf PORTD
goto inicio

tecla_3
movlw b'00000011'
movwf PORTD
goto inicio

tecla_4
movlw b'00000100'
movwf PORTD
goto inicio

tecla_5
movlw b'00000101'
movwf PORTD
goto inicio

tecla_6
movlw b'00000110'
movwf PORTD
goto inicio

tecla_7
movlw b'00000111'
movwf PORTD
goto inicio

tecla_8
movlw b'00001000'
movwf PORTD
goto inicio

tecla_9
movlw b'00001001'
movwf PORTD
goto inicio

tecla_A
movlw b'00001010'
movwf PORTD
goto inicio

tecla_B
movlw b'00001011'
movwf PORTD
goto inicio

end

Código del PIC2 (PSP), encargado de recibir por PSP y enviar al display BCD

Código: [Seleccionar]
INCLUDE <P16F877A.INC>
  LIST P=16F877A

org 0
goto inicio

inicio
bsf STATUS,RP0 ;Ingreso al Banco 1
movlw 0x06 ;Configuro todas los Pines de A como Digitales
movwf ADCON1
movlw 0x00 ;Configuro todos los pines de A como salidas
movwf TRISA
movlw 0x17 ;Cargo la configuración del TRISE para que funcione como PSP
movwf TRISE ; Activanto en 1 PSPMODE y RE0,RE1,RE2
movlw b'11111111' ;Configuro como entreda al Puerto D
movwf TRISD
bcf STATUS,RP0 ;Vuelvo al banco 0
goto         principal

principal
bsf STATUS,RP0
btfss         TRISE,7
goto          inicio
bcf STATUS,RP0
goto         display

display
movf         PORTD,W
movwf PORTA
bcf PIR1,PSPIF
goto inicio

end

Si encuentran alguna falla me indicar por favor.


Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: Ayuda con PSP de P16F877A
« Respuesta #3 en: 26 de Enero de 2011, 10:35:44 »
A bote pronto se me ocurren 2 cosas:

1º dentro de la parte del receptor en la secicion del programa princital realizas un goto inicio. Con esto empiezas a reinizializar de manera continua el pic. ¿No cres que seria mas conveniente el realizar un goto principal para no pasar por esa seccion.

2º Entiendo que cuando se detecta un dato lo mandas directamente al display. Como los datos se enviaran muy rapidamnete.¿No serie conveniente el guardarlos previamnete en algun registro?

3º Por otro lado mandas todo el puerto D al puerto A. pero el puerto D es de 8 bits y el A solo tiene 6 bits. Creo que pierdes informacion.

Vamos todo esto te lo digo de lo que recuerdo de cuando programaba en Asm. Con tiempo lo miraré un poco mas a fondo. Mientras es posible que algun otro colega te ayude tambien.

F.
Todos los días se aprende algo nuevo.