3996|8

82

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求助!急!!! [复制链接]

哪位大虾可以教我一下?
一个简单的问题:430在用异步串口传输时的中断问题.
 我要发送数据,是不是先将数据准备好,然后将中断标志置位,然后把数据写入缓存?这样的过程中断标志是不是马上会自动复位,那如果我再要发送一个字节数据 是否需要再次置位中断标志.
 谢谢 能告诉我这里面的逻辑顺序吗?
 万分感谢!!!

最新回复

IE1 |= UTXIE0; for(i = 0;i < 15;i++)         {                 UART0_TX_BUF = CHK;         }         nTX0_Len = 15;         // 设置中断标志,进入发送中断程序     IFG1 |= UTXIFG0; //********************************************************************** interrupt [UART0TX_VECTOR] void UART0_TX_ISR(void) {     if(nTX0_Len != 0)     {                 // 表示缓冲区里的数据没有发送完             nTX0_Flag = 0;                                                        TXBUF0 = UART0_TX_BUF[nSend_TX0];             nSend_TX0 += 1;                         if(nSend_TX0 >= nTX0_Len)             {                 nSend_TX0 = 0;                 nTX0_Len = 0;                 nTX0_Flag = 1;             }     } }        按照你的说法 这样能进中断吗? 这是一个书上的程序 我有点糊涂了. IFG1 |= UTXIFG0 表示uart空闲,他怎么就能触发中断呢?  详情 回复 发表于 2006-6-18 11:20
 
点赞 关注

回复
举报

102

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
发送时,由你控制数据传输的开始时刻,也就是将发送数据写入TXxBUF的时刻。此时的UTXIFGx用来指示TXxBUF是否为“空”。相应的还有TXEPT,表示上次数据是否发送完毕以及TXxBUF是否为“空”。
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
谢谢
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

4
 
大虾,
能不能再请教一下,将发送数据写入TXxBUF的时刻,UTXIFGx会有什么变化。 1 表示什么 0表示什么? 什么时候进入中断服务程序??? 问题很基础,可我现在查不到资料 请帮助一下我这个新手吧
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

5
 
1、将发送数据写入TXxBUF的时候,正常情况下UTXIFGx会自动变成0,表示UART“忙”。
2、将发送数据写入TXxBUF后,UART会自动处理数据发送过程,并以UTXIFGx变成1表示数据发送过程结束。
3、非要用中断来处理数据发送的话,在TXxBUF=1及UTXIEx、GIE均被置位时,MCU会触发UART发送中断。RESET之后,就是这个状态。
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

6
 
还有,不要老是“大虾”、“大虾”的,互相学习嘛!
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

7
 
真是太感谢了! 现在是我向你学习.以后用得着的话可以你向我学习!呵呵!
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

8
 
void Init_CLK(void)
{
unsigned int i;
BCSCTL1 = 0X00; //将寄存器的内容清零
//XT2震荡器开启
//LFTX1工作在低频模式
//ACLK的分频因子为1

do
{
IFG1 &= ~OFIFG; // 清除OSCFault标志
for (i = 0x20; i > 0; i--);
}
while ((IFG1 & OFIFG) == OFIFG); // 如果OSCFault =1

BCSCTL2 = 0X00; //将寄存器的内容清零
BCSCTL2 += SELM1; //MCLK的时钟源为TX2CLK,分频因子为1
BCSCTL2 += SELS; //SMCLK的时钟源为TX2CLK,分频因子为1
}

程序一直在do while里面没有跳出来 是怎么回事?
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

9
 
IE1 |= UTXIE0;
for(i = 0;i < 15;i++)
{
UART0_TX_BUF[i] = CHK[i];
}
nTX0_Len = 15;
// 设置中断标志,进入发送中断程序
IFG1 |= UTXIFG0;
//**********************************************************************

interrupt [UART0TX_VECTOR] void UART0_TX_ISR(void)
{
if(nTX0_Len != 0)
{
// 表示缓冲区里的数据没有发送完
nTX0_Flag = 0;

TXBUF0 = UART0_TX_BUF[nSend_TX0];
nSend_TX0 += 1;

if(nSend_TX0 >= nTX0_Len)
{
nSend_TX0 = 0;
nTX0_Len = 0;
nTX0_Flag = 1;
}
}
}

按照你的说法 这样能进中断吗?
这是一个书上的程序 我有点糊涂了.
IFG1 |= UTXIFG0 表示uart空闲,他怎么就能触发中断呢?
 
 
 

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

随便看看
查找数据手册?

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