我用AVR studio软件进行软件仿真一段程序如下。问题是运行时发现程序只是在 device_init()中的port_init()子函数中循环,根本不进SPI初始化函数,而且也不进while(1)大循环。我很苦恼,请大侠们给指导指导,谢谢。我用的编译软件是ICCAVR,仿真是AVR studio4.17版本
#include <iom16v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
#define mclk 8000000
//------------------------------------------------------------------------------
#define SPIF 7
//延时
void delay(unsigned k)
{
while(k)
{k--;
asm("nop");
}
}
//------------------------------------------------------------------------------
//端口初始化函数
void port_init()
{
DDRB=0XB0; //SCK、MOSI、SS置位为输出,MISO设置为输入
PORTB=0X00; //输出低电平,输入也是低电平
}
//------------------------------------------------------------------------------
//SPI初始化函数
void spi_init()
{
SPCR=0x51; //使能SPI;时钟选择为16分频;时钟极性(CPOL)为低电平,起始沿为上升沿,结束沿为下降沿;
//时钟相位(CPHA)在起始沿采样
}
//------------------------------------------------------------------------------
//芯片初始化函数
void device_init()
{
port_init();
spi_init();
}
//------------------------------------------------------------------------------
//SPI主机发送函数
void spi_master_send(uchar dat)
{
SPDR=dat;
while(!(SPSR&(1<<SPIF))); //等待传输结束
}
//------------------------------------------------------------------------------
//main
void main()
{
device_init();
while(1)
{
spi_master_send(0x55);
delay(1);
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>