MSP430F169(二)——UART中断(论下)

本文深入解析了UART中断的工作原理,包括发送与接收机制。详细介绍了UART的中断向量如何控制数据传输,以及发送和接收缓冲区的状态变化。同时,提供了串口初始化、发送字符串和数据的代码实现,为嵌入式开发人员提供实用指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1. UART中断工作的机制

UART只有一个发送中断向量和一个接收中断向量,通过判断中断向量的标志来控制数据的收发

1.1 发送机制

当用户想发送数据时,UxIFG产生一个中断,表明UxTXBUF已经准备好接收数据。当UxTXBUF接收字符后或中断被执行,URXIFG将会复位。
SWRST = 1或PUC会置位UxIFG (SWRST: 系统复位)
SWRST = 1或PUC会复位UxIE

1.2接收机制

UxRXBUF每次接收一个字符并加载时,URXIFGx会产生一个中断标记
UxRXBUF被读取时或中断被执行时,URXIFG被自动复位
当PUC或SWRST = 1时UxRXIE 复位
建议接收中断函数的代码要精简,执行时间要短,防止数据接收不全。

2. 代码实现

//串口初始化模块
void UART_Init()
{
  U0CTL|=SWRST + CHAR;                //复位SWRST,8位数据模式
  U0TCTL|=SSEL1;                      //SMCLK为串口时钟
  U0BR1=baud_h;                       //BRCLK=8MHZ,Baud=BRCLK/N
  U0BR0=baud_l;                       //N=UBR+(UxMCTL)/8
  U0MCTL=0x00;                        //微调寄存器为0,波特率9600bps
  ME1|=UTXE0;                         //UART0发送使能
  ME1|=URXE0;                         //UART0接收使能
  U0CTL&=~SWRST;
  IE1|=URXIE0;                        //接收中断使能位,                                                                  //必须设置在SWRST之后,否则会复位

  P3SEL|= BIT4 + BIT5;                //设置IO口为第二功能模式,启用UART功能
  P3DIR|= BIT4;                       //设置TXD0口方向为输出
}
//*************************************************************************
//              串口0发送字符串函数
//*************************************************************************
void Print_Str(uchar *s)
{
    while(*s != '\0')
    {
        Send_Byte(*s++);
    }
}
//*************************************************************************
//              串口0发送数据函数
//*************************************************************************
void Send_Byte(uchar data)
{
  while(!(IFG1&UTXIFG0));          //发送寄存器空的时候发送数据
    U0TXBUF=data;
}
void main(void)
{
  WDT_Init();                         //看门狗设置
  Clock_Init();                       //系统时钟设置
  Port_Init();                        //LED端口初始化
  UART_Init();                        //串口设置初始化
  Print_Str("QQ_ROWOSR\n");             //发送字符串测试
  _EINT();                            //开中断
  while(1)                            //无限循环
    {
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百兽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值