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');
}
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
lqgscp
1楼-- · 2019-07-15 18:27
{:16:}
有没有可能是我硬件的问题,这块板只是一块调试用的板,上面有2个晶振,但是可以通过去掉相对应的电阻去控制使用哪个晶振,所以晶振的两条线是不一样长的。但是显示屏的程序可以正常显示。
麻烦各位大牛能否指点一二。
lqgscp
2楼-- · 2019-07-15 19:22
IMG_20160520_101639.jpg
lqgscp
3楼-- · 2019-07-15 22:59
{:16:}{:16:}
HEUTWZ2017
4楼-- · 2019-07-16 04:25
您好 我也是初学者遇到了同样的问题 请问楼主的问题解决了吗?

一周热门 更多>