以下程序,在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 Dly
time)
{
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');
}
}
有没有可能是我硬件的问题,这块板只是一块调试用的板,上面有2个晶振,但是可以通过去掉相对应的电阻去控制使用哪个晶振,所以晶振的两条线是不一样长的。但是显示屏的程序可以正常显示。
麻烦各位大牛能否指点一二。
一周热门 更多>