打印
[AVR单片机]

请教AVR单片机URAT串行通信

[复制链接]
2155|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ershisi|  楼主 | 2010-2-26 13:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void uart_send(uchar data)
{
   while(!(UCSRA&(BIT(UDRE)))) ;
   UDR=data;
   while(!(UCSRA&(BIT(TXC))));
   UCSRA|=BIT(TXC);  
}

上面的一小段程序为AVR串行通信发送一个字节数据的程序
关于UCSRA|=BIT(TXC); 这句话不太理解
1.本来while(!(UCSRA&(BIT(TXC))));这句话已经检测到TXC为1了,为什么还要多UCSRA|=BIT(TXC); 这句话将其置1呢?
2.置1干什么啊,我觉得应该是置0啊,就好象51的单片机里面的TI标志位一样。
请高手解释一下吧,谢谢!

相关帖子

沙发
laslison| | 2010-2-27 15:58 | 只看该作者
在AVR中是使用置1的方式来清除标志位的

使用特权

评论回复
板凳
maomao2126| | 2010-2-27 17:56 | 只看该作者
置1清零

使用特权

评论回复
地板
zhaoweige| | 2010-2-27 19:18 | 只看该作者
最好仔细看datasheet,AVR系列的MCU都有不错的中文翻译
还有编译器自带的头文件
这个都拿来问,急功近利

使用特权

评论回复
5
zlj2008| | 2010-2-27 22:12 | 只看该作者
可以这么理解 BIT(0),BIT(1)..... 这个命令是将 0位/或1位 清0 , 如果置1 则~BIT(0);

使用特权

评论回复
6
wangwo| | 2010-2-28 23:08 | 只看该作者
急功近利?夸张了吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

413

帖子

1

粉丝