[讨论] 定时器产生PWM波

Jacktang   2015-9-28 23:38 楼主
  1. #include <msp430.h>
  2. void ini_sys(void)
  3. { char i;
  4. WDTCTL=WDTPW+WDTHOLD; //STOP W D T
  5. do
  6. {
  7. IFG1&=~OFIFG; for(i=0xff;i>0;i--);
  8. }
  9. while ((IFG1&OFIFG)!=0);
  10. }
  11. int main(void)
  12. {
  13. ini_sys();
  14. BCSCTL2|=SELS;
  15. P1SEL|=0X04; //P1.1(ta0)
  16. P2DIR|= 0x01; // P1.3 output
  17. P2OUT|=0X00;
  18. //CCTL1|=CM_1+SCS+CAP+CCIE;
  19. //CCTL2|=CM_2+SCS+CAP+CCIE;
  20. CCTL1|=CM_1+SCS+CAP+CCIE;
  21. TACTL|= TASSEL_2 +ID_3+MC_1+TAIE; // SMCLK, up-down mode
  22. _EINT();
  23. // _BIS_SR(LPM0_bits);
  24. while(1);
  25. }
  26. #pragma vector=TIMERA0_VECTOR
  27. __interrupt void TimerA0(void)
  28. {
  29. if(CCTL1&CM1)
  30. {//P2OUT&=~0X01;
  31. CCTL1=CM_1+SCS+CAP+CCIE;
  32. }
  33. else if(CCTL1&CM0)
  34. {//P2OUT|=0X01;
  35. CCTL1=CM_2+SCS+CAP+CCIE;
  36. }
  37. }
  38. /*#pragma vector=TIMERA1_VECTOR
  39. __interrupt void TimerA1(void)
  40. {switch(TAIV)
  41. {case 2:P2OUT|=0X01;break;
  42. case 4:P2OUT&=~0X01;break;
  43. default:break;
  44. }
  45. }*/
  46. #pragma vector=TIMERA1_VECTOR
  47. __interrupt void TimerA1(void)
  48. {switch(TAIV)
  49. {
  50. case 2:P2OUT^=BIT0;break;
  51. default:break;
  52. }
  53. }
本帖最后由 qiushenghua 于 2015-9-29 00:39 编辑

回复评论 (2)

看看
点赞  2015-9-28 23:54
点赞  2015-9-29 01:01
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复