各位大侠:
我编了段发送、接收程序,发送程序在CSPY仿真中我观察窗口的UART里的TXBUF有变化,说明程序是对的,但我在另一块板子上调试接收程序,始终接收不到上位机发送过来的数据,我在中断处设断点根本到不了,好象没进中断,请各位高手指点。是哪里错了。
发送程序:
#include <msp430x13x.h>
void Init(void);
char Data[6]={0x01,0x02,0x03,0x04,0x05,0x06};
void main(void)
{
unsigned char i;
WDTCTL=WDTPW+WDTHOLD;
Init();
while(1)
{
TXBUF0=0xFF; //以0XFF为前导
while ((UTCTL0& 0x01)==0)
for (i=0;i<=6;i++) //循环发送字符串以及结束0
{
TXBUF0=Data[i];
/*while ((UTCTL0& 0x01)==0);*/
}
}
}
void Init(void)
{
UCTL0&=~SWRST; //SWRST复位,USART允许
UCTL0=CHAR; //无校验,1位停止位,8位数据位,异步
UBR00=0xa0;
UBR10=0x01; //32KHz时,波特率为9600
UMCTL0=0x4A; //位调整
UTCTL0=SSEL0; //Select the ACLK 32kHz
ME1|=0x20;//UTXE1 ; //UART发送模块允许
P3SEL|=BIT4; //P3.4为发送模块
P3DIR|=BIT4;
}
接收程序:
#include<msp430x13x.h>
void InitRS_SLA1(void);
#define ADDRESS1 0X01 //定义从机的地址位
unsigned char i=0,j1,flag=0;
char Data1[20],Buffer1[20];
void main(void)
{
WDTCTL=WDTPW+WDTHOLD;
InitRS_SLA1();
_EINT();
while(1);
}
void InitRS_SLA1(void)
{
UCTL0&=~SWRST; //SWRST复位,USART允许
UCTL0=CHAR; //8位数据位,1位停止位,地址位模式
UBR00=0X03;
UBR10=0X00;
UMCTL0=0X4A; //使用32KHZ晶振时,波特率为9600bps
UTCTL0=0X10; //选定ACLK(32KHZ晶振)为时钟源
ME1|=0X30; //UART1发送及接收模块允许
P3SEL=0X30; //P3.6,P3.7被UART1发送模块占用
P3DIR=0X10; //P3.6输出,P3.7输入
IE1|=URXIE0; //接收中断允许
}
interrupt[UART0RX_VECTOR] void UART0RX(void)
{
if(flag==0) //接收为地址方式时,等待正确地指出现
{
if(RXBUF0==0xff) //地址正确,改变接收为数据方式,准备接受
{
flag=1;
i=0;
}
}
else //接收为数据方式时
{
Data1[i]=RXBUF0; //数据存入Data数组中
if(Data1[i++]==0) //是否到达末尾
{
flag=0; //改变接收为地址方式
for(j1=0;j1<i;j1++)
Buffer1[j1]=Data1[j1]; //复制字符串
}
}
}
发送程序中:
/*while ((UTCTL0& 0x01)==0);*/
写发送缓冲器后需要检查发送完成位,为什么被注释掉了?
有可能发送数据出错。
发送程序中:
/*while ((UTCTL0& 0x01)==0);*/
写发送缓冲器后需要检查发送完成位,为什么被注释掉了?
有可能发送数据出错。