专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
TI
串口接收中断程序
2019-07-15 16:11
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
TI MCU
6374
19
1480
430串口接收中断程序为什么始终进不了
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
19条回答
jlyuan
2019-07-15 19:20
#include"msp430.h"
/**************宏定义***********************/
#define uchar unsigned char
#define uint unsigned int
uchar Buffer_Rx[40];
uchar Buffer_TX[40]="串口程序调试"; //定义发送缓冲区
uchar Rx_long;
uchar Flag=0; //一旦我们进入中断,就改变此标志位,控制灯闪烁
/**************串口初始化,采用查询方式***********************/
/*************注意:串口初始化完成后,是处于复位状态**********************/
void Init_usart(void)
{
P3SEL|=0XC0; //串口1的I/O口选择位外围模块功能
P3DIR|=0X40; //P3.6为输出,P3.7为输入
U1TCTL=SSEL1+SSEL0; //选择SMCLK
U1CTL=SWRST+CHAR; //先将串口处于复位状态,8位数据,无校验,停止位1位
// U1RCTL|=URXEIE; //接收出错中断允许位
U1TXBUF=0x00; //先将发送缓冲区和接收缓冲区清0
// U1RXBUF=0x00;
U1BR1=0;
U1BR0=208; //波特率为38400
U1MCTL=0x89;
ME2|=UTXE1+URXE1; //允许发送和接收
IE2|=URXIE1; //接收中断使能
}
void main()
{
volatile unsigned int i=0; // volatile to prevent optimization
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
P4DIR |= 0x04; // Set P4.3 当接收完成后置位
BCSCTL1&=~XT2OFF; //开启XT2
BCSCTL2|=SELM1+SELS; //选择XT2CLK为MCLK和SMCLK时钟源
do
{
IFG1&=~OFIFG; //清除振荡器失效标志
for(i=255;i>0;i--);
}while(IFG1&OFIFG);//判断XT2是否起振
Init_usart();
//SR|=GIE; //开总中断
U1CTL&=~SWRST; //关闭串口的复位
_BIS_SR(GIE); //开总中断
// _EINT();
while(Buffer_TX!=' ')
{
while((IFG2&UTXIFG1)==0);
U1TXBUF=Buffer_TX;
// UTXIFG1=0;
i++;
}
while(1)
{
if(Rx_long==8)
{
i=0;
while(Rx_long!=i)
{
while((IFG2&UTXIFG1)==0);
U1TXBUF=Buffer_TX;
i++;
}
Rx_long=0;
}
if(Flag==1)
{
P4OUT ^= 0x04; // Toggle P4.2 using exclusive-OR
i = 5000; // SW Delay
do i--;
while (i != 0);
P4OUT ^= 0x04; // Toggle P4.2 using exclusive-OR
i = 5000; // SW Delay
do i--;
while (i != 0);
}
}
}
/************串口接收中断服务子程序**********************/
#pragma vector=USART1RX_VECTOR
__interrupt void UART1RXINT(void)
{
_DINT(); //关闭全局中断
Flag=1;
if((IFG2&URXIFG1)!=0)
{
Buffer_Rx[Rx_long]=U1RXBUF;
Rx_long++;
}
_EINT(); //恢复全局中断
}
加载中...
查看其它19个回答
一周热门
更多
>
相关问题
CPLD的方波输出
4 个回答
11个版本Quartus II 软件下载,安装包网盘合集,附教程,47G!
20 个回答
请大家帮忙到21IC发展大家谈支持我申请新版面
20 个回答
【通知】21ic中国电子网服务条款 (所有人员必读)
1 个回答
满载而归乙亥年,大展鸿途庚子年---集签赢好礼
20 个回答
相关文章
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
TI
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
#include"msp430.h"
/**************宏定义***********************/
#define uchar unsigned char
#define uint unsigned int
uchar Buffer_Rx[40];
uchar Buffer_TX[40]="串口程序调试"; //定义发送缓冲区
uchar Rx_long;
uchar Flag=0; //一旦我们进入中断,就改变此标志位,控制灯闪烁
/**************串口初始化,采用查询方式***********************/
/*************注意:串口初始化完成后,是处于复位状态**********************/
void Init_usart(void)
{
P3SEL|=0XC0; //串口1的I/O口选择位外围模块功能
P3DIR|=0X40; //P3.6为输出,P3.7为输入
U1TCTL=SSEL1+SSEL0; //选择SMCLK
U1CTL=SWRST+CHAR; //先将串口处于复位状态,8位数据,无校验,停止位1位
// U1RCTL|=URXEIE; //接收出错中断允许位
U1TXBUF=0x00; //先将发送缓冲区和接收缓冲区清0
// U1RXBUF=0x00;
U1BR1=0;
U1BR0=208; //波特率为38400
U1MCTL=0x89;
ME2|=UTXE1+URXE1; //允许发送和接收
IE2|=URXIE1; //接收中断使能
}
void main()
{
volatile unsigned int i=0; // volatile to prevent optimization
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
P4DIR |= 0x04; // Set P4.3 当接收完成后置位
BCSCTL1&=~XT2OFF; //开启XT2
BCSCTL2|=SELM1+SELS; //选择XT2CLK为MCLK和SMCLK时钟源
do
{
IFG1&=~OFIFG; //清除振荡器失效标志
for(i=255;i>0;i--);
}while(IFG1&OFIFG);//判断XT2是否起振
Init_usart();
//SR|=GIE; //开总中断
U1CTL&=~SWRST; //关闭串口的复位
_BIS_SR(GIE); //开总中断
// _EINT();
while(Buffer_TX!=' ')
{
while((IFG2&UTXIFG1)==0);
U1TXBUF=Buffer_TX;
// UTXIFG1=0;
i++;
}
while(1)
{
if(Rx_long==8)
{
i=0;
while(Rx_long!=i)
{
while((IFG2&UTXIFG1)==0);
U1TXBUF=Buffer_TX;
i++;
}
Rx_long=0;
}
if(Flag==1)
{
P4OUT ^= 0x04; // Toggle P4.2 using exclusive-OR
i = 5000; // SW Delay
do i--;
while (i != 0);
P4OUT ^= 0x04; // Toggle P4.2 using exclusive-OR
i = 5000; // SW Delay
do i--;
while (i != 0);
}
}
}
/************串口接收中断服务子程序**********************/
#pragma vector=USART1RX_VECTOR
__interrupt void UART1RXINT(void)
{
_DINT(); //关闭全局中断
Flag=1;
if((IFG2&URXIFG1)!=0)
{
Buffer_Rx[Rx_long]=U1RXBUF;
Rx_long++;
}
_EINT(); //恢复全局中断
}
一周热门 更多>