4813|5

4

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

430G2553串口发送数据串口调试助手显示RX没改变,求指教 [复制链接]

1 Byte
3 Byte
3 Byte
1 Byte
类型
序列号
电压数据
电流数据
0x55
2 bit
22 bit
12 bit
12 bit
0xAA
//需要发送数据的格式

目标:用单片机填充以上数据并从串口发出,从串口调试助手观察结果
目前代码:
#include
#include

void USCI_A0_init(void)
{

      DCOCTL = 0; // Select lowest DCOx and MODx settings

      BCSCTL1 = CALBC1_1MHZ; // Set DCO

      DCOCTL = CALDCO_1MHZ;

      P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD

      P1SEL2 = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD

      UCA0CTL1 |= UCSSEL_2; // SMCLK

      UCA0BR0 = 104; // 1MHz 9600

      UCA0BR1 = 0; // 1MHz 9600

      UCA0MCTL = UCBRS0; // Modulation UCBRSx = 1

      UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**

      IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt

      __bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled
}


int main(void)

{

  WDTCTL = WDTPW + WDTHOLD; // Stop WDT

  USCI_A0_init();
  unsigned char sbuf[8];        /*待发送的内容*/
  unsigned int vol,curr,index=0;
  while(1)
  {
      sbuf[0] = (unsigned char)0x55;    //头部,固定
      sbuf[1] = (unsigned char)((0x80)|(index & (0x3F<<16)));    //前两个bit为类型,此处以10B电压源数据为例,后6bit为index前6位
      sbuf[2] = (unsigned char)(index & (0xFF<<8));    //去除头6bit后的一个字节
      sbuf[3] = (unsigned char)(index & 0xFF);    //取index最后一个字节

      vol = (unsigned int)(20);    //电压,先按固定值20取
      curr = (unsigned int)(30);  //电流,先按固定值30取
      sbuf[4] = (unsigned char)(vol & (0xFF<<4));//电压数据前八bit放入第一个Byte
      sbuf[5] = (unsigned char)(((vol&0xF)<<4)|(curr & (0xF<<8)));//电压数据的后四位和电流数据的前4位
      sbuf[6] = (unsigned char)(curr & 0xFF);//电流数据的后8位
      sbuf[7] = (unsigned char)0xAA;        //尾部

      unsigned int i;
      for(i=0;i<8;i++)
          UartSend(sbuf);
  }
}

#pragma vector=USCIAB0RX_VECTOR

void UartSend(unsigned char c)//发送字节函数
{
while(!(IFG2 & UCA0TXIFG));  //待发送为空
UCA0TXBUF=c;
IFG2 &=~UCA0RXIFG;
}

目前问题:连接串口,串口调试助手里显示的“RX”没有变化;若成功的发送的话不是应该在串口调试助手里看到“RX”增加吗?
求大神指教

注:初学者,对单片机操作的代码都是网上找来的

最新回复

发送函数和中断服务函数弄混淆了。 看例程要知其然并知其所以然,不要一味模仿。 程序中明显用了中断,那么中断服务程序是哪个? 你的初始化函数最后一句是进入低功耗模式,那么等到串口收到数据再继续运行? 中断服务和发送函数是同一个,这个函数缺少参数,执行不出错已经是万幸了。 先下载仿真例程,手动单步跟踪,看看人家是怎么顺序执行的。搞清楚了再考虑怎么写你自己的程序。   详情 回复 发表于 2014-11-8 23:10
 
点赞 关注

回复
举报

3471

帖子

13

TA的资源

五彩晶圆(高级)

沙发
 
用示波器 测量引脚的波形。看看是否有数据,有的话,看串口助手的配置,没有的话,分析程序

点评

谢谢指点,我觉得应该是程序的问题,我再看看,新人有很多不懂,还需多多请教各位  详情 回复 发表于 2014-11-9 14:48
 
 

回复

1531

帖子

49

TA的资源

五彩晶圆(中级)

板凳
 
换成二进制的,看看能不能得到数据,如果没有的话自己慢慢查程序,如果有的话,你慢慢在更改下设置就OK啦
 
 
 

回复

1193

帖子

0

TA的资源

纯净的硅(高级)

4
 
发送函数和中断服务函数弄混淆了。
看例程要知其然并知其所以然,不要一味模仿。
程序中明显用了中断,那么中断服务程序是哪个?
你的初始化函数最后一句是进入低功耗模式,那么等到串口收到数据再继续运行?
中断服务和发送函数是同一个,这个函数缺少参数,执行不出错已经是万幸了。
先下载仿真例程,手动单步跟踪,看看人家是怎么顺序执行的。搞清楚了再考虑怎么写你自己的程序。

点评

多谢指教,刚接触单片机,很多都还不会。  详情 回复 发表于 2014-11-9 14:45
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

5
 
qiushenghua 发表于 2014-11-8 23:10
发送函数和中断服务函数弄混淆了。
看例程要知其然并知其所以然,不要一味模仿。
程序中明显用了中断,那 ...

多谢指教,刚接触单片机,很多都还不会。
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

6
 
ienglgge 发表于 2014-11-8 18:41
用示波器 测量引脚的波形。看看是否有数据,有的话,看串口助手的配置,没有的话,分析程序

谢谢指点,我觉得应该是程序的问题,我再看看,新人有很多不懂,还需多多请教各位
 
 
 

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

随便看看
查找数据手册?

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