3610|4

3

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

技术问题:如何使用MSP430的timer_B 模拟UART收接口?有做过的兄弟给个例子参考下 [复制链接]

TB1(P4.1)作为mcu_txd;TB2(P4.2)作为mcu_rxd。当前MSP430发送侧已调通,可正常发送数据;但接收侧仍不能接收。
据相关资料,定时器B无输入信号锁存功能,故障定时器A的那一套接收流程不适用于定时器B。在这里集思广益,期望大
伙提些实用的建议。

RX_TX.JPG (18.01 KB, 下载次数: 3)

收发脚

收发脚

最新回复

LZ能不能把解决的方法描述下  详情 回复 发表于 2011-9-1 18:38
 
点赞 关注

回复
举报

69

帖子

0

TA的资源

纯净的硅(初级)

沙发
 
你好,请参看下TImer模拟UART的例子,在TI官方的例程包中有完整的接受和发送的代码,你可以参考一下。
 
 

回复

3

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
已经参考了的,但TA与TB还是存在一些关键差异的:即定时器B无输入信号锁存功能(无SCCI);是否可通过CCI位来判断输入电平;
如下附上中断接收发送代码,劳烦各位帮忙看看,非常感谢啊:
#if __VER__ < 200
interrupt[TIMERB0_VECTOR] void Timer_B (void)
#else
#pragma vector=TIMERB1_VECTOR
__interrupt void TIMERB1_ISR (void)
#endif
{
    // RX(接收字节)
    if ( TBCCTL2 & CCIFG ) // RX on CCI2A?(如果CCI2A是捕获输入引脚)
    {
        TBCCR2 += Bitime;    // Add Offset to CCR2(下一定时时间为1位时间)
        
        if( TBCCTL2 & CAP ) // Capture mode = start bit edge(如果是在捕获模式,则是在等待起始位)
        {
            TBCCTL2 &= ~ CAP;        // Switch from capture to compare mode(得到起始位后改为比较模式)
            TBCCR2 += Bitime_5;    //定时位置改到位的中间位置(加半个位的时间)
        }
        else
        {
            RX_DATA = RX_DATA >> 1;    //先收到的是低位
            if (TBCCTL2 & CCI) // Get bit waiting in receive latch,TIMREB 无SSCI锁存位
                RX_DATA |= 0x80;    //CCI中锁存的是比较相等时的输入引脚上的信号
            BitCnt --; // All bits RXed?    //位计数减1
            if ( BitCnt == 0)        //接收完一个字节?
            //>>>>>>>>>> Decode of Received Byte Here <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
            {
                BitCnt = 0x08;
                TBCCTL2 &= ~ CCIE; // All bits RXed, disable interrupt(接收完一个字节后禁止中断)
                //_BIC_SR_IRQ(LPM2_bits); // Clear LPM3 bits from 0(SR)(准备退出低功耗模式)
            }
            //>>>>>>>>>> Decode of Received Byte Here <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
        }
        TBCCTL2 &= ~ CCIFG;
    }
    // TX(发送字节,在进入发送中断前已经置位OUTMOD0)
    else if(TBCCTL1 & CCIFG)
    {      
        TBCCR1 += Bitime;    // Add Offset to CCR1(下一定时时间为1位时间)
        
        if ( BitCnt == 0)        //所有位发送完成
                TBCCTL1 &= ~ CCIE;    // All bits TXed, disable interrupt(禁止中断)
          else
          {
               
                if (TX_DATA & 0x01)
                    TBCCTL1 &= ~ OUTMOD2;    // TX Mark(输出模式OUTMOD0:置位)
                else
                    TBCCTL1 |= OUTMOD2;    // TX Space(输出模式OUTMOD2+OUTMOD0:复位)
   
                TX_DATA = TX_DATA >> 1;    //低位先发
                BitCnt --;            //位计数
          }
          TBCCTL1 &= ~ CCIFG;
    }
}
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(中级)

4
 

结贴。。。。

已经搞定了,谢谢各位关注。

 
 
 

回复

5015

帖子

13

TA的资源

裸片初长成(初级)

5
 

回复 4楼 eass_li 的帖子

LZ能不能把解决的方法描述下
 
 
 

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

随便看看
查找数据手册?

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