⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spi主.c

📁 基于MSP430F149的SPI通信实例。 详细请看源文件。有较详细的注释。
💻 C
字号:
#include<msp430x14x.h>


//主机先TXBUF写入伪数据,通信开始
//从机接收伪数据,同时向主机发送字符串“msp430",以0xAA为字符前导
//注意:
//1、SPI通信过程可以有RUXIFG,或者UTXIFG实现,本例用URXIFG,当接收到数据后在接收中断中写TXBUF//,启动下一次通讯
//2、UCLK引脚应当拉高,以保证通信自始至终UCLK引脚无意外的脉冲引入,否则将出错。会因为裸露常//时钟信号引起误码

char Data[20];
unsigned char i,flag=0;

void SPI_Init()
{
    UCTL0&=~SWRST;//SWRST复位,USART允许
    UCTL0=CHAR+MM+SYNC;//spi主模式,8位数据
    UTCTL0=STC+SSEL0+CKPH;//先定UCLK(32KHZ晶振)为时钟源,3线SPI
    UBR00=0x4E;//波特率分频因子为2
    UBR10=0x00;
    UMCTL0=0x20;//位调整
    ME1=USPIE0;//SPI0模块允许
    P3SEL|=0x0F;//P3.0~P3.3被模块占用
    P3DIR=0x0A;//P3.1(SIM0),P3.3(UCLK)设为输出模式
    IE1|=URXIE0;//接收中断允许
}
void main()
{
    WDTCTL = WDTPW +WDTHOLD;  //关闭看门狗
    SPI_Init();//UART初始化
    _EINT();//通用中断允许
    TXBUF0=0XDD;
    while(1);//主循环
}

#pragma vector = UART0RX_VECTOR
__interrupt void UART0RX()//UART1中断函数
{
    Data[i]=RXBUF0;
    if(flag==0)
    {
        if(Data[i]==0xAA)//收到前导码
        {
              flag=1;
              i=0;
        }
    }
    else//收数据
    {
        i++;
        if(i>5)
        {
            flag=0;
            i=0;
        }
    }
    TXBUF0=0xAA;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -