ATMEGA1280 简单的串口程序,发送数据不正常(没分了,各位高抬贵手!!!)

2019-07-15 13:54发布

以下程序,在ATMEGA128 中输出正常,但是稍做修改,
在ATMEGA1280 中输出不正常,输出内容为
€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€
€€€€€€€€€€€€€€€€€€€
所用的串口芯片电路图完全一样.

#define TESTMODE   1  // 0:atmega128      1:atmega1280  
#if (TESTMODE == 0)
#include  <iom128v.h> //atmega128
// #pragma interrupt_handler Uart0RxInterrupt:19  //422 atmega128
#endif
#if (TESTMODE == 1)
#include  <iom1280v.h>  //atmega1280
// #pragma interrupt_handler Uart0RxInterrupt:26  //422 atmega1280
#endif
#include  <macros.h>
#include  <string.h>
#include  <stdio.h>
#include  <math.h>
#define uchar unsigned char
#define uint unsigned int
#define mclk 7372800  
uint baud=9600;
uchar Uart0RxHead=0,Uart0RxTail=0,Uart0Flag=0;
uchar Uart0RxTable[256];
void Uart0Init(void)//RS422
{
UCSR0B=0X00;
UCSR0A=0X00;
UCSR0C=0X06;
UBRR0H=(mclk/baud/16-1)/256;
UBRR0L=(mclk/baud/16-1)%256;
UCSR0B=(1<<TXEN0)|(1<<RXEN0)|(1<<RXCIE0);  
SREG=BIT(7;
}
void Uart0SendByte(uchar data)
{
UDR0 = data;
while(!(UCSR0A && (1<<TXC0)));
UCSR0A |= (1<<TXC0);   
}
void Uart0Clear(void)
{
Uart0RxHead=Uart0RxTail=0;
}
void Delay(uint Dlytime)
{
  while(DlyTime--);
}
void UartAllInit(void)
{
Uart0Init();
Uart0Clear();
}
void main(void)
{
PORTE=0x62;//01100010 (0,1)RS422,(2~6)DAC8512
DDRE=0xFE; //11111110  RS422(Tx:PE1,Rx:PE0)
Delay(2000);
UartAllInit();

while(1)
{
  Uart0SendByte('A');
}
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。