📄 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 + -