#include <msp430x14x.h>
char MST_Data = 0xff,SLV_Data = 0xff;
void main( void )
{
unsigned int i;
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
P1OUT = 0x000;
P1DIR |= 0x001; //设置P1.0为输出
P1SEL = 0x10; P3SEL = 0x00e; //设置P3端口为SPI模式
P3OUT = 0x020; //设置P3.4为触发中断显示
P3DIR |= 0x030; //P3.5为从机初始化
U0CTL = CHAR + SYNC + MM + SWRST;//8位数据位,SPI模式,主机模式
U0TCTL = CKPL + SSEL1 + STC; // 时钟极性(下降沿),SMCLK模式,3线模式
U0BR0 = 0x000;
U0BR1 = 0x000;
U0MCTL = 0x000; //不用调整,都为零
ME1 = USPIE0; //使能模块
U0CTL &= ~SWRST; //SPI使能
IE1 |= URXIE0; //接收终端使能/* UART0 Interrupt Enable Register */
_EINT(); //开总中断
P3OUT &= ~0x020; //从机复位
P3OUT |= 0x020; i=50000;
do(i–);
while(i != 0);
while(1)
{
TXBUF0 = MST_Data; //传输第一个字符
LPM0; //关CPU,进入低功耗模式
}
}
#pragma vector = USART0RX_VECTOR
__interrupt void SPI0_rx(void)
{
P3OUT ^= 0x010; //翻转P3.4显示进入中断
while((IFG1&UTXIFG0)==0); //判断接收缓存是否准备好/* UART0 Interrupt Flag Register */0x80
if(U0RXBUF == SLV_Data) /* USART 0 Receive Buffer */
{
SLV_Data=SLV_Data-1;
MST_Data= MST_Data+1;
TXBUF0 = MST_Data;
P1OUT |= 0x001;
P1OUT &= ~0x001;
}
else
{
TXBUF0 = MST_Data;
P1OUT |= 0x001;
}
}
Nutcracker:
已经移到MSP430版面了。
灰小子:
回复 Nutcracker:
看到U0BR0 = 0x000; U0BR1 = 0x000;
第一次见对时钟进行0分频……