关于AVR与PC串口通信问题
时间:10-02
整理:3721RD
点击:
我想在单片机AVR发送一个数字,VB上显示同样的数字,AVR那应该怎么发。我的AVR发送代码是
void send(uchar x)
{
while(!(UCSR0A&0x20));
UDR0=x;
}
可是这样发我用串口通信助手上十六进制接受的并不是我要发的数字的十六进制 比如我发10,send(10),串口助手显示的是98 80 ,到底AVR上怎么发,VB上怎么接收才能发一个数字,VB显示相同的数出来
void send(uchar x)
{
while(!(UCSR0A&0x20));
UDR0=x;
}
可是这样发我用串口通信助手上十六进制接受的并不是我要发的数字的十六进制 比如我发10,send(10),串口助手显示的是98 80 ,到底AVR上怎么发,VB上怎么接收才能发一个数字,VB显示相同的数出来
你的波特率设置是不是有问题呀?
怎么发送一个数,收到两个数呢?
你可以参考一下我的代码,你是用Atmega128吗?我的是ATMega16的
编译器是atmel Studio6.2
- void Init_USART()
- {
- UCSRB|=_BV(TXEN)|_BV(RXEN)|_BV(RXCIE); //使能发送
- UCSRC|=_BV(URSEL)|_BV(UCSZ1)|_BV(UCSZ0);//8位数据位
- UBRRL=(F_CPU/19200/16-1)%256;
- UBRRH=(F_CPU/19200/16-1)/256;
- }
- //发送一个字节
- void TxByte(u8 Byte)
- {
- UDR=Byte;
- while(!(UCSRA&_BV(UDRE)));
- }
- //发送一个字
- void TxWord(u16 Word)
- {
- TxByte(Word/256);//发送高字节
- TxByte(Word%256);//发送低字节
- }