void Init_CLK()//系统时钟初始化
{
uchar j;
WDTCTL = WDTPW + WDTHOLD; //看门狗控制寄存器WDTCTL,禁止看门狗
//-----------------------int clock--------------------- //
BCSCTL1 &= ~(XT2OFF+XTS); //启用XT2 8M晶体 ,ACLK为XT1
// BCSCTL2 |= SELM1; //MCLK 为 XT2,不分频
// BCSCTL2 |= SELS; //SMCLK 为 XT2,不分频
//-------------------等待时钟源转换完成-----------------//
do
{
IFG1&=~OFIFG;//清振荡器失效标志
for(j=0xFF;j>0;j--);//延时,待稳定.
}
while((IFG1&OFIFG)!=0);//若振荡器失效标志有效
BCSCTL2 |= SELM_2+SELS+DIVS_3; // MCLK = XT2 = 8M ; SMCLK = XT2/8 = 1M
}
void Init_SPI(void)
{
UCTL0 |=SWRST;
SWRST=1,设置完成后SWRST=0。
UCTL0 |= CHAR+SYNC+MM; //spi主模式,8位数据
UTCTL0 = STC+ SSEL1; //3线模式,SSEL1选MCLK,SSEL0选ACK
UTCTL0 = CKPL; //上升沿发送,下降沿接收
UBR00 = 0x0A; //9600=03
UBR10 = 0x00;
UMCTL0 = 0x00;
ME1 |= USPIE0;
UCTL0 &=~ SWRST;
P3SEL |= 0x0E; //active P3.0 & P3.3 for SPI//选择IO口功能:0是IO口,1模块
P3DIR |= 0x0B; //P3.1(SIMO)& P3.3(UCLK)//IO口方向
P3OUT |= BIT0;
//IE1 |= URXIE0;
IE1 &=~ URXIE0; //接收中断允许, IE1 &=~ URXIE0中断取消;
//IE1 |= URXIE0+UTXIE0;
//_EINT();//开中断,
}
unsigned char spiSendByte(unsigned char data)
{
while((IFG1 & UTXIFG0)==0);
// while (!(UTCTL0 & TXEPT));//判断数据为空
TXBUF0 = data;
// while ((UTCTL0 & TXEPT)==0);
while ((IFG1 & URXIFG0)==0);
return(RXBUF0);
}
unsigned char SPReadbyte(void)
{
return spiSendByte(0);
}
程序一直停在 while ((IFG1 & URXIFG0)==0);不知道为什么,第一次用SPI,求大神帮助啊
ME1 = UTXE0 + URXE0 ;//允许收发了没?
ME2 |= USPIE1; // Module enable模块使能了没?
还有就是你使用哪个型号的430?