|
STC15F2K60S2 调试spi出现的问题
[复制链接]
//芯片的工作频率为11.0592MHz
#include "STC15F2K60S2.h"
#include "intrins.h"
#define BYTE unsigned char
#define WORD unsigned int
#define S1_S0 0x40 //P_SW P3.0 RXD P3.1 TXD
#define S1_S1 0x80
#define SPIF 0x80 //SPSTAT.7 传输完成标志
#define WCOL 0x40 //SPSTAT.6 写冲突标志
#define SSIG 0x80 //SPCTL.7
#define SPEN 0x40 //SPCTL.6
#define DORD 0x20 //SPCTL.5
#define MSTR 0x10 //SPCTL.4
#define CPOL 0x08 //SPCTL.3
#define CAHA 0x04 //SPCTL.2
#define SPDHH 0x00 //CPU_CLK/4
#define SPDH 0x01 //CPU_CLK/16
#define SPDL 0x02 //CPU_CLK/64
#define SPDLL 0x03 //CPU_CLK/128
void UartInit(); //MCU 串口1初始化
void InitSPI(); //MCU SPI初始化
void delay50us(); //延时函数 50us
///////////////////////////////////////////////////////////
void main()
{
delay50us(); //延时等待外围器件稳定
UartInit(); //初始化串口
InitSPI(); //初始化SPI
SPDAT = 0X66;
while (!RI); //查询串口标志位
RI=0;
SBUF = SPDAT;
}
///////////////////////////////////////////////////////////
//*********SPI初始化********///
void InitSPI()
{
SPCTL = SPEN|MSTR; //0xdf 使能SPI,MSB先发送,主机,SCK空闲高,128分频
SPDAT = 0X66; //初始化SPI数据
SPSTAT = SPIF | WCOL; //清除SPI状态位
}
void UartInit() //9600bps@11.0592MHz
{
ACC = P_SW1;
ACC &= ~(S1_S0 | S1_S1); //S1_S0=0 S1_S1=0
P_SW1 = ACC; //P3.0 RXD P3.1 TXD
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xDC; //设定定时初值
TH1 = 0xDC; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
//ES = 1; //使能串口中断
//EA = 1;
}
void delay50us()
{
BYTE i, j;
_nop_();
i = 1;
j = 134;
do
{
while (--j);
} while (--i);
}
|
|