2312|4

7

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求助如何利用uart里的数据改变方波 [复制链接]

本帖最后由 helloboy123 于 2014-6-28 23:09 编辑

大家好
我用的是 msp430 g25553  我现在要写一个机械臂的控制程序

p1.1 p1.2  uart接口
p1.6 计时器A 输出一路方波
p2.1 p2.4 计时器B 输出两路占空比不同的方波
我想利用从uart里接受到的数据,让他们来控制方波的占空比(蓝牙模块收到1,则TA1CCR1=222,收到2,则TA1CCR1=111 ),一开始调试的时候是可以的,但是后来不知道为什么我怎么传都不行了
我怀疑是程序本身也有问题
求各位大哥们指教
程序如下:

#include "msp430g2553.h"
#define MCU_CLOCK 1000000
#define PWM_FREQUENCY 900// 180时候为200hz
#define SERVO_STEPS 110   // 设置一度步进
#define SERVO_MIN 900     // 最小值0°
#define SERVO_MAX 2100    // 大概转动180°
unsigned char c;
unsigned int PWM_P =(MCU_CLOCK / PWM_FREQUENCY);// PWM 的频率

void main (void)
{
unsigned int servo_stepval, servo_stepnow;
unsigned int servo_lut[200];
unsigned int i;

// 计算步长值和当前步骤,默认定义为最小
servo_stepval =((SERVO_MAX - SERVO_MIN)/ SERVO_STEPS ); //步幅间隔10.9。
servo_stepnow = SERVO_MIN;

// 赋值LUT
for(i =0;i<200; i++)
{
servo_stepnow += servo_stepval;
servo_lut= servo_stepnow;
}

// 设置PWM波的输出
WDTCTL = WDTPW + WDTHOLD;       // 关闭看门狗
TACCR0 = PWM_P;                  // ta0PWM 频率
TA1CCR0 = PWM_P;                  // ta1PWM 频率
TACCR1 =  servo_lut[0];          // TA0 PWM 占空比设置
TA1CCR1 = servo_lut[0];          // TA1 PWM 占空比设置
TA1CCR2 = servo_lut[0];


//蓝牙模块
if (CALBC1_1MHZ==0xFF)                                        // If calibration constant erased
  {
    while(1);                               // do not load, trap CPU!!
  }
  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

  P1SEL |= BIT6;
  P1DIR |= BIT6;//1.6
  P2DIR |= BIT1;/*管脚p2.1,p2.4由TA1控制输出*/
  P2SEL |= BIT1;
  P2DIR |= BIT4;
  P2SEL |= BIT4;

  TACCTL1  = OUTMOD_7;              /*设置Ta0*/
  TA1CCTL1 = OUTMOD_7;
  TA1CCTL2 = OUTMOD_7;                                /*设置ta1*/
  TACTL = TASSEL_2 + MC_1;        // SMCLK, upmode
  TA1CTL = TASSEL_2 + MC_1;        // SMCLK, upmode

  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
}
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{

          while(!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?
          UCA0TXBUF = UCA0RXBUF;
          c = UCA0RXBUF;
          if(UCA0RXBUF=='1')
           {
                   TA1CCR1=222;
           }
           if(UCA0RXBUF=='2')
           {
                   TA1CCR1=111;
           }
}

 
点赞 关注

回复
举报

7

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
因为我是新手所以大多数代码是参考例程和网上的资料写得
就是不知道怎么利用接到的蓝牙数据来控制
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
求助
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

4
 
麻烦看看
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

5
 
各位大哥
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表