6554|10

63

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

【求助】异步通讯上的初级问题? [复制链接]

异步通讯上的编程我刚入手,有很多疑问。

如果我发送数据,怎么判断发送完成了?同样的,怎么判断接收一次数据完成?

还有8为数据位是按照什么格式传输数据的?比如我想传一个字符串“ABCD1234”,怎么传输,接收到的数据是什么样子的?又怎么还原成原来的字符串呢?

我完全按照例程进行232通讯测试,为什么总是只收到161……

/*************************LED 显示+通讯测试程序******************************************/
#include "msp430x44x.h"

#define CONST_TA 32
#define WDT_CONST WDT_ARST_250

const char Data[6]="234567";

float Disp=0;
char Data_R[20],Buffer[20];
unsigned char i_R=0,j_R=0,flag_R=0;

void init(void);
void init_io(void);

/* main process */

void main(void)
{
unsigned char i=0;
init();
init_io();
while(1)
{
TXBUF0=0xff;
while ((IFG1 & UTXIFG0) == 0);
for(i=0;i<=6;i++)
{
TXBUF0=Data[i];
while ((IFG1 & UTXIFG0) == 0);
}
WDTCTL = WDT_CONST;
}
}

/**********Function description*************/
// timer A is used for key&led display
/********End of Function Description*********/
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A(void)
{
CCR0 = CONST_TA;
}

/*******************************************************/
/* Watchdog Interrupt Vector (WDT) handler */
/*******************************************************/
#pragma vector=WDT_VECTOR
__interrupt void wdt(void)
{

}

/*******************************************************/
/* initial for the main function */
/*******************************************************/
void init(void)
{
TACTL = TASSEL_1+TACLR+MC_1;
CCTL0 = CCIE;
CCR0 = CONST_TA;
FLL_CTL0 |= XCAP14PF;
UTCTL0 = SSEL0;
UBR00 = 0x0d; // 32768Hz 2400
UBR10 = 0x00; // 32768Hz 2400
UMCTL0 = 0x6b;
UCTL0 = CHAR;
}

void init_io(void)
{
P2SEL |= 0x30; // P2.4,5 = USART0 TXD/RXD
P2DIR |= 0x10; // P2.4 output direction
ME1 |= UTXE0 + URXE0;
IE1 |= URXIE0 + WDTIE;// Ena××e USART0 RX interrupt
WDTCTL = WDT_CONST;
_EINT();
}

/**********Function description*************/
// UART0
/********End of Function Description*********/
#pragma vector=UART0RX_VECTOR
__interrupt void usart0_rx(void)
{
if(flag_R==0)
{
if(RXBUF0==0xff)
{
flag_R=1;
i_R=0;
}
}
else
{
Data_R[i_R]=RXBUF0;
if(Data_R[i_R++]==0)
{
flag_R=0;
for(j_R=0;j_R<i_R;j_R++)Buffer[j_R]=Data_R[j_R];
}
}
}

最新回复

谢谢!我再试一试  详情 回复 发表于 2005-5-19 11:33
 
点赞 关注

回复
举报

84

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
我在弄个同步SPI的通信问题
哪个高手给个例子程序
包括 时钟源的选择 波特率的设定 以及收发控制
最好不用中断 通过RXIFG0 和 TXIFG0 两个标志为来控制收发
请高手指点
看看我的程序 先
#include"msp430x16x.h"
int datad[128];
char dat;
void delay()
{
int i;
for(i=0;i<20;i++)
{
_NOP();
}
}
void main()
{ unsigned j=0;

WDTCTL = WDTPW + WDTHOLD;
ME1 = USPIE0;
DCOCTL=0X02;
BCSCTL2=DIVS1;

U0CTL = CHAR+SYNC+MM+SWRST;
U0RCTL=OE;
U0TCTL = CKPH+SSEL1+STC;
U0BR0 = 0x6D;
U0BR1 = 0x00;
U0MCTL = 0x03;
P3SEL |= 0x38;
P3DIR|=0X18;
U0CTL&=~SWRST;
U0TXBUF=0XC0;
P5DIR=0X80;
P1DIR =0X0f;
P5OUT&=~0X80;
P1OUT&=~0X01;
_NOP();
P1OUT|=0X01;
while (UTXIFG0 == 1);
while((P1IN&0X80)==0X80)
{
if((P3IN&0X20)==0X20)
_NOP();
if(URXIFG0==1)
{
datad[j]=U0RXBUF;
j++;
}
}
P5OUT|=0X80;

}
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
该例子是做的MAXIM1134的AD转换的
可是 好象发出去了 但读不出转换完的数据
但用万能表测出DOUT 位 是高电平
我的 AIN接的是 VCC
故 DOUT 应该是高电平
但我读不出来
望高手 指点 是不是我程序出错了
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

4
 
我发现了问题,出在Timer_A中断与UART中断的冲突上,去掉Timer_A中断就好了。可是我的Timer_A中断
必须要有(AD单次采样、扫描方式送显、按键扫描都要放在里面)具体应该怎么协调中断的设置?(我用的是MSP430F425)通讯究竟是哪个放到中断里好还是放在主循环里好还是放在Timer_A中断中呢?!
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

5
 
问题已经解决了!

还想知道:
8位数据位是按照什么格式传输数据的?比如我想传一个字符串“ABCD1234”,怎么传输,接收到的数据是什么样子的?又怎么还原成原来的字符串呢?
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

6
 

可以先转化成ASCII 码,接受到的就是原来的字符
问一下你的中断冲突问题是怎么解决的啊,我做的和你差不多???
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

7
 

我的通信问题还没解决,能否指导?
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

8
 
const char Data[6]="234567";
哈哈,此句定义有错,字符串的话最后一个字节应该是'\0', 所以const char Data[7]="234567"才能收到正确的字符串。。。。
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

9
 
char data[] = “ABCD1234”;
通过判断是否为字符串的结束标志‘\0’进行发送就是了。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用:


我的通信问题还没解决,能否指导?
CCR0、UART、AD三个中断都按例程弄可以不互相影响。正常工作
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

11
 
谢谢!我再试一试
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表