|
#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有特殊作用还是软件仿真问题或者程序问题? |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|