共2条
1/1 1 跳转至页
问
主机程序:
#include <MSP430x14x.h>
static unsigned char Data[17];
static unsigned char flag=0,j=0;
void main(void)
{
auto int i;
for(i=0;i<17;i++) Data[i]=0;
WDTCTL=WDTPW+WDTHOLD;//CLOSE WATHCDOG
//测试晶振是否起振
BCSCTL1&=~XT2OFF;
do
{
IFG1&=~OFIFG;
for(i=0;i<=0xff;i++);
}
while(( IFG1 & OFIFG)==1);
BCSCTL2|=SELM1+SELS;//MCLK=SMCLK=XT2
//同步信号使能STE控制
P2DIR=0XFF;//输出
P2OUT=0XFE;
//初始化SPI串口
UCTL1=CHAR+SYNC+MM;//SPI主模式,8位数据
UTCTL1|=STC+SSEL0;//选定ACLK(32KHZ晶振)为时钟源,3线SPI模式
UBR01=0x02;//波特率分频因子为2
UBR11=0x00;
UMCTL1=0x00;
UCTL1&=~SWRST;//SWRST复位,USART允许
ME2|=USPIE1;//SPI0模块允许
P5SEL|=0x0F;//P5.0~P5.3为模块占用P5.4,5 = USART0 TXD/RXD
P5DIR=0x0A;//P5.1(SIMO)、P5.3(UCLK)设为输出模式
IE2|=URXIE1;//接收中断允许
//串口初始化
UCTL0=CHAR;
UTCTL0=SSEL1;
UBR00=0X41;
UBR10=0X03;
UMCTL0=0X13;
UCTL0&=~SWRST;
ME1=UTXE0+URXE0;
IE1=URXIE0;
P3SEL |= 0x30; // P3.6,7 = USART0 TXD/RXD
P3DIR |= 0x10;
_EINT();
TXBUF1=0xaa;//开始接收过程
while(1)
{
;;
}
}
interrupt [UART1RX_VECTOR] void UART1RX(void)
{
auto int m;
Data[j]=RXBUF1;
if(flag==0)
{
if(Data[j]==0xFF)
{
flag=1;
j=1;
}
}
else
{
while(( IFG1 & UTXIFG0 )==0);
TXBUF0=Data[j];
for(m=0;m<1200;m++);
j++;
}
if(j<17)
TXBUF1=0xAA;
else
{
j=0;
flag=0;
for(m=0;m<1000;m++);
TXBUF1=0xAA;
}
}
从机程序:
#include <MSP430x13x.h>
static unsigned char Data[17]={0xFF,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};
static unsigned char m=0;
static unsigned char j;
void main(void)
{
auto int i;
WDTCTL=WDTPW+WDTHOLD;//CLOSE WATHCDOG
//测试晶振是否起振
BCSCTL1&=~XT2OFF;
do
{
IFG1&=~OFIFG;
for(i=0;i<=0xff;i++);
}
while(( IFG1 & OFIFG)==1);
BCSCTL2|=SELM1+SELS;//MCLK=SMCLK=XT2
//初始化SPI串口
UCTL0=CHAR+SYNC;//SPI从模式,8位数据,4线制,时钟信号来自主机
//UTCTL0=CKPH;//选定UCLK为时钟源,4线SPI模式
UBR00=0x02;//波特率分频因子为2
UBR10=0x00;
UMCTL0=0x00;
UCTL0&=~SWRST;//SWRST复位,USART允许
ME1=USPIE0;//SPI0模块允许
P3SEL|=0x0F;//P3.0~P3.3为模块占用
P3DIR=0x04;//P3.2(SOMI)设为输出模式
IE1|=URXIE0;//接收中断允许
TXBUF0=0;//开始接收过程
_EINT();
while(1);
}
interrupt [UART0RX_VECTOR] void UART0RX(void)
{
j=RXBUF0;
if(j==0xAA)
{
TXBUF0=Data[m];//发送字符串
m++;
if(m>=17) m=0;
}
}
问题是:上电时,有时主机从从机接收到正确的数据,有时接收不到或是错误的数据!如果是后者,断电再通电,有时就又会好了!
哪位大侠能看出来是什么问题?
#include <MSP430x14x.h>
static unsigned char Data[17];
static unsigned char flag=0,j=0;
void main(void)
{
auto int i;
for(i=0;i<17;i++) Data[i]=0;
WDTCTL=WDTPW+WDTHOLD;//CLOSE WATHCDOG
//测试晶振是否起振
BCSCTL1&=~XT2OFF;
do
{
IFG1&=~OFIFG;
for(i=0;i<=0xff;i++);
}
while(( IFG1 & OFIFG)==1);
BCSCTL2|=SELM1+SELS;//MCLK=SMCLK=XT2
//同步信号使能STE控制
P2DIR=0XFF;//输出
P2OUT=0XFE;
//初始化SPI串口
UCTL1=CHAR+SYNC+MM;//SPI主模式,8位数据
UTCTL1|=STC+SSEL0;//选定ACLK(32KHZ晶振)为时钟源,3线SPI模式
UBR01=0x02;//波特率分频因子为2
UBR11=0x00;
UMCTL1=0x00;
UCTL1&=~SWRST;//SWRST复位,USART允许
ME2|=USPIE1;//SPI0模块允许
P5SEL|=0x0F;//P5.0~P5.3为模块占用P5.4,5 = USART0 TXD/RXD
P5DIR=0x0A;//P5.1(SIMO)、P5.3(UCLK)设为输出模式
IE2|=URXIE1;//接收中断允许
//串口初始化
UCTL0=CHAR;
UTCTL0=SSEL1;
UBR00=0X41;
UBR10=0X03;
UMCTL0=0X13;
UCTL0&=~SWRST;
ME1=UTXE0+URXE0;
IE1=URXIE0;
P3SEL |= 0x30; // P3.6,7 = USART0 TXD/RXD
P3DIR |= 0x10;
_EINT();
TXBUF1=0xaa;//开始接收过程
while(1)
{
;;
}
}
interrupt [UART1RX_VECTOR] void UART1RX(void)
{
auto int m;
Data[j]=RXBUF1;
if(flag==0)
{
if(Data[j]==0xFF)
{
flag=1;
j=1;
}
}
else
{
while(( IFG1 & UTXIFG0 )==0);
TXBUF0=Data[j];
for(m=0;m<1200;m++);
j++;
}
if(j<17)
TXBUF1=0xAA;
else
{
j=0;
flag=0;
for(m=0;m<1000;m++);
TXBUF1=0xAA;
}
}
从机程序:
#include <MSP430x13x.h>
static unsigned char Data[17]={0xFF,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};
static unsigned char m=0;
static unsigned char j;
void main(void)
{
auto int i;
WDTCTL=WDTPW+WDTHOLD;//CLOSE WATHCDOG
//测试晶振是否起振
BCSCTL1&=~XT2OFF;
do
{
IFG1&=~OFIFG;
for(i=0;i<=0xff;i++);
}
while(( IFG1 & OFIFG)==1);
BCSCTL2|=SELM1+SELS;//MCLK=SMCLK=XT2
//初始化SPI串口
UCTL0=CHAR+SYNC;//SPI从模式,8位数据,4线制,时钟信号来自主机
//UTCTL0=CKPH;//选定UCLK为时钟源,4线SPI模式
UBR00=0x02;//波特率分频因子为2
UBR10=0x00;
UMCTL0=0x00;
UCTL0&=~SWRST;//SWRST复位,USART允许
ME1=USPIE0;//SPI0模块允许
P3SEL|=0x0F;//P3.0~P3.3为模块占用
P3DIR=0x04;//P3.2(SOMI)设为输出模式
IE1|=URXIE0;//接收中断允许
TXBUF0=0;//开始接收过程
_EINT();
while(1);
}
interrupt [UART0RX_VECTOR] void UART0RX(void)
{
j=RXBUF0;
if(j==0xAA)
{
TXBUF0=Data[m];//发送字符串
m++;
if(m>=17) m=0;
}
}
问题是:上电时,有时主机从从机接收到正确的数据,有时接收不到或是错误的数据!如果是后者,断电再通电,有时就又会好了!
哪位大侠能看出来是什么问题?
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图四被打赏50分 | |
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 |