This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

8051 interrupts

I am trying to generate an interrupt when a byte is received via the serial port of an Atmel AT89C51. I am not having much luck. Here is my code:

#include <reg51.h>
#include <CTYPE.H>
#include <STDIO.H>
#include <INTRINS.H>

int big_d, count, dogg, i, j;

void rcv (void) interrupt 4 
{
	big_d = _getkey();
	count++;
	dogg = 1;
	RI = 0;
}

void main(void)
{
	SCON  = 0x50;		/* SCON: mode 1, 8-bit UART, enable rcvr */
    TMOD |= 0x20;       /* TMOD: timer 1, mode 2, 8-bit reload */   
    TH1   = 253;        /* TH1:  reload value for 9600 baud @ 11.0592MHz */
    TR1   = 1;          /* TR1:  timer 1 run */          
    TI    = 1;          /* TI:   set TI to send first char of UART */
	ES = 1;				/* enable serial interrupts */

	dogg = 0;
	count = 0x30;
do{
	putchar(count);
	for(j=0; j<255; j++)
	{
		for(i=0; i<255; i++)
		{
			_nop_();
			_nop_();
			_nop_();
			_nop_();
		}
	}
	if(dogg == 1)
	{
		putchar(count);
		printf("\n");
		putchar(big_d);
		printf("\n\n\n");
		dogg = 0;
	}
}while(1);
}

Any suggestions or corrections to my code would be great. Thanks

Parents
  • Do I need to send my characters in my interrupt subroutine as well?

    Well, technically speaking, no, you don't need to send characters from the interrupt. However, if you enable the serial interrupt, you will receive an interrupt when TI is set or when RI is set. And, you will have to do a lot of work to get around this.

    The example link that I provided already handles serial transmit and receive in the interrupt, so you don't have to write anything.

    Jon

Reply
  • Do I need to send my characters in my interrupt subroutine as well?

    Well, technically speaking, no, you don't need to send characters from the interrupt. However, if you enable the serial interrupt, you will receive an interrupt when TI is set or when RI is set. And, you will have to do a lot of work to get around this.

    The example link that I provided already handles serial transmit and receive in the interrupt, so you don't have to write anything.

    Jon

Children
  • "The example link that I provided already handles serial transmit and receive in the interrupt, so you don't have to write anything."

    Yes, I have used the example code that Jon cited and can confirm that it really does work - just like it says on the tin!