Hola,
He estado probando el programa pero no me envia nada al serial. Puede ser que el problema este en el codigo de la configuracion del serial port y el envio de los datos. Los sensores funcionan, porque lo mire con el scope.
Cuelgo el programa, por si veis algun error.
list p=16f877 ; list directive to define processor
#include <p16f877.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_OFF & _HS_OSC & _LVP_OFF & _DEBUG_OFF & _CPD_OFF
; '__CONFIG' directive is used to embed configuration data within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.
;*****************************************************************************
; Vars, constants and defines
;*****************************************************************************
CBLOCK 0x20 ; RAM START ADDRESS
perl ; low counter
perh ; high counter
perl2
perh2
ENDC
#define SN1 PORTC,2 ; Hall Effect pulse input Descendent
#define SN2 PORTC,1 ; Pulse input lm555 ascendent
ERRORLEVEL -302 ; Don't show message 302 while compiling.
;*****************************************************************************
; Program start
;*****************************************************************************
ORG 0 ; RESET vector location
RESET goto START
;*****************************************************************************
; Interrupt vector
;*****************************************************************************
ORG 4 ; interrupt vector location
;*****************************************************************************
; Interrupt Routine.
;*****************************************************************************
;*****************************************************************************
;*****************************************************************************
; Program start
;*****************************************************************************
START
clrf PORTB
bcf STATUS,RP1
bsf STATUS,RP0 ; switch to bank 1
movlw B'00000000'
movwf TRISB ; port B all output
movlw B'00000110' ;
movwf TRISC ; input RC1 and RC2
movlw B'00000110'
movwf ADCON1 ; all ports digital
movlw B'00000000'
movwf TRISA ; port A all output
bcf STATUS,RP0 ; switch back to bank 0
movlw B'00100001' ; Prescaler=1:4(1us) TMR1=ON
movwf T1CON ; config T1CON
bsf INTCON,GIE
bsf INTCON,PEIE
bsf STATUS, RP0 ; Select bank 1
bsf PIR1,TMR1IF ; unmask the timer0 interrupt
bsf PIE1,TMR1IE ; and enable interrupt.
bcf STATUS, RP0 ; Select bank 0
setbaud bcf STATUS,RP1 ; clear bank2,3
bsf STATUS,RP0 ; set bank 1
movlw D'51' ; brg val for 19200kbaud 16mhz xtal
movwf SPBRG
movlw B'00100100' ; snyc=0, brgh=1, enable Trans. txen,HighBaud
movwf TXSTA
bcf TRISC,6 ; set rc6 as output
bcf STATUS,RP0 ; switch to bank 0
movlw B'10000000' ; set spen bit of rcsta
movwf RCSTA
loop btfsc SN1
goto loop ; Wait for Ignition Low
clrf TMR1H ; Clear Timer1
clrf TMR1L
waitHigh btfss SN2 ;
goto waitHigh ; Wait for Ignition high
movfw TMR1L ; Store TMR1L and
movwf perl ; Store the timers
movfw TMR1H
movwf perh
loop2 btfsc SN1
goto loop2 ; Wait for Ignition Low
movfw TMR1L ; Store TMR1L and
clrf TMR1L ; clear TMR1L for now.
movwf perl2 ; Store the timers
movfw TMR1H
clrf TMR1H
movwf perh2
sendpc movf perl,w ; Counter delay sensors low byte
call serial
movf perh,w ; Counter delay sensors high byte
call serial
movf perl2,w ; Counter period Hall Effect sensor low byte
call serial
movf perh2,w ; Counter period Hall Effect sensor high byte
call serial
goto loop
serial nop
btfss PIR1,4 ; wait for txreg to empty
goto serial
movwf TXREG ; auto transmission
return
;***************************************************************************************************
end ; directive 'end of program'