SPI的问题

[复制链接]
7349|17
 楼主| wuming1106 发表于 2008-9-20 21:39 | 显示全部楼层 |阅读模式
spi, pc, ov, HC, AN
我的SPI的问题请教下高手~我也用万用表,一一对应了IO口,看IO口的输出是不是和我程序一样,碰到的问题是?我前面发送进去的数据,读出来却不是这个数据,请教下高手~<br />时序图(如图)<br />程序:;==========================接受数据======================================================================<br />SJJS:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A,00000011B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;PC(中断/数据线)输入<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCC,A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A,8<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XHCS_8,A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;循环次数8次<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;START:&nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PB.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;时钟频率置高电平<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NOP<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NOP<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PB.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;时钟频率置低电平<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SZ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;判断数据线数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JIA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;PC.0=1&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JIAN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;PC.0=0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JIA:&nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SJCC_8.7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;SJCC_8.7=1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BACK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;跳到左移<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JIAN:&nbsp;&nbsp;&nbsp;&nbsp;CLR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SJCC_8.7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;SJCC_8.7=0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BACK:&nbsp;&nbsp;&nbsp;&nbsp;RL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SJCC_8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;左移数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SDZ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XHCS_8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;判断到8次没<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;START&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;XHCS_8≠0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RET<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />;==========================发送数据========================================&nbsp;&nbsp;&nbsp;&nbsp;<br />SJFS:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A,00000010B&nbsp;&nbsp;&nbsp;&nbsp;;PC(中断输入/数据线输出)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCC,A<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A,8<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XHCS_8,A&nbsp;&nbsp;&nbsp;&nbsp;;循环次数8次<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;START1:&nbsp;&nbsp;&nbsp;&nbsp;SZ&nbsp;&nbsp;&nbsp;&nbsp;SJCC_8.7&nbsp;&nbsp;&nbsp;&nbsp;;判断发送数据最高位<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JMP&nbsp;&nbsp;&nbsp;&nbsp;JIA1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;SJCC_8.7=1&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JMP&nbsp;&nbsp;&nbsp;&nbsp;JIAN1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;SJCC_8.7=0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JIA1:&nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;&nbsp;&nbsp;&nbsp;PC.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;PC.0=1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JMP&nbsp;&nbsp;&nbsp;&nbsp;BACK1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;跳到左移<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JIAN1:&nbsp;&nbsp;&nbsp;&nbsp;CLR&nbsp;&nbsp;&nbsp;&nbsp;PC.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;PC.0=0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BACK1:&nbsp;&nbsp;&nbsp;&nbsp;RL&nbsp;&nbsp;&nbsp;&nbsp;SJCC_8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;左移数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PB.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;时钟频率置高电平<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NOP<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NOP<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PB.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;时钟频率置低电平<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SDZ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XHCS_8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;判断到8次了没<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;START1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;XHCS_8≠0&nbsp;&nbsp;&nbsp;&nbsp;
 楼主| wuming1106 发表于 2008-9-20 22:09 | 显示全部楼层

顶~~~

顶~~~~~请教高手~
 楼主| wuming1106 发表于 2008-9-20 22:17 | 显示全部楼层

哪位高手帮帮忙啊~

急啊~
xuyaqi 发表于 2008-9-21 10:51 | 显示全部楼层

没看明白你用的是什么CPU。

  
lyjian 发表于 2008-9-21 12:02 | 显示全部楼层

用的是什么CPU,控制什么芯片也得说清楚吧?

  
tyw 发表于 2008-9-21 13:54 | 显示全部楼层

要用示波器看哦

