Hi,
I have found some unusual USART behaviour when i was trying to send characters from USART1 of my AT90CAN128 to the PC terminal. Below is the code that i have been using for the same. The problem is, what i am getting on my PC hyperterminal is some garbage. I did some calculations and found that there was a difference of 128 between the characters sent and the character received. For example, if i sent 0 i received 128 and if i sent 10 i received 10+128 = 138.
The same code works well with the USART0. Also, i checked the waveforms on my oscilloscope by probing on the controller pin(TXD1) and on the transmit pins of MAX232 (before RS232). The patterns were almost identical. What i was wondering is that whether my USART was corrupt internally?
While on chip debugging with Atmel's JTAG ICE mkII, i found that the USART's data register UDR1, in the IO register window, was still showing zero even when i have put a breakpoint at the place where i was assigning the data to the USART data register for transmitting. Kindly, help me overcome this problem.
#include
#define F_CPU 16000000L // F_CPU = 16MHz #define BAUD 9600 // Baudrate = 9600
void USART1_Init () { /* Set baud rate */ UBRR1H = (unsigned char) (((F_CPU/(16L*BAUD))-1) >> 8); UBRR1L = (unsigned char) ((F_CPU/(16L*BAUD))-1);
/* Set frame format: 8data, no parity & 1 stop bits */ UCSR1C = (0