[AVR单片机] AVR 这几条语句什么意思?

[复制链接]
3733|11
 楼主| suoma 发表于 2010-1-10 23:29 | 显示全部楼层 |阅读模式
unsigned char mmcSendByte(unsigned char data)
{
unsigned char tmp;
SPDR = data;
while( !(SPSR & (1 << SPIF)) );
tmp = SPDR;
return tmp;
}
ningling_21 发表于 2010-1-11 10:48 | 显示全部楼层
大体上看是向**外部设备发送数据的...
Karlshen 发表于 2010-1-11 23:02 | 显示全部楼层
大体上看是向**外部设备发送数据的...
ningling_21 发表于 2010-1-11 10:48

:L
huamunv 发表于 2010-1-12 23:25 | 显示全部楼层
这是用AVR的SPI接口进行发送和接收的函数
unsigned char mmcSendByte(unsigned char data)
{
unsigned char tmp;
SPDR = data;//把发送的数据放入SPI发送缓冲寄存器中
while( !(SPSR & (1 << SPIF)) ); //等待发送完成标志SPIF置1,置1表示发送完成
tmp = SPDR;//SPI是双向通讯,发送完成后,从机要发送的数据会存入SPDR中
return tmp;//返回值是接收到的从机发送的数据
}
while( !(SPSR & (1 << SPIF)) ); 这条语句不好理解,在AVR的H文件中有定义,SPIF就是0-7数字中的一个,SPIF是SPSR寄存器中的一位,假设SPIF为2,那么上述语句就while(!(SPSR&0X02))
wangwo 发表于 2010-1-14 22:28 | 显示全部楼层
这么详细!
liliang9554 发表于 2010-1-17 22:31 | 显示全部楼层
4楼好人一个
maomao2126 发表于 2010-1-18 09:53 | 显示全部楼层
4 楼很详细
zhuimeng08 发表于 2010-1-21 15:48 | 显示全部楼层
4楼说的很明白啊
xwj 发表于 2010-1-23 20:34 | 显示全部楼层
SPSR是个只能8位一起读取的寄存器,读出来的是8位的数据,而实际上却是要判断其中的一位,所以当然要把其他的位屏蔽掉。

而(1 << SPIF)回事什么效果呢?这时你就要把1理解成8位的二进制了:0b00000001,然后左移x位,其中唯一的一个1是不是就移到了中间需要的位置了?比如x为1(随便举例的)的话1<<3就是0b00001000了。
这时,SPSR &0b00001000之后是不是就只有第3位不变,其他位就全部为0 了?
那再判断这个值是否非0,不就判断出这一位的高低了吗?
xwj 发表于 2010-1-23 20:46 | 显示全部楼层
就是要为零啊,怎么了?
xiaoxin1986 发表于 2010-1-24 00:04 | 显示全部楼层
4楼的写的很详细吗,学习了
 楼主| suoma 发表于 2010-1-24 16:14 | 显示全部楼层
10楼的点拨很到位
您需要登录后才可以回帖 登录 | 注册

本版积分规则

82

主题

714

帖子

5

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