SPI是一个环形总线结构由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;假设下面的8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高位先发送。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;那么第一个上升沿来的时候&nbsp;数据将会是sdo=1;寄存器=0101010x。下降沿到来的时候,sdi上的电平将所存到寄存器中去,那么这时寄存器=0101010sdi,这样在8个时钟脉冲以后,两个寄存器的内容互相交换一次。这样就完成里一个spi时序。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;例子:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;假设主机和从机初始化就绪:并且主机的sbuff=0xaa,从机的sbuff=0x55,下面将分步对spi的8个时钟周期的数据情况演示一遍:假设上升沿发送数据&nbsp;<br /><br /><table class=ubb cellspacing=0><TR><td class=ubb>脉冲</td><td class=ubb>主机sbuff&nbsp;</td><td class=ubb>从机sbuff&nbsp;</td><td class=ubb>sdi&nbsp;</td><td class=ubb>sdo&nbsp;</td></TR><TR><td class=ubb>0</td><td class=ubb>10101010</td><td class=ubb>01010101</td><td class=ubb>0</td><td class=ubb>0</td></TR><TR><td class=ubb>1上</td><td class=ubb>0101010x</td><td class=ubb>1010101x</td><td class=ubb>0</td><td class=ubb>1</td></TR><TR><td class=ubb>1下</td><td class=ubb>01010100</td><td class=ubb>10101011</td><td class=ubb>0</td><td class=ubb>1</td></TR><TR><td class=ubb>2上</td><td class=ubb>1010100x&nbsp;</td><td class=ubb>0101011x</td><td class=ubb>1</td><td class=ubb>0</td></TR><TR><td class=ubb>2下</td><td class=ubb>10101001</td><td class=ubb>01010110</td><td class=ubb>1</td><td class=ubb>0</td></TR><TR><td class=ubb>3上</td><td class=ubb>0101001x</td><td class=ubb>1010110x</td><td class=ubb>0</td><td class=ubb>1</td></TR><TR><td class=ubb>3下</td><td class=ubb>01010010</td><td class=ubb>10101101</td><td class=ubb>0</td><td class=ubb>1</td></TR><TR><td class=ubb>4上</td><td class=ubb>1010010x</td><td class=ubb>0101101x</td><td class=ubb>1</td><td class=ubb>0</td></TR><TR><td class=ubb>4下</td><td class=ubb>10100101</td><td class=ubb>01011010</td><td class=ubb>1</td><td class=ubb>0</td></TR><TR><td class=ubb>5上</td><td class=ubb>0100101x</td><td class=ubb>1011010x</td><td class=ubb>0</td><td class=ubb>1</td></TR><TR><td class=ubb>5下</td><td class=ubb>01001010</td><td class=ubb>10110101</td><td class=ubb>0</td><td class=ubb>1</td></TR><TR><td class=ubb>6上</td><td class=ubb>1001010x</td><td class=ubb>0110101x</td><td class=ubb>1</td><td class=ubb>0</td></TR><TR><td class=ubb>6下</td><td class=ubb>10010101</td><td class=ubb>01101010</td><td class=ubb>1</td><td class=ubb>0</td></TR><TR><td class=ubb>7上</td><td class=ubb>0010101x</td><td class=ubb>1101010x</td><td class=ubb>0</td><td class=ubb>1</td></TR><TR><td class=ubb>7下</td><td class=ubb>00101010</td><td class=ubb>11010101</td><td class=ubb>0</td><td class=ubb>1</td></TR><TR><td class=ubb>8上</td><td class=ubb>0101010x</td><td class=ubb>1010101x</td><td class=ubb>1</td><td class=ubb>0</td></TR><TR><td class=ubb>8下</td><td class=ubb>01010101</td><td class=ubb>10101010</td><td class=ubb>1</td><td class=ubb>0</td></TR></table><br /><br /><br />这样就完成了两个寄存器8位的交换,上面的上表示上升沿、下表示下降沿,sdi、sdo相对于主机而言的。其中ss引脚作为主机的时候,从机可以把它拉底被动选为从机,作为从机的是时候,可以作为片选脚用。根据以上分析,一个完整的传送周期是16位,即两个字节,因为,首先主机要发送命令过去,然后从机根据主机的名准备数据,主机在下一个8位时钟周期才把数据读回来&nbsp;<br />SPI&nbsp;总线是Motorola公司推出的三线同步接口,同步串行3线方式进行通信:一条时钟线SCK,一条数据输入线MOSI,一条数据输出线MISO;用于CPU与各种外围器件进行全双工、同步串行通讯。SPI主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束中断标志;写冲突保护;总线竞争保护等。图3示出SPI总线工作的四种方式,其中使用的最为广泛的是SPI0和SPI3方式(实线表示):<br /><br /><img src="https://bbs.21ic.com/upfiles/img/200711/2007116141242970.gif"><br />图2&nbsp;&nbsp;&nbsp;SPI总线四种工作方式&nbsp;<br /><br />SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI主模块和与之通信的外设音时钟相位和极性应该一致。SPI接口时序如图3、图4所示。<br />二,.SPI功能模块的设计<br />根据功能定义及SPI的工作原理,将整个IP&nbsp;Core分为8个子模块:uC接口模块、时钟分频模块、发送数据FIFO模块、接收数据FIFO模块、状态机模块、发送数据逻辑模块、接收数据逻辑模块以及中断形式模块。<br />深入分析SPI的四种传输协议可以发现,根据一种协议,只要对串行同步时钟进行转换,就能得到其余的三种协议。为了简化设计规定,如果要连续传输多个数据,在两个数据传输之间插入一个串行时钟的空闲等待,这样状态机只需两种状态(空闲和工作)就能正确工作。<br />
hjh2008 发表于 2008-9-21 17:17 | 显示全部楼层

