AVR16 串口通信问题

[复制链接]
615|1
 楼主| 132LJX123 发表于 2017-4-6 21:41 | 显示全部楼层 |阅读模式
#include <iom16v.h>
#include <macros.h>
#include "AVR.h"
#define uint unsigned int
#define uchar unsigned char
#define fos 8000000  //晶振
#define baud 9600 //波特率
/*************I/O口初始化************/
void port_init(void)
{
DDRB=0xff;
PORTB=0xff; //PB口设置为输出高电平 DDRD&=~(1<<PD0); //PD0设置为输入
DDRD|=(1<<PD1); //PD1设置为输出 PORTD&=~((1<<PD0)|(1<<PD1)); }
/*************串行异步通信初始化************/void usart_init(void)
{
CLI(); //关闭全局中断
UCSRA=0x00;
UCSRB=0x00;
UCSRC|=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //异步通信、一位停止位、八位数据位
UBRRH=((fos/16/baud)-1)%256; //取高八位
UBRRL=((fos/16/baud)-1)/256; //取低八位
UCSRB|=(1<<TXEN)|(1<<RXEN); //发送、接收使能
}
/*************发送函数************/
void usart_transmit(uchar data)
{
while( !(UCSRA&(1<<UDRE)) ); //等待数据寄存器空,这样才可以发送数据
UDR=data;
}
/*************接收函数************/
uchar usart_receive(void)
{
while( !(UCSRA&(1<<RXC)) ); //等待接收完成
return UDR;
}
void main(void)
{
uchar data;port_init();
usart_init();
while(1)
{
data=usart_receive();
PORTB=~data;
usart_transmit(data);
}
}
在串口调试助手上发送11等数字等上面接收显示的都是00,然后发送ff等六进制字母就没显示什么了,求解答
NE5532 发表于 2017-4-7 11:21 | 显示全部楼层
串口调试,先调TX,再调RX,专业课里串口的课程里有讲调试方法,供参考。

串口-我学习的第一个通讯接口
http://open.21ic.com/Video/index/id/6256
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部