4507|3

5

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

MSP430普通IO模拟串口的问题,读取数据老不对 [复制链接]

由于串口不够用,所以用MSP430普通IO模拟串口来读取数据,并将数据通过MSP430自带的串口发送到上位机,即下面的语句TXBYTE1(recvBuff) ,可是读到的数据一直是FF。定时器A采用时钟1MHz,模拟串口速率为9600,IO口为F1611的P2.2,哪位能帮忙看下么?搞了两天了,没搞出来

#include
void InitSys();

unsigned char bitTime=100;//每一位数据时间
unsigned char hBitTime=50;//半位数据的时间
unsigned char recvBuff;//接收数据缓冲区,8位,开始位结束位不接收
unsigned char bitCnt=0;//正在接收的数据位标志


#define RXD       0x04                      // RXD on P2.2
#define TXD       0x08                      // TXD on P2.3


void int_clk()
{
    unsigned char i;
    BCSCTL1&=~XT2OFF;  //打开XT振荡器
    BCSCTL2|=SELM1+SELS+DIVS_3;//MCLK 8M and SMCLK 1M  
    do
        {
        IFG1 &= ~OFIFG;                 //清除振荡错误标志
        for(i = 0; i < 100; i++)
          _NOP();                        //延时等待
        }
    while ((IFG1 & OFIFG) != 0);        //如果标志为1继续循环等待
    IFG1&=~OFIFG;
}


void main()
{
  _DINT();    // 关闭中断
  int_clk();  // 初始化时钟
  InitSys();  
  _EINT();
    while(1);

}


/*************中断服务程序*****************************/
#pragma  vector=TIMERA0_VECTOR
__interrupt void TA0_ISR(void)
{
  TACCR0 += bitTime;
  switch(bitCnt)
  {
  case 0:
         recvBuff = 0;//清空缓冲区
        TACCR0 += hBitTime ;//
        TACCTL0 &= ~CAP;
        bitCnt++;
        break;
  case 8:
        if(P2IN&RXD)
          recvBuff |= BIT7;
        else  
          recvBuff &= ~BIT7;
       TXBYTE1(recvBuff);  将模拟串口读到的数据经串口发送到上位机软件
       bitCnt++;
       break;
  case 9:
       TACCTL0 |= CAP;
       bitCnt = 0;
       break;
  default:
        if(P2IN&RXD)
             recvBuff |= BIT7;
        else  
            recvBuff &= ~BIT7;
        recvBuff>>=1;
        bitCnt++;
        break;
  }
}


/***********子函数***************/
void InitSys()
{
            WDTCTL = WDTPW+WDTHOLD ;//关闭看门狗
            TACTL = TASSEL1 + ID_3 + MC_2; //选择MCLK,8分频得1MHz为定时器始钟
            
            P2SEL = RXD;    // Set P2.2 to TA0,P2.2 是TA0 捕获比较模式的外部输入口  

            CCTL0 = SCS + OUTMOD0 + CM1 + CAP + CCIE + CCIS_1; // Sync, Neg Edge, Cap
            

}

[ 本帖最后由 tansp 于 2012-6-11 20:55 编辑 ]

最新回复

遇到同样的问题,读到接收缓冲区的数据总是FF,请问楼主如何解决的?  详情 回复 发表于 2016-5-24 13:32
 
点赞 关注

回复
举报

5015

帖子

13

TA的资源

裸片初长成(初级)

沙发
 
建议先测试下捕获模块的功能,确定TA0能够正常的工作
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发 wstt 的帖子

能够进入中断并发送数据,只是发送的数据不对,说明他能够捕获起始位的下降沿,捕获功能应该没问题啊
 
 
 

回复

39

帖子

0

TA的资源

一粒金砂(中级)

4
 
遇到同样的问题,读到接收缓冲区的数据总是FF,请问楼主如何解决的?
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

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