打印
[AVR单片机]

AVR 这几条语句什么意思?

[复制链接]
2920|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
suoma|  楼主 | 2010-1-10 23:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
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))

使用特权

评论回复
5
wangwo| | 2010-1-14 22:28 | 只看该作者
这么详细!

使用特权

评论回复
6
liliang9554| | 2010-1-17 22:31 | 只看该作者
4楼好人一个

使用特权

评论回复
7
maomao2126| | 2010-1-18 09:53 | 只看该作者
4 楼很详细

使用特权

评论回复
8
zhuimeng08| | 2010-1-21 15:48 | 只看该作者
4楼说的很明白啊

使用特权

评论回复
9
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,不就判断出这一位的高低了吗?

使用特权

评论回复
10
xwj| | 2010-1-23 20:46 | 只看该作者
就是要为零啊,怎么了?

使用特权

评论回复
11
xiaoxin1986| | 2010-1-24 00:04 | 只看该作者
4楼的写的很详细吗,学习了

使用特权

评论回复
12
suoma|  楼主 | 2010-1-24 16:14 | 只看该作者
10楼的点拨很到位

使用特权

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

本版积分规则

82

主题

714

帖子

5

粉丝