找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2149|回复: 0
打印 上一主题 下一主题
收起左侧

ATmega126的串口通信问题

[复制链接]
回帖奖励 10 黑币 回复本帖可获得 1 黑币奖励! 每人限 1 次(中奖概率 80%)
跳转到指定楼层
楼主
ID:65146 发表于 2015-3-3 18:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面是程序:
/*****************************************************
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写了类似的程序,也是只能接收两位,超过两位的接收不到,求大神解释一下可能出现的问题,跪谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表