严重支持TYW!

“其中ss引脚作为主机的时候,从机可以把它拉底被动选为从机,作为从机的是时候,可以作为片选脚用。”<br /><br />这句话不是很明白能否解释一下?<br /><br />还有SPI的速度可达多少?
 楼主| wuming1106 发表于 2008-9-21 17:53 | 显示全部楼层

SPI的问题

谢谢楼上的高手们,我用的是合泰MCU,TYW,我想请问你下袄,那传感器的时序图我也发了,请教下,他上面的时序是低电平有效吧?而且是用了3线的,就是读写都用一根线的,比如给传感器初始化,肯定先发送地址,那发送地址的时候只管发送,不需要管接受的~3线的用法是不是更简单啊?而且接受的时候是不是也是低电平有效??
tyw 发表于 2008-9-21 19:07 | 显示全部楼层

仔细啃协议吧

<br />FlashFlex51&nbsp;MCU&nbsp;单主多从的SPI&nbsp;→&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://ww1.microchip.com/downloads/en/AppNotes/00966A_cn.pdf" target=_blank>http://ww1.microchip.com/downloads/en/AppNotes/00966A_cn.pdf</a><br />&nbsp;<br /><img src="https://bbs.21ic.com/upfiles/img/200711/2007116191840776.gif"><br />&nbsp;<br /><img src="https://bbs.21ic.com/upfiles/img/200711/200711619192608.gif"><br />&nbsp;<br /><img src="https://bbs.21ic.com/upfiles/img/200711/2007116191923636.gif"><br />&nbsp;<br /><img src="https://bbs.21ic.com/upfiles/img/200711/2007116191947566.gif"><br />&nbsp;<br /><img src="https://bbs.21ic.com/upfiles/img/200711/2007116192011217.gif"><br />&nbsp;<br /><img src="https://bbs.21ic.com/upfiles/img/200711/2007116192029589.gif"><br />&nbsp;<br /><img src="https://bbs.21ic.com/upfiles/img/200711/2007116192050152.gif"><br />&nbsp;<br /><img src="https://bbs.21ic.com/upfiles/img/200711/2007116192111548.gif"><br />&nbsp;<br /><img src="https://bbs.21ic.com/upfiles/img/200711/2007116192132433.gif"><br />&nbsp;<br /><img src="https://bbs.21ic.com/upfiles/img/200711/2007116192132433.gif"><br />&nbsp;<br /><img src="https://bbs.21ic.com/upfiles/img/200711/200711619224767.gif">
 楼主| wuming1106 发表于 2008-9-21 19:22 | 显示全部楼层

