这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 串口发送数据没发出去啊!急死我了!

共2条 1/1 1 跳转至

串口发送数据没发出去啊!急死我了!

院士
2006-09-17 18:14:16     打赏
串口发送数据没发出去啊!急死我了!



关键词: 串口     发送     数据     没发     出去     急死     我了    

院士
2006-12-22 22:43:00     打赏
2楼
问 想调试一下串口,写了一个串口发送程序,可怎么也发不出去,不只是哪里出了问题,望各位大侠帮忙给看看吧,
#include<MSP430x13x.h>
void Init(void);
char Data[4] = {0x01,0x02,0x03,0x04};

void main(void)
{
unsigned char i;
WDTCTL=WDTPW+WDTHOLD;
Init();


while(1)
{
TXBUF0=0xFF; //以0XFF为前导
while ((U0TCTL & 0x01)==0);
for (i=0;i<4;i++) //循环发送字节
{
TXBUF0=Data[i];
while ((U0TCTL& 0x01)==0);
}
}
}

void Init(void)
{
UCTL0 &= ~SWRST;
UCTL0 = 0x10;//字符为8位的
UBR00 = 0x03;
UBR10 = 0x00;
UMCTL0 = 0x4A;
U0TCTL = 0x10;//选择ACLK作为串口时钟
ME1 |= 0x20;//使能发送
P3SEL = 0x30;//P3.4,P3.5作为用于发送接收
P3DIR = 0x10; //P3.4为发送输出口
}

程序调试中,发现似乎根本没有发出数据,实在是不知道问题所在啊?! 1: 要把Data[i]中的数值项先转化成ASCII码,就是+0x30啊! 2: 检测 (UTXIFG0&IFG1)
void fnCommSendMessff(void)
{
int itempTran;
unsigned int iTransTime;
for(itempTran=0;itempTran<4;itempTran++)
{
for(iTransTime=0;iTransTime<0xfe;iTransTime++)
{
if(UTXIFG0&IFG1)
{
TXBUF0=0xff;
break;
}
}
}
fnDelayX10ms(1);
} 3: 时钟还没设置吧? 4: 首先检查一下硬件是否是好的 5: 引用: 6: #include <MSP430x14x.h>

void main(void)
{
unsigned int i;
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P5DIR |= 0x70; // P5.4 ,5.5 5.6 output direction
P5SEL|= 0x70; // P5.4 = MCLK option select;5.5=SMCLK;5.6=ACLK;
BCSCTL1 &= ~XT2OFF; // XT2 = HF XTAL

do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG) != 0); // OSCFault flag still set?
BCSCTL2|=(SELM1+SELS); //MCLK=XT2CLK SMCLK=XT2CLK

UCTL0 = CHAR; // 8-bit character
UTCTL0 =SSEL1+SSEL0; //UCLK=SMCLK;


//BCSCTL2 |= SELM1; // MCLK = XT2 (safe)

//UCTL0 &=~ SWRST; // reset SWRST bit
//UTCTL0 = SSEL0; // UCLK = ACLK
UCTL0 = 0x10; //8 data bits, even parity, 1 stop bit
UBR00 = 0x41;
UBR01= 0x3;
//UBR10 = 0x00;
UMCTL0 = 0x03; //BDR=9600 ,8 M jingzhen

URCTL0= 0x00;



ME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXD
//IE1 |= URXIE0; // Enable USART0 RX interrupt
P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD
P3DIR |= 0x10; // P3.4 output direction
while(1)
{
TXBUF0=0x6f;

while ((IFG1 & UTXIFG0) == 0); // USART0 TX buffer ready?
for (i = 0xAFF; i > 0; i--);
}

}
这是我的程序 ,现在的问题是无论发什么都布是我要得到的结果
刚开始的时候还出现过正常的结果,可是后来出现的结果都是莫名其妙的,用示波器看刀232的管脚输出是对的,经过串口传输线输出也是对的,可是刀了机器上就布对,换了机器还是一样,还了串口调试工具结果还是一样,布知道是什么原因,高手赐教啊

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]