834707939

    1. qiushenghua 发表于 2015-4-1 15:33 你这是想干嘛呢? 贴一段代码让别人帮你看,又不说是什么MCU,也不说执行完是什么结果,有没有实现自己的目的。 程序是自己改的吧?反正我是看不懂你在做什么: 在TimeA的中断服务里修改TBCCR1的数值,那么你就需要确保两个定时器同时正常工作才有效果。
      #include "msp430.h" typedef unsigned char uchar; typedef unsigned int  uint; uchar n,j; uint flag; uchar table[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,\ 21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,\ 44,45,46,47,48,49,50,49,48,47,46,45,44,43,42,41,40,39,38,37,36,35,34,\ 33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,\ 10,9,8,7,6,5,4,3,2,1,0};                     //呼吸的效果 void main(void) {   uchar i;   WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT   BCSCTL1 &= ~XT2OFF;                       //打开xt2晶振   do   {    IFG1 &= ~OFIFG;    for(i = 0xff; i > 0; i--);   }   while((IFG1 & OFIFG));                     //等待起振,消除晶体失败标志   BCSCTL2 |= SELM_2 + SELS;                  //mclk.smclk选择高频晶振   TBCTL |= TBSSEL_2 + ID_3+ MC_1 ;           //计数时钟选测smclk,8分频,增计数模式 1mhz   P2SEL |= BIT4 + BIT3 ;                      // P2.3 .4特殊功能   P2DIR |= BIT4 + BIT3;                       // P2.3 .4输出   TBCCR0 = 50;                              // 50us de 周期   TBCCTL0 = CCIE;                           // 开中断使能   TBCCTL2 = OUTMOD_3 ;                      // 输出方式3   TBCCTL1 = OUTMOD_3;   _EINT();                                 // Enter LPM0 interrupt   LPM0;                                    //低功耗 } #pragma  vector  = TIMERB0_VECTOR __interrupt void timeB() { flag++; if(flag == 400)                             //大概20 ms时 较为理想 {    TBCCR2 = table[j++];    TBCCR1 = table[n++];    if(n > 100)      n = 0;    if(j > 100)      j = 0;    flag = 0; } }   不好意思啊 ,  我用的是msp430f149  ,  想用定时器b 产生两路pwm   来控制两路led灯 产生呼吸的效果,  结果灯的亮度不变 ,
    2. 还是不行{:1_85:}
    3. 为什么没有pwm产生 4/2384 微控制器 MCU 2015-03-31
      好的  , 我试试
    4. 好的,我看看啊 , 谢了
    5. 为什么没有产生pwm呢 3/2282 stm32/stm8 2015-03-31
      我用的是msp430f149 #include "msp430.h" typedef unsigned char uchar; typedef unsigned int  uint; unsigned int flag; uchar table[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,\ 21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,\ 44,45,46,47,48,49,50,49,48,47,46,45,44,43,42,41,40,39,38,37,36,35,34,\ 33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,\ 10,9,8,7,6,5,4,3,2,1,0};//呼吸的效果 void main(void) {   uchar i;   WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT      BCSCTL1 &= ~XT2OFF;                       //打开xt2晶振   do   {    IFG1 &= ~OFIFG;    for(i = 0xff; i > 0; i--);   }   while((IFG1 & OFIFG));                    //等待起振,消除晶体失败标志      BCSCTL2 |= SELM_2 + SELS;                 //mclk.smclk选择高频晶振   //TACTL |= TASSEL_2 + ID_3 + MC_1;          //计数时钟选测smclk,8分频,增计数模式 1mhz   TBCTL |= TBSSEL_2 + ID_3+ MC_1 ;   P2DIR |= BIT4 + BIT3;                      // P2.3 .4输出   P2SEL |= BIT4 + BIT3 ;                      // P2.3 .4特殊功能ta1      TBCCR0 = 50;                             // 50us de 周期   TBCCTL0 = CCIE;                           // 开中断使能   TBCCTL2 = OUTMOD_3 ;                      // 输出方式3   TBCCTL1 = OUTMOD_3;                        _EINT();                                 // Enter LPM0 w/ interrupt   LPM0;                                    //低功耗    while(1);                                 //应该不会进入此句 } #pragma  vector  = TIMERB0_VECTOR __interrupt void timeB() { static uchar  i = 0,j = 0; flag++; if(flag == 400)                             //大概20 ms时 较为理想 {    flag = 0;    TACCR2 = table[i++];    TACCR1 = table[j++];    if(i > 100)      i = 0;    if(j > 100)      j = 0; } } 这是我的程序,求大神指导 啊 , 用的msp430f149
    6. 为什么没有pwm产生 4/2384 微控制器 MCU 2015-03-31
      我用的是msp430f149 #include "msp430.h" typedef unsigned char uchar; typedef unsigned int  uint; unsigned int flag; uchar table[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,\ 21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,\ 44,45,46,47,48,49,50,49,48,47,46,45,44,43,42,41,40,39,38,37,36,35,34,\ 33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,\ 10,9,8,7,6,5,4,3,2,1,0};//呼吸的效果 void main(void) {   uchar i;   WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT      BCSCTL1 &= ~XT2OFF;                       //打开xt2晶振   do   {    IFG1 &= ~OFIFG;    for(i = 0xff; i > 0; i--);   }   while((IFG1 & OFIFG));                    //等待起振,消除晶体失败标志      BCSCTL2 |= SELM_2 + SELS;                 //mclk.smclk选择高频晶振   //TACTL |= TASSEL_2 + ID_3 + MC_1;          //计数时钟选测smclk,8分频,增计数模式 1mhz   TBCTL |= TBSSEL_2 + ID_3+ MC_1 ;   P2DIR |= BIT4 + BIT3;                      // P2.3 .4输出   P2SEL |= BIT4 + BIT3 ;                      // P2.3 .4特殊功能ta1      TBCCR0 = 50;                             // 50us de 周期   TBCCTL0 = CCIE;                           // 开中断使能   TBCCTL2 = OUTMOD_3 ;                      // 输出方式3   TBCCTL1 = OUTMOD_3;                        _EINT();                                 // Enter LPM0 w/ interrupt   LPM0;                                    //低功耗    while(1);                                 //应该不会进入此句 } #pragma  vector  = TIMERB0_VECTOR __interrupt void timeB() { static uchar  i = 0,j = 0; flag++; if(flag == 400)                             //大概20 ms时 较为理想 {    flag = 0;    TACCR2 = table[i++];    TACCR1 = table[j++];    if(i > 100)      i = 0;    if(j > 100)      j = 0; } }
    7. 强仔00001 发表于 2015-3-28 22:11 我记得是一样的吧
      不行啊 ,  我用a可以, b  就不行 了
    8. #include "msp430.h" typedef unsigned char uchar; typedef unsigned int  uint; uchar flag; uchar table[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,\ 21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,\ 44,45,46,47,48,49,50,49,48,47,46,45,44,43,42,41,40,39,38,37,36,35,34,\ 33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,\ 10,9,8,7,6,5,4,3,2,1,0};//呼吸的效果 void main(void) {   uchar i;   WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT      BCSCTL1 &= ~XT2OFF;                       //打开xt2晶振   do   {    IFG1 &= ~OFIFG;    for(i = 0xff; i > 0; i--);   }   while((IFG1 & OFIFG));                    //等待起振,消除晶体失败标志      BCSCTL2 |= SELM_2 + SELS;                 //mclk.smclk选择高频晶振   TACTL |= TASSEL_2 + ID_3 + MC_1;          //计数时钟选测smclk,8分频,增计数模式 1mhz //TBCTL |= TBSSEL_2 + ID_3+ MC_1 ;   TBCTL|= TBSSEL_2 + TBCLGRP_0 + ID_3 + MC_1 ;      P4SEL|=BIT2;   P4DIR|=BIT2;       TBCCR0 = 50;                             // 50us de 周期   TBCCTL1 = OUTMOD_3+CLLD_0; //  TBCCTL1 &= ~CAP;   TACCR0 =5000;   TACCTL0 = CCIE;                         // 开中断使能       _EINT();                                 // Enter LPM0 w/ interrupt //  LPM0;                                    //低功耗    while(1);                                 //应该不会进入此句 } #pragma  vector  = TIMERA0_VECTOR __interrupt void timeA() { static uchar  i = 0; flag++;   P2DIR = 0XFF;   P2OUT = 0XFF; if(flag == 4)                             //大概20 ms时 较为理想 {       flag = 0;    TBCCR1 = table[i++];    if(i > 100)    { i = 0;         P2DIR = 0XFF;      P2OUT = 0X00;    }     } }这是我写的,  你看看行不行啊
    9. pwm的三路输出 3/2152 微控制器 MCU 2015-03-28
      #include "msp430.h" typedef unsigned char uchar; typedef unsigned int  uint; uchar flag; uchar table[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,\ 21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,\ 44,45,46,47,48,49,50,49,48,47,46,45,44,43,42,41,40,39,38,37,36,35,34,\ 33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,\ 10,9,8,7,6,5,4,3,2,1,0};//呼吸的效果 void main(void) {   uchar i;   WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT      BCSCTL1 &= ~XT2OFF;                       //打开xt2晶振   do   {    IFG1 &= ~OFIFG;    for(i = 0xff; i > 0; i--);   }   while((IFG1 & OFIFG));                    //等待起振,消除晶体失败标志      BCSCTL2 |= SELM_2 + SELS;                 //mclk.smclk选择高频晶振   TACTL |= TASSEL_2 + ID_3 + MC_1;          //计数时钟选测smclk,8分频,增计数模式 1mhz //TBCTL |= TBSSEL_2 + ID_3+ MC_1 ;   TBCTL|= TBSSEL_2 + TBCLGRP_0 + ID_3 + MC_1 ;      P4SEL|=BIT2;   P4DIR|=BIT2;       TBCCR0 = 50;                             // 50us de 周期   TBCCTL1 = OUTMOD_3+CLLD_0; //  TBCCTL1 &= ~CAP;   TACCR0 =5000;   TACCTL0 = CCIE;                         // 开中断使能       _EINT();                                 // Enter LPM0 w/ interrupt //  LPM0;                                    //低功耗    while(1);                                 //应该不会进入此句 } #pragma  vector  = TIMERA0_VECTOR __interrupt void timeA() { static uchar  i = 0; flag++;   P2DIR = 0XFF;   P2OUT = 0XFF; if(flag == 4)                             //大概20 ms时 较为理想 {       flag = 0;    TBCCR1 = table[i++];    if(i > 100)    { i = 0;         P2DIR = 0XFF;      P2OUT = 0X00;    }     } }你看看我写的, 不过不行啊, 而且哦找不到问题
    10. pwm的三路输出 3/2152 微控制器 MCU 2015-03-28
      你这个有用吗
    11. 看啊可能

最近访客

< 1/1 >

统计信息

已有4人来访过

  • 芯积分:--
  • 好友:--
  • 主题:3
  • 回复:11

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言