...

我用的MCU不自带spi的,所以要自己给时序,那应该&nbsp;咋办??
tyw 发表于 2008-9-21 21:11 | 显示全部楼层

93c46 演示程序

93c46&nbsp;演示程序&nbsp;<br />93c46是1k位串行EEPROM储存器。&nbsp;每一个储存器都可以通过DI/DO引脚写入或读出。它的存储容量为1024位,内部为128×8位或64×16位。93C46为串行三线SPI操作芯片,在时钟时序的同步下接收数据口的指令。指令码为9位十进制码,具有7个指令,读、擦写使能、擦除、写、全擦、全写及擦除禁止。该芯片擦写时间快,有擦写使能保护,可靠性高,擦写次数可达100万次,以下给出了93C46与单片机的接线图,和引脚说明。&nbsp;<table class=ubb cellspacing=0><TR><td class=ubb><br /><table class=ubb cellspacing=0><TR><td class=ubb></td></TR><TR><td class=ubb></td><td class=ubb><img src="http://www.51c51.com/TEST/XL1000/g1.jpg"></td></TR></table><br />&nbsp;&nbsp;<br /><br />说明:&nbsp;93c46的第6脚org为16/8位模式选择,&nbsp;XL2000套件第6脚接地,仅工作在8位模式下。&nbsp;</td><td class=ubb><br /><table class=ubb cellspacing=0><TR><td class=ubb></td></TR><TR><td class=ubb></td><td class=ubb><img src="http://www.51c51.com/TEST/XL1000/g2.jpg"></td></TR></table><br /></td></TR><TR><td class=ubb><br /><table class=ubb cellspacing=0><TR><td class=ubb></td></TR><TR><td class=ubb></td><td class=ubb><img src="http://www.51c51.com/TEST/XL1000/g3.jpg"></td></TR></table><br />XL2000的93C46部分原理图&nbsp;</td></TR></table><br /><img src="http://www.51c51.com/TEST/XL1000/g4.jpg">&nbsp;<br />接线方法:&nbsp;<br />1用一个4PIN数据排线一端插入CPU部分JP53(P3口)的P3.4,P3.5,P3.6,P3.7。另外一端插入93C46部分的输入端JP46.&nbsp;<br />2用一条8PIN的数据排线把CPU部份的P2口(JP52)接到八路指示灯部份的JP32。&nbsp;<br />此程序先把8路跑马灯的数据写入93C46,&nbsp;然后读出送P2口显示。&nbsp;运行程序可以观察到8路跑马灯。&nbsp;<br />为证明93C46的作用,&nbsp;可以拔下93c46的数据线,&nbsp;再次运行程序,&nbsp;则没有跑马灯。&nbsp;<img src="http://www.51c51.com/TEST/XL1000/2000SHIYAN/93C46.jpg">&nbsp;<br /><br />93C46的跑马灯运行照片&nbsp;<br /> READ&nbsp;EQU&nbsp;0&nbsp;;读93C46<br />WRITE&nbsp;EQU&nbsp;2&nbsp;;写入93C46<br />EWEN&nbsp;EQU&nbsp;4&nbsp;;&nbsp;93C46写入使能<br />EWDS&nbsp;EQU&nbsp;6&nbsp;;&nbsp;93C46写入禁止<br />CS&nbsp;BIT&nbsp;P3.7&nbsp;;&nbsp;93C46&nbsp;CS<br />CLK&nbsp;BIT&nbsp;P3.6&nbsp;;&nbsp;93C46&nbsp;CLK<br />DI&nbsp;BIT&nbsp;P3.5&nbsp;;&nbsp;93C46&nbsp;DI<br />DO&nbsp;BIT&nbsp;P3.4&nbsp;;&nbsp;93C46&nbsp;DO<br />ADR46&nbsp;EQU&nbsp;20H<br />ORG&nbsp;00H<br />START0:&nbsp;MOV&nbsp;21H,#00H&nbsp;;&nbsp;取地址码<br />MOV&nbsp;22H,#08H&nbsp;;&nbsp;8组8个码<br />MOV&nbsp;P3,#10H<br />MOV&nbsp;ADR46,#00H&nbsp;;93C46地址00H<br />START:&nbsp;MOV&nbsp;A,#EWEN&nbsp;;写入使能<br />CALL&nbsp;TO9346<br />MOV&nbsp;A&nbsp;,21H&nbsp;;载入取码指针<br />MOV&nbsp;DPTR,#TABLE&nbsp;;至TABLE取码<br />MOVC&nbsp;A,@A+DPTR<br />MOV&nbsp;R4,A&nbsp;;存入&quot;写入寄存器&quot;<br />MOV&nbsp;A,#WRITE&nbsp;;写入数据<br />CALL&nbsp;TO9346<br />MOV&nbsp;A,#EWDS&nbsp;;写禁止<br />CALL&nbsp;TO9346<br />INC&nbsp;21H&nbsp;;取下一个码<br />INC&nbsp;ADR46&nbsp;;下一个地址<br />CALL&nbsp;DELAY1<br />DJNZ&nbsp;22H,START<br />MOV&nbsp;R0,#30H&nbsp;;存入8051的RAM&nbsp;地址<br />MOV&nbsp;ADR46,#00H&nbsp;;93C46&nbsp;:00地址<br />MOV&nbsp;22H,#08H&nbsp;;&nbsp;93C46&nbsp;8个地址8个码<br />A1:&nbsp;MOV&nbsp;A,#READ&nbsp;;读(地址)的数据<br />CALL&nbsp;TO9346<br />MOV&nbsp;A,R4&nbsp;;93C46输出的数据载入ACC<br />MOV&nbsp;@R0,A<br />INC&nbsp;ADR46&nbsp;;读下一个地址<br />INC&nbsp;R0&nbsp;;下一个RAM<br />DJNZ&nbsp;22H,A1<br />A2:&nbsp;MOV&nbsp;22H,#08H<br />MOV&nbsp;R0,#30H<br />OUTPUT:MOV&nbsp;A,@R0<br />MOV&nbsp;P2,A&nbsp;;输出至P2<br />CALL&nbsp;DELAY1&nbsp;;<br />INC&nbsp;R0<br />DJNZ&nbsp;22H,OUTPUT<br />JMP&nbsp;A2<br />TO9346:&nbsp;SETB&nbsp;CS&nbsp;;93C46&nbsp;CS=1<br />SETB&nbsp;DI&nbsp;;DI=1<br />SETB&nbsp;CLK&nbsp;;CLK=1<br />CALL&nbsp;DELAY&nbsp;;启动位<br />CLR&nbsp;CLK&nbsp;;CLK=0<br />CALL&nbsp;DELAY<br />MOV&nbsp;DPTR,#JPTBL46<br />JMP&nbsp;@A+DPTR&nbsp;;依ACC值跳至相关地址<br />JPTBL46:&nbsp;AJMP&nbsp;SREAD&nbsp;;读<br />AJMP&nbsp;SWRITE&nbsp;;写<br />AJMP&nbsp;SEWEN&nbsp;;写使能<br />AJMP&nbsp;SEWDS&nbsp;;写禁止<br />SREAD:<br />MOV&nbsp;A,#80H&nbsp;;送操作码10<br />CALL&nbsp;SDATA<br />MOV&nbsp;A,ADR46&nbsp;;载入93C46地址<br />CALL&nbsp;SADR&nbsp;;写入7位地址(DI)<br />CALL&nbsp;RDT46&nbsp;;读出数据(DO),存入3CH<br />MOV&nbsp;R4,A<br />;CALL&nbsp;RDT46&nbsp;;读出数据(DO),存入3DH<br />;MOV&nbsp;3DH,A<br />JMP&nbsp;EX9346<br />SWRITE:<br />MOV&nbsp;A,#40H&nbsp;;送操作码01<br />CALL&nbsp;SDATA<br />MOV&nbsp;A,ADR46&nbsp;;载入93C46地址<br />CALL&nbsp;SADR&nbsp;;写入7位地址<br />MOV&nbsp;A,R4&nbsp;;写入(3CH)数据<br />CALL&nbsp;SDT46<br />;MOV&nbsp;A,3DH&nbsp;;写入(3DH)数据<br />;CALL&nbsp;SDT46<br />JMP&nbsp;EX9346<br />SEWEN:<br />CLR&nbsp;A&nbsp;;送操作码00<br />CALL&nbsp;SDATA<br />MOV&nbsp;A,#60H&nbsp;;写使能操作码11XXXXX<br />CALL&nbsp;SADR<br />JMP&nbsp;EX9346<br />SEWDS:<br />CLR&nbsp;A&nbsp;;送操作码00<br />CALL&nbsp;SDATA<br />CLR&nbsp;A&nbsp;;写7位禁止操作码000XXXX<br />CALL&nbsp;SADR<br />EX9346:&nbsp;CLR&nbsp;CS&nbsp;;CS=0<br />RET<br />SADR:<br />CLR&nbsp;C<br />RLC&nbsp;A<br />MOV&nbsp;R3,#7<br />JMP&nbsp;SD1<br />SDATA:<br />MOV&nbsp;R3,#2<br />JMP&nbsp;SD1<br />SDT46:&nbsp;MOV&nbsp;R3,#8&nbsp;;写入8位数据<br />SD1:&nbsp;RLC&nbsp;A&nbsp;;<br />MOV&nbsp;DI,C<br />SETB&nbsp;CLK<br />CALL&nbsp;DELAY<br />CLR&nbsp;CLK<br />CALL&nbsp;DELAY<br />DJNZ&nbsp;R3,SD1<br />RET<br />RDT46:&nbsp;MOV&nbsp;R3,#8&nbsp;;读出8位数据<br />RD1:&nbsp;SETB&nbsp;CLK<br />CALL&nbsp;DELAY<br />CLR&nbsp;CLK<br />CALL&nbsp;DELAY<br />MOV&nbsp;C,DO<br />RLC&nbsp;A<br />DJNZ&nbsp;R3,RD1<br />RET<br />DELAY:&nbsp;MOV&nbsp;R7,#0FH<br />DJNZ&nbsp;R7,$<br />RET<br />DELAY1:&nbsp;MOV&nbsp;R4,#20<br />D1:&nbsp;MOV&nbsp;R5,#20<br />D2:&nbsp;MOV&nbsp;R6,#248<br />DJNZ&nbsp;R6,$<br />DJNZ&nbsp;R5,D2<br />DJNZ&nbsp;R4,D1<br />RET<br />TABLE&nbsp;:&nbsp;DB&nbsp;0FEH&nbsp;,0FDH&nbsp;,0FBH,&nbsp;0F7H&nbsp;;广告一个灯左移<br />DB&nbsp;0EFH&nbsp;,0DFH&nbsp;,0BFH,&nbsp;7FH&nbsp;;<br />END<br />
 楼主| wuming1106 发表于 2008-9-21 21:49 | 显示全部楼层

xiexie

很感谢,我自己再仔细研究~
 楼主| wuming1106 发表于 2008-9-21 22:18 | 显示全部楼层

顶~~~

我怀疑是我延时不够,只打了2个NOP明天在去试试~我觉得我那个程序就是看了51程序改变的,刚刚也看了那PIC的差不多,他打脉冲的时候用了个延时程序,所以明天我也去试试~
cyber211 发表于 2009-6-20 21:11 | 显示全部楼层
Great!Wanderful
mxh0506 发表于 2009-6-21 10:08 | 显示全部楼层
好资料,谢谢了!
gfs0521 发表于 2009-6-25 09:13 | 显示全部楼层
学习了
标注一下,呵呵
wdwd321 发表于 2013-4-12 15:05 | 显示全部楼层
学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

58

帖子

1

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