[AVR单片机] 请教AVR单片机URAT串行通信

[复制链接]
2753|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都有不错的中文翻译
还有编译器自带的头文件
这个都拿来问,急功近利
zlj2008 发表于 2010-2-27 22:12 | 显示全部楼层
可以这么理解 BIT(0),BIT(1)..... 这个命令是将 0位/或1位 清0 , 如果置1 则~BIT(0);
wangwo 发表于 2010-2-28 23:08 | 显示全部楼层
急功近利?夸张了吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

413

帖子

1

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