msp430f5529還是5438a的,親測有效,函數封裝好了
單片機源程序如下:
- #include <msp430f5438a.h>
- void delay_1us(void)
- {
- unsigned int i;
- for(i=0;i<100;i++);
- }
- // *************************************************************
- // 延時函數,延時N*1us
- // *************************************************************
- void delay_nus(unsigned int n)
- {
- unsigned int i;
- for(i=0;i<n;i++)
- {
- delay_1us();
- }
- }
- // *************************************************************
- // 延時函數,延時1ms
- // *************************************************************
- void delay_1ms(void)
- {
- unsigned int i;
- for (i=0;i<1140;i++);
- }
- // *************************************************************
- // 延時函數,延時N*ms
- // *************************************************************
- void delay_nms(unsigned int n)
- {
- unsigned int i;
- for (i=0;i<n;i++)
- {
- delay_1ms();
- }
- }
- // *************************************************************
- // 主程序
- // *************************************************************
- void main(void)
- {
- unsigned const PWMPeriod = 200;
- unsigned const PWMPeriod1= 300;
- unsigned int i;
- unsigned int j;
- WDTCTL = WDTPW + WDTHOLD; // 關閉看門狗
- P8DIR |= BIT1; // 設置P1.2為輸出
- P8SEL |= 0x01; // 設置P1.2為TA0.1輸出
- TA0CCAR0=500-1;
- TA0CCTL1 = OUTMOD_7; // 設置PWM 輸出模式為:7 - PWM復位/置位模式,
- TA0CCR1 =PWMPeriod; // 設置PWM 周期
- TA0CCTL2 = OUTMOD_7;
- TA0CCR2 = PWMPeriod1;// 即輸出電平在TAR的值等于CCRx時復位,當TAR的值等于CCR0時置位。
- TA0CTL = TASSEL_2 + MC_1; // 設置TIMERA的時鐘源為SMCLK, 計數模式為up
- // _BIS_SR(LPM0_bits + GIE);
-
- while(1)
- {
- //漸亮過程:不斷設置CCR1的值,使翻轉的時間變長,改變PWM的占空比
-
- for(i=0;i<PWMPeriod;i+=1)
- {
- TA0CCR1=i;
- delay_nus(600); //占空比變化的延時,調整延遲時間可改變呼吸燈變亮的速度
- }
- //漸暗過程:不斷設置CCR1的值,使翻轉的時間變短,改變PWM的占空比
-
- for(i=PWMPeriod;i>0;i-=1)
- {
- TA1CCR1=i;
- delay_nus(50); //占空比變化的延時,調整延遲時間可改變呼吸燈變暗的速度
- }
- delay_nms(70);
-
-
-
- }
- }
復制代碼
所有資料51hei提供下載:
timertest.zip
(346.8 KB, 下載次數: 98)
2018-7-12 13:34 上傳
點擊文件名下載附件
|