5964|11

95

帖子

2

TA的资源

一粒金砂(中级)

楼主
 

MSP430串口采用中断方式发送问题 [复制链接]

 
自己写的查询法发送数据代码如下:分析一下代码有没有错误?

/*************发送一个字节*********/
void Send_Char(unsigned char Ch)          //发送一个字节
{
  TXBUF0=Ch;
  while(!(IFG1&UTXIFG0));                    //等待发送完毕 !(IFG1&UTXIFG0)为0发送未完成  当!(IFG1&UTXIFG0)为1
  IFG1&=~UTXIFG0;                           //发送标志位清零
}
/**********发送一组字符串*********/      
void Send_String(unsigned char *String)    //发送一组字符串
{
    uchar *P;
    P=String;   
  while(*P!='\0')
   {
     Send_Char(*P);
     P++;
   }
}


现在想采用中断的方式发送数据,不知道怎么发送,什么时候发送,发送标志如何产生,一头水雾不知道怎么解决  希望贴友们的大力指导。

最新回复

就是直接赋值和置某些位的区别,后面的写法不改变其他的比特位。  详情 回复 发表于 2016-8-4 10:59
 
点赞 关注

回复
举报

6040

帖子

202

TA的资源

版主

沙发
 
中断发送比较复杂,首先要有个队列,要进行队列管理。
发送的时候,把数据放入队列内,然后开发送中断。
队列为空的时候,关中断。
最重要的一点就是要防止变量的写冲突,在写某些共享的变量时要关中断。
 
 

回复

483

帖子

0

TA的资源

纯净的硅(初级)

板凳
 
先说下步骤,1 时钟配置,串口波特率,使能等参数配置
2 开启串口中断
3.开启总中断。
4.void Send_String(unsigned char *String)  函数中将P设置为全局变量,在发送第一个字符之前赋值P=String;
5,将Send_String函数放到你的中断服务函数里面
6.void Send_Char(unsigned char Ch)     这个删掉,用TXBUF0=*P;替代就OK了
7,中断服务函数里面。
IRQ...(void)
{
TXBUF0=*p;
p++;
//然后清除标志位

}

大概就是这么个逻辑,
其实最简单的就是下载个官方历程来改吧
 
 
 

回复

95

帖子

2

TA的资源

一粒金砂(中级)

4
 
lcofjp 发表于 2016-7-22 11:51
中断发送比较复杂,首先要有个队列,要进行队列管理。
发送的时候,把数据放入队列内,然后开发送中断。
...

