预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共22页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

SPI原理SPI引脚配置/SS引脚功能当SPI被配置为从机时,/SS总是作为输入口。当/SS被外部置低时,SPI功能被激活,MISO变为输出口(如果被用户配置为输出口时),而其他成为输入。如果/SS被置“1”后,所有相关引脚都为输入口,同时SPI处于禁止状态不接收任何数据。与SPI接口相关的寄存器位4(MSTR):主/从机选择 当MSTR=1时,选择主机SPI模式;MSTR=0时,选择从机SPI模式。 位3(CPOL):时钟(SCK)极性选择 当该位被设置为“1”时,SCK在闲置时是高电平;当CPOL为“0”时,SCK在闲置时是低电平。 位2(CPHA):时钟(SCK)相位选择 CPHA位的设置决定了串行数据的锁存采样是在SCK时钟的前沿还是在SCK时钟的后沿。位1、0(SPR1、SPR0):时钟速率选择位(确定主机的SCK速率)SPI状态寄存器——SPSR位6(WCOL):写冲突标志位 如果在SPI接口的数据传送过程中,对SPI的数据存储器SPDR写入数据,将会置位WCOL。 清零WCOL标志只能通过软件方式:先读取SPI状态寄存器SPSR(读SPSR的操作将会自动清除SPIF位和WCOL位),然后再进行对SPI数据寄存器SPDR的操作处理。 位5、4、3、2、1:保留 在ATmage16中,这几位保留,读出为“0”。 位0(SPI2X):倍速SPISPI数据寄存器——SPDRSPI应用:扩展IO口参考程序:应用扩展:AD5320(12位dac)参考程序:do { temp=SPSR; } while(!(temp&0x80));//等待发送完毕 SPDR=0xff;//再发0xff过去 do { temp=SPSR; } while(!(temp&0x80));//等待发送完毕 PORTB|=0x08;//关闭转换 } }进一步扩展:双机通信从机程序:SPI应用之:MAX7219#include<iom16v.h>#defineucharunsignedcharvoidsend_data(ucharaddress,uchardate){uchartemp;PORTB&=0xef;SPDR=address;do{temp=SPSR;}while(!(temp&0x80));SPDR=date;do{temp=SPSR;}while(!(temp&0x80));PORTB|=0x10;}voidmain(){uchari;DDRB=0xbf;PORTB=0x10;SPCR=0x53;//01010001send_data(0x0b,0x03);send_data(0x0a,0x07);send_data(0x09,0xFf);send_data(0x0c,0x01);send_data(0x0f,0x00);for(i=1;i<=8;i++){send_data(i,i|0x80);}while(1);}