1868|0

2015

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

MSP430单片机UART帧超时处理程序 [复制链接]

MSP430单片机UART帧超时处理程序
  • #include
  • #define FRAMEBUF_SIZE  32                 /*最大帧长度*/
  • #define IDLELINE_TIME  200                /*线路空闲判据时间*/
  • unsigned char FrameBuff[FRAMEBUF_SIZE];   /*接收帧缓冲区数组*/
  • unsigned int  UART_RcvCnt=0;              /*接收计数*/
  • #pragma vector=UART0RX_VECTOR
  • __interrupt void UART0_RX (void)        // 串口接收中断
  • {
  •   TAR=0;                                //清除帧空闲计时值
  •   TACTL|=MC_1;                          //开始计时
  •   if(UART_RcvCnt    {
  •       FrameBuff[UART_RcvCnt]=U0RXBUF;   //接收一字节数据
  •       UART_RcvCnt++;                    //指向下一字节
  •     }
  •    else  IFG1 &=~ URXIFG0;              //接受区已满,不接收
  • }  //读取RXBUF会自动清除串口中断标志,不接收时需要手动清除
  • #pragma vector=TIMERA1_VECTOR
  • __interrupt void TA_ISR(void)           //定时器溢出中断
  • { int i;
  •   if(TAIV==10)                          //TA溢出
  •   {
  •    TACTL &=~ MC_3;                      //停止计数器
  •    //--------------------------------------------------------------------------
  •    // 数据帧接收完毕,在这里写数据帧处理程序,注意缓冲区只用前UART_RcvCnt个数据
  •     _NOP();  //在这里设断点查看FrameBuff[]数组的数据
  •    //--------------------------------------------------------------------------
  •    UART_RcvCnt=0;             //清除接收计数
  •    for(i=0;i=0; //清除接收缓冲区(可省略)
  •   }
  • }
  • void main( void )
  • {
  •   WDTCTL = WDTPW + WDTHOLD;                   // 停止看门狗
  •   FLL_CTL0 |= XCAP18PF;                        // 配置晶振负载电容
  •   U0CTL = CHAR;                                // 异步通讯模式,8位数据,无校验,1位停止位。
  •   ME1 |= UTXE0 + URXE0;                        // 开启串口0收发模块
  •   U0TCTL |= SSEL0;                        // 选择ACLK作为串口波特率时钟源。
  •   U0BR1 = 0;                                //
  •   U0BR0 = 13;                                // 分频系数整数部分=13
  •   U0MCTL = 0x6B;                        // 分频系数小数部分调制=5/8。(2400bps)
  •   P2SEL |= BIT4 + BIT5;  // P2.4,5 开启第二功能,作为串口收发引脚(不同单片机有差别)
  •   IE1 |= URXIE0;                         // 开启UART0的接收中断,在中断内接收数据
  •   TACTL = TASSEL_1  + TAIE;             // TA设为增计数模式,时钟=ACLK,开中断
  •   TACCR0=IDLELINE_TIME;                 //设置溢出超时条件
  •   _EINT();                                // 总中断允许
  •   while(1)
  •   {
  •     //CPU可以执行其他任务
  •   }
  • }

 
点赞 关注

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

随便看看
查找数据手册?

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