我可不可以这样理解现在接收到一组数据,把接收到的数据装到一个数组里面,把这个数组里面的数据看成一个队列,可不可以在中断里面这样写
IE1|=UTXIE0;   //发送中断使能
/*#pragma vector=UART0TX_VECTOR
__interrupt void USART0_TXITQ(void)
{  
    TXBUF0=Rebuf[ReLenth];
     ReLenth++;
}

点评

像那么个意思,但是不是简简单单几行代码就能搞定的。  详情 回复 发表于 2016-7-22 12:39
 
 
 

回复

6040

帖子

202

TA的资源

版主

5
 
李嘉辉 发表于 2016-7-22 12:08
我可不可以这样理解现在接收到一组数据,把接收到的数据装到一个数组里面,把这个数组里面的数据看成一个 ...

像那么个意思,但是不是简简单单几行代码就能搞定的。

点评

程序一开始运行发送中断使能打开,进入中断因为没有要发的东西有跳出来了,此时标志位UTXIFG0为0,下次进中断的时候要不要再把标志位UTXIFG0=1呢,如果不置为1还会不会进入中断呢?可不可以把这个标志放到发送函数里  详情 回复 发表于 2016-7-22 13:49
 
 
 

回复

95

帖子

2

TA的资源

一粒金砂(中级)

6
 
yl20084784 发表于 2016-7-22 12:03
先说下步骤,1 时钟配置,串口波特率,使能等参数配置
2 开启串口中断
3.开启总中断。
4.void Send_Stri ...

程序一开始运行发送中断使能打开,进入中断因为没有要发的东西有跳出来了,此时标志位UTXIFG0为0,下次进中断的时候要不要再把标志位UTXIFG0=1呢,如果不置为1还会不会进入中断呢?可不可以把这个标志放到发送函数里面,来控制中断的发送?

点评

反正大概的程序流程就是这样子的了,如果出现的错误的进入中断的,多半是开始的时候,根据标志位判断一下就OK了  详情 回复 发表于 2016-7-22 17:21
 
 
 

回复

95

帖子

2

TA的资源

一粒金砂(中级)

7
 
lcofjp 发表于 2016-7-22 12:39
像那么个意思,但是不是简简单单几行代码就能搞定的。

程序一开始运行发送中断使能打开,进入中断因为没有要发的东西有跳出来了,此时标志位UTXIFG0为0,下次进中断的时候要不要再把标志位UTXIFG0=1呢,如果不置为1还会不会进入中断呢?可不可以把这个标志放到发送函数里面,来控制中断的发送?

点评

中断使能肯定是要在发送函数和中断函数中同时控制的。 发送数据的时候,写好缓冲区然后使能发送中断。 中断里面,缓冲区为空的时候,就要禁止中断了。  详情 回复 发表于 2016-7-22 14:40
 
 
 

回复

6040

帖子

202

TA的资源

版主

8
 
李嘉辉 发表于 2016-7-22 13:49
程序一开始运行发送中断使能打开,进入中断因为没有要发的东西有跳出来了,此时标志位UTXIFG0为0,下次进 ...

中断使能肯定是要在发送函数和中断函数中同时控制的。
发送数据的时候,写好缓冲区然后使能发送中断。
中断里面,缓冲区为空的时候,就要禁止中断了。

点评

ME1 = USPIE0; 和 ME1 |= USPIE0; 有什么区别 有些函数初始化写的是ME1 = USPIE0; 有得写的是 ME1 |= USPIE0;  详情 回复 发表于 2016-8-4 10:30
 
 
 

回复

483

帖子

0

TA的资源

纯净的硅(初级)

9
 
李嘉辉 发表于 2016-7-22 12:59
程序一开始运行发送中断使能打开,进入中断因为没有要发的东西有跳出来了,此时标志位UTXIFG0为0,下次进 ...

反正大概的程序流程就是这样子的了,如果出现的错误的进入中断的,多半是开始的时候,根据标志位判断一下就OK了
 
 
 

回复

95

帖子

2

TA的资源

一粒金砂(中级)

10
 
lcofjp 发表于 2016-7-22 14:40
中断使能肯定是要在发送函数和中断函数中同时控制的。
发送数据的时候,写好缓冲区然后使能发送中断。
...

ME1 = USPIE0;  和 ME1 |= USPIE0;  有什么区别
有些函数初始化写的是ME1 = USPIE0; 有得写的是 ME1 |= USPIE0;  

点评

就是直接赋值和置某些位的区别,后面的写法不改变其他的比特位。  详情 回复 发表于 2016-8-4 10:59
 
 
 

回复

6040

帖子

202

TA的资源

版主

11
 
李嘉辉 发表于 2016-8-4 10:30
ME1 = USPIE0;  和 ME1 |= USPIE0;  有什么区别
有些函数初始化写的是ME1 = USPIE0; 有得写的是 ME1 |= ...

就是直接赋值和置某些位的区别,后面的写法不改变其他的比特位。

点评

谢谢  详情 回复 发表于 2016-8-4 15:37
 
 
 

回复

95

帖子

2

TA的资源

一粒金砂(中级)

12
 
lcofjp 发表于 2016-8-4 10:59
就是直接赋值和置某些位的区别,后面的写法不改变其他的比特位。

谢谢
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表