Within your send routine, can you send character by character your string and check in between for the PIR1.5 ?
The delay would be one byte maximum.
Ioannis
Within your send routine, can you send character by character your string and check in between for the PIR1.5 ?
The delay would be one byte maximum.
Ioannis
I thought of that method myself last night, and have already started implementing it. That seems to be the best alternative right now.
I suppose that I need to check the listing file, but I need to make certain that I'm never "blind" for a significant part of a character reception period. I can't afford to miss even one character. There is no pacing. The data stream is coming from a computer, not a human.
I'm thinking that there should be some easy assembly language routine that - upon interrupt, just dumps me to a particular line and starts execution there. As I said before, I don't need to pick up right where I left off. If I'm sending a string, and a character comes in, I can stop sending data and respond to the new request.
Charles Linquist
You won't since you will be checking every one byte. The PIC buffer is 2 bytes long.Originally Posted by Charles Linquis
Either ASM or Basic the result with the suggested method will be the same. Maybe with ASM a few microseconds faster.Originally Posted by Charles Linquis
Ioannis
Hi, PbP kings ... Mel and Co.Originally Posted by Charles Linquis
I see something interesting here ...
Just add :
ON INTERRUPT GOTO xxxy
DISABLE INTERRUPT
at the very top of the pbp program.
DO not Forget to end your interrupt routine xxxy: with a ( PbP ) GOTO where you want to go back then.
What's new in the asm Program window ???
program address 3 and 4 are now free, there's a new "return" at address 5 ... change it for a nop.
Label L 0001 ( a bit further ) contains the interrupt lines for PbP ... replace them by nops.
as there are no PbP lines between ON Interrupt and Disable ....There are no Gosub L0001 !!!
at address 3 put a GOTO 0006 to skip line 4 and 5
at address 4 ... just set the page bits ( if necessary ) and add an asm "GOTO" to the PBP interrupt label ( in address 4 or 5, Then)
we've seen 8 lines on 8 ...
I think it might work now ...
Alain
PS: example given for an interrupt vector at line 4 ... of course !!!
Last edited by Acetronics2; - 14th December 2005 at 16:09.
************************************************** ***********************
Why insist on using 32 Bits when you're not even able to deal with the first 8 ones ??? ehhhhhh ...
************************************************** ***********************
IF there is the word "Problem" in your question ...
certainly the answer is " RTFM " or " RTFDataSheet " !!!
*****************************************
I hate to sound dumb, but...
It has been a long time since I wrote ASM code for PICs.
My code is basically as below-
TOP:
IF TMR0 rollover then gosub TASK_SCHEDULER
IF PIR1.5 = 1 then gosub INPUT_ROUTINE
GOTO TOP
TASK_SCHEDULER:
(normally calls a bunch of very short routines - 300uSec max)
but- every once in awhile calls OUTPUT_ROUTINE
RETURN
INPUT_ROUTINE:
HSERIN stuff
RETURN
OUTPUT_ROUTINE:
HSEROUT [...]
RETURN
---------------------------------------
Questions:
Do I just put the address of 'TOP' in the interrupt vector?
Is there a way to automatically do this in PBP - some way that I don't have to look at the listing and find out what the actual address of 'TOP' is, and manually write that to address 0x08 (something like INT_VECTOR = TOP)?
Do I have to save/restore any other registers (STATUS or W, for example?)
Charles Linquist
> It is not necessary, as you go back to a full section of PbP code ... and redo a full task. but you've lost what you were doing ... may be care has to be taken with READ and WRITE to be sure values are really saved or read .Originally Posted by Charles Linquis
I'd better kill interrupts in those sections ...
Alain
Last edited by Acetronics2; - 14th December 2005 at 19:02.
************************************************** ***********************
Why insist on using 32 Bits when you're not even able to deal with the first 8 ones ??? ehhhhhh ...
************************************************** ***********************
IF there is the word "Problem" in your question ...
certainly the answer is " RTFM " or " RTFDataSheet " !!!
*****************************************
I did just a little try ...16F84A, button on PortB.0, Led on PortB.7
see :
'Test Blink
ON INTERRUPT GOTO Period
DISABLE INTERRUPT
DEFINE LCD_Ebit 1
I var Bit
Periode var Word
Led var Portb.7
Led = 0
Periode = 64
loop:
INTCON.4 = 1
For I = 1 to 1000
Pauseus Periode
Next I
Toggle led
Goto loop
Period:
INTCON = $80
Periode = ( Periode /2 )
IF NOT Periode THEN
Periode = 64
ENDIF
GOTO loop
END
the HEX, now, in the Program Window
Change line 5 ( RETURN ) to ( GOTO 0x54 ) ....
ENJOY !!!
That's all !!!
Last edited by Acetronics2; - 16th December 2005 at 15:19.
************************************************** ***********************
Why insist on using 32 Bits when you're not even able to deal with the first 8 ones ??? ehhhhhh ...
************************************************** ***********************
IF there is the word "Problem" in your question ...
certainly the answer is " RTFM " or " RTFDataSheet " !!!
*****************************************
Bookmarks