wb5846410 发表于 2008-11-30 13:30:56

MEGA8 spi主机模式下ss问题【恢复】

#include <mega8.h>

#include <delay.h>

#include <spi.h>

#define sa PORTB.1

#define ss PORTB.2



void main(void)

{

unsigned char i=1;

PORTB=0x00; //

DDRB=0xef; //miso口设置为输入,其他输出



PORTD=0x00;

DDRD=0xFF;



SPCR=0x50; //启动spi 模式设置为0,主机模式

SPSR=0x00;



while (1)

{

sa=0; //关闭cd4094输出

//ss=0; 

spi(i); //spdr发送一个字节,通过cd4094输出

sa=1; //启动,锁存4094数据 

// ss=1; //ss=1后,停止spi,仿真现象是只输出一次i=1

if(++i>9)i=0;

delay_ms(200);

} 

}

/* 有个问题,

1: 按照资料上所说,当设置SPI为主机模式的时候,ss端口如果设置为输出,则该引脚作为通用输出口,

不影响spi系统。但在实际proteus仿真时候,发现如果ss(PORTB.2)置1,将关闭spi,表现现象为

在while(1)循环程序中,将sa置换成ss ,仿真现象是只输出一次i=1

2: 同样的程序,在mega48主机模式下,运行正常,ss 只是作为io控制。而在mega8下不能运行,是不是

M8的ss有特殊作用还是软件仿真问题或者程序问题?

zxq6 发表于 2008-12-3 21:49:50

楼主还是真刀真枪的上吧。

NE5532 发表于 2008-12-3 21:42:26

不推荐用Protus,很误事

litchiate 发表于 2008-11-30 14:36:44

发现过同样的问题.



spi硬件控制点阵,当使用proteus仿真时,扫描一行就不动了.

只好把硬SPI换成软件模拟的才能仿真.



实际情况都是行的,试过了.

Gorgon_Meducer 发表于 2008-11-30 14:03:19

别使用proteus仿真。主机模式下就是要通过SS引脚的普通输出模式来控制从机的SS信号的。

仿真不等于实际。

本贴被 Gorgon Meducer 编辑过,最后修改时间:2008-11-30,14:03:46.

FROG0007 发表于 2009-5-27 17:47:40

我也用PROTEUS遇到了同样的问题,看来还是得来真的~~

cyr_hongfeng 发表于 2009-5-28 10:23:19

我实际遇到的问题:(相同代码下)

   在PROTEUS中,使用M16仿真12864,当晶振为12M的时候仿真正确,当11.0592M时也正确,换成1M不显示,换成2M不显示,8M不显示,7.3728M不显示,4M正常显示。

   实际使用中,晶振从内部1M,2M,7.3728M,8M,12M,16M都正确显示,24M不能正确显示,我用的是MEGA16L

0620221 发表于 2009-6-12 10:30:10

没钱啊 不用不行啊!!!!
页: [1]
查看完整版本: MEGA8 spi主机模式下ss问题【恢复】