下面是程序:
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Professional
Automatic Program Generator
?Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
Project :
Version :
Date : 2015/3/3
Author : NeVaDa
Company :
Comments:
Chip type : ATmega128
Program type : Application
AVR Core Clock frequency: 7.372800 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 1024
*****************************************************/
#include <mega128.h>
#include <delay.h>
#include <string.h>
#define F_CPU 7372800
#define BAUDRATE 9600
unsigned char str1[10];
unsigned char j=0;
void init()
{
DDRC=0XFF;
DDRE=0B11111110;
PORTE=0B11111111;
UCSR0B=0B00000000; //關閉USART0
UCSR0A=0B00000000; //不使用倍速發送
UCSR0C=0B00000110;
UBRR0L= (F_CPU/BAUDRATE/16-1)%256;
UBRR0H= (F_CPU/BAUDRATE/16-1)/256;
UCSR0B=0x98;
#asm("sei") //全局中斷使能 匯編語言
}
void putchar(unsigned char c) //串口0發送字符
{
while(!UDRE0);
UDR0=c;
while(!TXC0);
}
interrupt [USART0_RXC] void USART0_RCV_INT(void)
{
UCSR0B&=~0X80; //接收完畢中斷不使能
str1[j]=UDR0;
j++;
UCSR0B|=0x80; //接收完畢中斷使能
}
void main(void)
{
init();
delay_ms(5000);
putchar('A');
putchar('T');
putchar('a');
putchar('t');
putchar('a');
putchar('t');
}
用串口助手只能接收到"A""T"兩個字符,無亂碼,我用ATmega16寫了類似的程序,也是只能接收兩位,超過兩位的接收不到,求大神解釋一下可能出現的問題,跪謝!
|