#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等六进制字母就没显示什么了,求解答
|