PROTUES仿真avr16串口不发送

以下是一个AVR16的测试程序,外部8MHz晶振。为什么能收到信息。但是串口不发送。求指教。。#include<avr/io.h>#include<avr/interru... 以下是一个AVR16的测试程序,外部8MHz晶振。为什么能收到信息。但是串口不发送。求指教。。

#include <avr/io.h>
#include <avr/interrupt.h>

#define PIN_TX 1
#define PIN_RX 0

char temp = 0x55;

//9200,8,n,1
void uart_init(void)
{
UCSRC = (1 << URSEL) | (1 << UCSZ1) | (1 <<UCSZ0);
UBRRH = 0;
UBRRL = 51;
UCSRA = 0x00;
UCSRB = (1 << RXCIE) | (1 << RXEN) | (1 << TXEN);
}

void uart_char_send(void)
{
while( !(UCSRA & (1 << UDRE)) ) ;
UDR = temp;
while( !(UCSRA & (1 << TXC)) );
UCSRA |= 1 << TXC;
}

ISR(USART_RXC_vect)
{
while( !(UCSRA & (1 << RXC)) );
PORTB = UDR;
uart_char_send();
}

int main(void)
{
DDRB = 0xff;
PORTB = 0x55;
DDRD = (1 << PIN_TX);
PORTD = 0xff;
uart_init();
sei();
while(1) {
//PORTB = temp;
}

return 0;
}
Atmega16的芯片啊。。
展开
 我来答
百度网友4884402e0
2014-01-14 · 超过19用户采纳过TA的回答
知道答主
回答量:53
采纳率:100%
帮助的人:52.3万
展开全部
开启发送中断了吗?还有我记得接收到的数据是在UDRE里面的吧?读出UDRE就可以得到数据,还有UDRE==null的发送完成,再打开接收,mega16的发送接收让锋的数据寄存器是公用的,所以发送枯碧后再开启坦败晌接收,接收后再打开发送,时序控制好。
更多追问追答
追问
UDRE只是一个标志位啊。。UDR是数据放的地方啊。。中断我也开了。。UCSRB里面的中断不都开了么。。
追答
UDR里面的数据有可能接收到就被发出去了,所以你做一个控制,发送完UDR把0<< TXEN,再1 << RXEN,UDR接收完1<< TXEN,再0 << RXEN.
zyl102600
2014-01-14 · TA获得超过678个赞
知道小有建树答主
回答量:702
采纳率:100%
帮助的人:716万
展开全部
要看你的串口芯片用的掘桥扒是哪种了,需要了解芯片的接收发送的限制,比如芯片的接收发送使能。看看数据手册再消逗说吧。判昌
追问
Atmega16的芯片啊。。
追答
看看你的这款芯片,有没有涉及到 串口的发送使能,有的话使能有没有开呢?
另外,如果是实际的电路还要外围有没有串口芯片,比如232 或者485之类的,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式