Hola si alguien fuera tan amable de echarnos un cable con nuestro PIC se lo agradeceriamos. Bueno voy a intentar explicar el porblema para que podais ayudarnos.
Estamos haciendo un controlador de redes petri programado en c que se conectara con una maquina mediante un pic 16f84a. El pic debera mandar el estado de los sensores de la maquina, estos seran representados mediante un switch conectado a las patas rb0,rb1,rb2,rb3, al pc. Para ello primero leemos el estado de los switch y los pasamos a una variable de hay usando rotar a la derecha los pasamos de uno en uno por el puerto serie al ordenador. Para pasar por el puerto serie usamos la pata ra1 y pasamos byte a byte osea en 4 byte el estado de esos switches. El problema lo tenemos al recibir ya que no recibe nada. Por otra parte despues de mandarlos tendremos que esperar a que nos responda el programa del ordenador. Dicho programa mandara el estado de los motores, que seran representados mediante diodos led y que saldran por las patas rb4,rb5,rb6 y rb7 del pic para pasar luego a los led. Para leer del ordenador usamos la pata ra0 y asta que el ordenador no nos mande el bit de inicio osea el 0 no recibiremos nada. Seran 4 los datos que se nos mandaran, asi que tendremos 4 byte para recibir y de la informacion de estos byte solo nos sera util el primer bit del byte. Ahora dejo el programa para que lo mireis y comenteis si os parece bien y si le veis algun fallo. Compilar compila bien pero igual la forma de ejecucion esta mal.
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST p=16F84A ;Tipo de procesador
#INCLUDE <P16F84A.INC> ;Definiciones de registros internos
#DEFINE PCS PORTA,0
#DEFINE PCI PORTA,1
Temporala EQU 0x10
sentsorekop EQU 0x11
prueba EQU 0x12
PDel0 EQU 0x13
Temporala2 EQU 0x14
konpara EQU 0x15
kont EQU 0x16
Inicio
bsf STATUS,RP0
movlw b'00000001'
movwf TRISA
movlw b'00001111'
movwf TRISB
bcf STATUS,RP0
movlw d'1'
movwf kont
Hasi
clrf Temporala
clrf Temporala2
clrf prueba
clrf sentsorekop
clrf PDel0
;--------------------Sentsoreak irakurri----------------------------------
MOVF PORTB,0 ;mueve el valor de "PORTB" a "W".
MOVWF Temporala ;mueve el valor de "W" a "Temporala".
btfsc kont,F
MOVWF konpara
btfss kont,F
goto konpara
btfsc kont,F
decf kont,F
;---------------------------Sentsoreak PC-ra--------------------------------
movlw d'4'
movwf sentsorekop
contador2
bcf PCI
call PDelay104
rrf Temporala,f
btfsc STATUS,C;mirar si el primer (el bit que se quiere mandar) es 1
goto poner1 ;
bcf PCI;si es 0 ponerlo a 0
jarraia
call PDelay728
bsf PCI
call PDelay208
decfsz sentsorekop,F
goto contador2
goto pcpic
poner1 bsf PCI
goto jarraia
;----------------------------PC -> PIC-----------------------------------------
pcpic
clrf Temporala2
movlw d'4'
movwf sentsorekop
contador3
movf PORTA,0
movwf prueba
rrf prueba,f
btfsc STATUS,C;mirar si el primer (el bit que se quiere mandar) es 1
goto contador3
call PDelay156
bcf STATUS,C
movf PORTA,0
clrf prueba
movwf prueba
rrf prueba,f
rrf Temporala2,F
call PDelay936
decfsz sentsorekop,F
goto contador3
rrf Temporala2,f
rrf Temporala2,f
rrf Temporala2,f
rrf Temporala2,f
;----------------------------PIC -> Makina-------------------------------------
rrf Temporala2,f
btfsc STATUS,C ;mirar si el primer (el bit que se quiere mandar) es 1
goto poner17 ;si es uno ponerlo a 1
bcf PORTB,7
jarraian6
rrf Temporala2,f
btfsc STATUS,C ;mirar si el primer (el bit que se quiere mandar) es 1
goto poner16 ;si es uno ponerlo a 1
bcf PORTB,6
jarraian5
rrf Temporala2,f
btfsc STATUS,C ;mirar si el primer (el bit que se quiere mandar) es 1
goto poner15 ;si es uno ponerlo a 1
bcf PORTB,5
jarraian4
rrf Temporala2,f
btfsc STATUS,C ;mirar si el primer (el bit que se quiere mandar) es 1
goto poner14 ;si es uno ponerlo a 1
bcf PORTB,4
bukaera
goto Hasi
poner17
bsf PORTB,7
goto jarraian6
poner16
bsf PORTB,6
goto jarraian5
poner15
bsf PORTB,5
goto jarraian4
poner14
bsf PORTB,4
goto bukaera
;Subrutina 104ko atzerapena
PDelay104
movlw .24
movwf PDel0
goto PLoop0
;Subrutina 728ko atzerapena
PDelay728
movlw .180
movwf PDel0
goto PLoop0
;Subrutina 728ko atzerapena
PDelay208
movlw .50
movwf PDel0
goto PLoop0
;Subrutina 156ko atzerapena
PDelay156
movlw .37
movwf PDel0
goto PLoop0
;Subrutina 936ko atzerapena
PDelay936
movlw .232
movwf PDel0
goto PLoop0
PLoop0 clrwdt
decfsz PDel0, 1
goto PLoop0
PDelL1 goto PDelL2
PDelL2 clrwdt
return
;Konparatzeko subrutina
konparatu
movf Temporala,w
subwf konpara,w
btfsc STATUS,Z
goto Hasi
movlw d'1'
movwf kont
goto Hasi
end