Hi Andy,
I don't have the time to rig something up here at the moment but I took a look at your code again and here are a couple of suggestions.
For the master you don't need interrupts at all. Since it's querying the slave for data it already knows when data is supposed to come in. What you may want to do is add a timeout to the HSERIN though in case something goes wrong. The defines for the LCD, at the top of the program, needs to be UPPER CASE or they won't have any effect. So, for the master, remove the interrupt stuff then go directly from HSEROUT to HSERIN, something like this:For the slave, what you can do if you want to keep the ON INTERRUPT and still have your blinking LED in the main is to replace the long PAUSE with loop consisting of many short pauses instead. That way the interrupt flag will be polled after each of those short pauses instead of after the single long one. Much less risk of flooding the buffer. Something like this perhaps:Code:Main: lcdout $fe,1 lcdout $fe,128,"Test RX-Tx" lcdout $fe,192,"Reading" pause 1000 lcdout $fe,1 lcdout $fe,128,#m[0],#M[1],#M[2],#M[3] lcdout $fe,192,"Transmitting!" High en high led hserout ["P",$88] ' Wait for the data to go out before pulling the EN signal to ' the tranceiver - IF that's what the EN-signal is doing..... While TXSTA.1 = 0 : WEND low en low led Hserin [wait("S0"),m[0], wait("S1"),m[1], wait("S2"),M[2], wait("S3"),m[3]] toggle led lcdout $fe,1 lcdout $fe,128,"Received!" LCDOUT $fe,192,#m[0],"*",#M[1],"*",#M[2],"*",#M[3] pause 1000 goto mainPlease note that I have not tested it but it is what I would do given the circumstances. As for DT-INTS what he claimed really is true, once you've used it you'll never want to use ON INTERRUPT again. Yes, it's little bit trickier to use but really not that much. I suggest you look around the forum, there are plenty of examples of how to use it.Code:i VAR WORD main: toggle led low en 'My stuff For i = 0 to 299 PAUSEUS 500 ' Pause for 150ms NEXT goto main Disable interrupt ' Don't check for interrupts in this section serialin: ' Read USART and store character to next empty location Hserin [wait("P"),start] high en if start =$88 then for j=0 to 3 ' Producing ODD numbers (Just for checking of continuous communication) i=i+1 m[j]=(2*i)+1 if m[j]>100 then i=0 m[j]=j+1 endif next j hserout ["S0",m[0],"S1",m[1],"S2",M[2],"S3",m[3]] ' Wait for the data to go out before pulling the EN signal to ' the tranceiver. While TXSTA.1 = 0 : WEND low en endif enable interrupt Resume ' Return to program goto main
/Henrik.




Bookmarks