I'm assuming you mean 12F675.
Serial is by "bit banging", using internal timing loops. You should not use any Interrupts if using software serial, as it will mess up the timing of the serial software loops (unless really short interrupt like 10-20uS).
With software serial, there is no notification that a character has been received, it is all done with the SERIN command, which waits forever for a character to be received.
SEROUT is the same issue, the code waits until all the bits have been sent by software emulation before continuing.
Software serial is critical of clock frequency, the chip must be calibrated if using internal clock, but better still to use an external crystal. You must Define the proper frequency the chip is running at.
Once SERIN is completed, you can check what the character is, but there is no validity check on it (if serial timing is off...). You can set a timer interrupt to cancel the SERIN command, to check if the character is zero with the definitions:
SERIN_TIMEOUT_REG
SERIN_TIMEOUT_BIT
where the register is either a timer bit or even a GPIO bit (any register is valid to use here, if you can control the bits). I used a 12F675 to read a serial data stream, making sure every character was in the proper position and proper format by using a read subroutine(s). Any character that was not correct, I set the success flag as zero and just read the stream until end was seen, then start all over waiting for next stream of data. Always wait for start of message, read data expected, read end of message character. If ok, then set "ok" flag to one.
Example (not complete code, just example of reading data stream with fixed format, else reject). Used a GPIO pin to interrupt the read (SERIN):
Define SERIN_TIMEOUT_REG = GPIO 'set interupt register and
Define SERIN_TIMEOUT_BIT = 3 'set which register bit - use push button switch
Symbol switch = GPIO.3 'push button input to +5V (pin has pulldown resistor)
Symbol rcx = GPIO.0 'software serial input pin
...code...
If ok = 1 Then 'complete command received...
....more code
END
readbyte:
Serin rcx, 9600, arg1 'read a character
If switch = 1 Then ok = 0 'button pressed, abort
Return
getack: 'Routine to get ack from our commands
ok = 0 'flag used to indicate status
findstart:
Gosub readbyte
If switch = 1 Then Return
If arg1 <> som Then Goto findstart 'Wait for "Start of Message" symbol
Gosub readbyte
If arg1 = 0 Then Return
If arg1 <> command0 Then Goto nope
Gosub readbyte
If arg1 = 0 Then Return
If arg1 <> command1 Then Goto nope
Gosub readbyte
If arg1 = 0 Then Return
If arg1 <> command2 Then Goto nope
Gosub readbyte
If arg1 = 0 Then Return
If arg1 = command3 Then ok = 1 'Valid command received
nope:
Gosub readbyte 'read until EOM is seen and ignore rest
If switch = 1 Then Return
If arg1 <> eom Then Goto nope 'Keep reading until end of message
Return