Hi all, New to this forum in a posting perspective but it's been a great help in a lot of areas from the start of my 8051 classes this year and last year so for that thanks. Im coming near the end of my final year project and I'v come across a slight problem with my interrupt implementation. I have RTFMed about all I can find on interrupts from any number of sources before you tell me to Please read the manual. The problem is that my ISR is triggered fine the first time sets a flag goes back carries out a function ... due to it not being a good idea to have function calls within an ISR ... resets flag and then sits reading the clock again however when I try to interrupt again it will not carry out the ISR this next time.
I have : reset external interrupt flag; reset condition variable flag; even attempted to re-enable external interrupt (even though this is probably not required);
The code is a long one so Id rather not post the entire thing here if anyone wants to take a look at it who has a good idea as to what I'm doing wrong or if anyone wants to suggest a specific part to post to look at the ISR or the menu its being called from please contact me. I will however not be sending this code on to anyone who's just looking for something to copy as I've read the manual to get it this far. I'd also be very happy to have someone look over the code in general for bad programming implementation if they would ... I'm a student in this subject but I've a keen interest in the field.
Also I'm Irish but this website is picking me up in America for some reason ?
Regards Robbie.
receive(); what does that do?
Hi eric I remember seeing your name before on these threads I think you helped a friend of mine Cian Young with his project too for certain reasons we didn't get the chance to do serial communications in our programmable electronics course and hence why the recieve function is a little butcheresque. The function is shown just above your post.
void enter (void) interrupt 0 { receive();
first interrupt 0 is the EI0 interrupt second you go to recieve even if the interrupt is transmit
this need some clarification
Ok my reader has a output pin that triggers when an RFID tag is received, I'm using this to tell the 89s52 to go and carry out recieve to see what is on the UART when this happens. Im only using this reader to recieve and have no transmit connection present only intended on simplex communication. I hope that answers your question.
Hmmm I feel slightly out of my depth here now.
Ok my reader has a output pin that triggers when an RFID tag is received, I'm using this to tell the 89s52 to go and carry out recieve to see what is on the UART when this happens. WHY?, why not just read the data coming down instead of mickey-mousing the read KISS
Im only using this reader to recieve and have no transmit connection present only intended on simplex communication.
you STILL need (if you do not do the right thing and move the read to the UART interrupt) to test for RI or you will willi-nilly fetch 'bytes' that may or may not be read from the seral bus.
you are waaaay overcomplicating the issue
Ah ha ha damn so I've overcomplicated things again .... back to the drawing board so serial interrupt it is then.
Also Willy-nilly is that a technical term?
Hmm this could potentially remove all requirement for external interrupt if I can do a quick tag check after the serial interrupt is carried out set the required flag for the required tag and then that will return to the menu to carry out the function for the specified flag. ?
Or would I better to have external and serial interrupts active with the serial to recieve the data and then the external will be triggered to set a flag high and this flag will then enable a tag check within the menu function.?
I'm expecting my computer to slap me at this stage.. Ok I'm sure i'm not far away from being annoying at this stage but can an array be included in this serial interrupt or should I be staying away from that and trying to get each byte be read in by the UART exit the interrupt save said byte before the UART gets triggered for the next byte .... Confused is not the word right now
Have you googled for source code for a ring buffer yet?
Where your UART interrupt handler checks if there is a received character, inserts it into the buffer, and updates the write index.
The main loop sees that the read index doesn't match the write index so picks up the next character and does whatever is needed.
But then again - a UART interrupt handler could keep an index of RFID byte position and perform a digit comparison for that index position on the fly. And if all digits has been received set a "OK" flag.
Or if a difference is found set a fail flag and then wait to synchronize for a new RFID code.
Thanks for all the help everyone I don't understand how the FIFO ring buffer is working it's completely alien to me but I'm gonna have to call time on this code as I've a final report to complete on the project.. Maybe I'll be able to get back to it after I finish college but for the minute it's gonna have to sit on the back burner. Anyone who wants mention in the report just say as I have to reference my sources. Thanks again.
Some people demand complete code based on two sentences "requirements specifications".
Others don't even go look for code for a "standard concept" despite this world (including this site) being full with ready-to-use implementations.
Hey there ha ha don't worry iv tried a couple I'm not just looking for a specific Tailor made example for me to use its just that the code is 5% and the report is 25% gotta go with the priorities but I promise I'll work on it when I can get the time as I can't leave something like that undone