下载手机汽配人

MSP430的定时器B

TBCTL的TBCLGRP1~0是什么意思,怎么用呢?
提问者:网友 2017-01-23
最佳回答
和定时器A一样用:) 给端程序先看看: /********************************************************* 程序功能:用固定频率的方波驱动蜂鸣器,共16种音调;在蜂鸣器 发出不同音调的同时,LED发光以二进制数字形式指示 当前音调的编号(1~16) ---------------------------------------------------------- 测试说明:聆听蜂鸣器发声的音调变化。 **********************************************************/ #include ""MSP430x14x.h"" #include ""CLK.h"" #include ""LCD1602.h"" unsigned char step = 0xff; void main() { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; Init_CLK();//8Mhz起震 BCSCTL2 |=SELM_2+SELS;//MCLK和SMCLK选择高频晶振 Init_LCD(); LCD_set_position(0x00); LCD_prints(""BUZZER PLAYER:""); LCD_set_position(0x40); LCD_prints(""Current:""); TACCTL0 |=CCIE;//使能比较中断 TACTL=TASSEL_2+ID_3;//TimerA选择SMCLK,8分频后为1MHz TBCCTL0 |=CCIE; TBCTL=TASSEL_1+ID_3+MC_1;//时钟源ACLK/8,up mode TBCCR0=4096-1;//(32768/8),周期为1秒 P3DIR |=BIT7; P3OUT |=BIT7; _EINT(); LPM1; } #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A (void)//蜂鸣器发声 { P3OUT ^=BIT7; } #pragma vector=TIMERB0_VECTOR __interrupt void Timer_B(void)//改变频率 { if(step==0xff) TACTL |=MC_1; step++; LCD_set_position(0x48);LCD_printc(step+48); switch(step) { case 0: TACCR0 = 5000;break; // 100Hz case 1: TACCR0 = 2500; break; // 200Hz case 2: TACCR0 = 1250; break; // 400Hz case 3: TACCR0 = 625; break; // 800Hz case 4: TACCR0 = 500; break; // 1KHz case 5: TACCR0 = 250; break; // 2KHz case 6: TACCR0 = 167; break; // 3KHz case 7: TACCR0 = 125; break; // 4KHz case 8: TACCR0 = 100; break; // 5KHz case 9: TACCR0 = 83; break; // 6KHz case 10: TACCR0 = 71; break; // 7KHz case 11: TACCR0 = 63; break; // 8KHz case 12: TACCR0 = 56; break; // 9KHz case 13: TACCR0 = 50; break; // 10KHz case 14: TACCR0 = 33; break; // 15KHz case 15: TACCR0 = 25; break; // 20KHz case 16: step = 0xff; // 循环播放 } }
回答者:网友
产品精选
在移动端查看: MSP430的定时器B
搜索问答
还没有汽配人账号?立即注册

我要提问

汽配限时折扣

本页是网友提供的关于“MSP430的定时器B”的解答,仅供您参考,汽配人网不保证该解答的准确性。