Msp430守时器的介绍及其根本运用
Msp430单片机总共有5种类型的守时器。 看门狗守时器(WDT)、根本守时器(Basic Timer1)、8位守时器/计数器(8-bit Timer/Counter)、守时器A(Timer_A)和守时器B(Timer_B)。可是这些模块不是一切msp430类型都具有的功用。 1、看门狗守时器(WDT) 学过电子的人或许都知道,看门狗的首要功用便是当程序发生毛病时能使受控体系从头启动。 msp430中它是一个16位的守时器,有看门狗和守时器两种形式。 2、根本守时器(Basic Timer1) 根本守时器是msp430x3xx和msp430F4xx系列器材中的模块,通常向其他外围供给低频操控信号。它能够只两个8位守时器,也能够是一个16位守时器。 3、8位守时器/计数器(8-bit Timer/Counter) 如其姓名所示,它是8位的守时器,首要运用在支撑串行通讯或数据交换,脉冲计数或累加以及守时器运用。 4、16位守时器A和B 守时器A在一切msp430系列单片机中都有,而守时器B在msp430f13x/14x和msp430f43x/44x等器材中呈现,根本的结构和守时器A是相同的,由于自己最早了解并运用的是守时器A所以在这里就首要谈一下自己对守时器A的了解和运用。 守时器A是16位守时器,有4种作业形式,时钟源可选,一般都会有3个可装备输入端的比较/捕获寄存器,而且有8种输出形式。经过8种输出形式很简单完成PWM波。 守时器A的硬件电路大致可分为2类功用模块: 一:计数器TAR 计数器TAR是主体,它是一个敞开和封闭的守时器,假如敞开它便是一直在循环计数,只会有一个溢出中止,也便是当计数由0xffff到0时会发生一个中止TAIFG。 二:比较/捕获寄存器CCRX 怎么完成守时功用呢?这就要靠三个比较/捕获寄存器了(以后用CCRx表明)。 当计数器TAR的计数值等于CCRx时(这便是捕获/比较中的比较的意思:比较TAR是否等于CCRx),CCRx单元会发生一个中止。根据中止即可得到相应的守时时刻了。 这样咱们能够经过守时器A得到三个守时时刻了。 一:程序示例 我先给出我的一个运用程序,然后经过程序来书名守时器A的根本用法。程序如下: void init_TimerA ( void ) 其为1S秒守时:由于挑选的是ACLK,UpMode,所以TAR每添加1次的时刻为1/32768s,总共添加32768次,所认为1s 时钟源为ACLK而且为增计数形式 LPM3; //进入低功耗3 #pragma vector = TIMERA0_VECTOR //用户代码 TACCR0 #pragma vector = TIMERA1_VECTOR //根据需求是否要退出低功耗形式 二:程序剖析 1):看程序中的守时器初始化模块。 1:CCTL0 = CCIE; CCTLx是相应比较/捕获寄存器的操控寄存器,它可对比较/捕获寄存器进行设置。 这句子的意思是:敞开了CCR0的中止使能,当计数器TAR计数到CCR0时发生中止。 2:CCR0 = 32768; CCRx便是相应比较器的值。 其为1S秒守时:由于挑选的是ACLK,UpMode,所以TAR每添加1次的时刻为1/32768s,总共添加32768次,所认为1s守时。 3:TACTL = TASSEL_1 + MC_1; TACTL是计数器的操控寄存器。 TASSEL_x是时钟源的挑选。 0——TACLK,运用外部引脚信号作为输入 1——ACLK,辅佐时钟 2——MCLK,体系主时钟 3——INCLK,外部输入时钟 MC_x是挑选TAR的作业形式挑选位。对TACTL进行形式设置的一起也敞开了守时器,要中止只需把MC_0赋值给TACTL就能够。 0——中止形式,用于守时器的暂停 1——增计数形式,计数器计数到CCR0,再清零计数 2——接连计数形式,计数器增计数到0xffff,再清零计数 3——增/减计数形式,增计数到CCR0,再减计数到0 所以这个计数器作业在UP形式,时钟源为ACLK。 2):看程序中的守时器中止模块。 在UP或许UP/DOWN形式时,经过改动CCR0的值能够改动计数器TAR的最大计数值,也便是当计数器计数到CCR0的值时主动会将计数器清零。由于CCR0比较特别,所以CCRO0的中止向量与CCR1,CCR2,TA所共有的中止向量不同。 CCR0的中止很简单只需在函数中加上自己的中止相应程序就行。可是CCR1和CCR2是共用一个中止函数的,所这就需求辨认到底是哪个中止,这能够经过一个寄存器TAIV来辨认, 2——比较/捕获寄存器1中止 4——比较/捕获寄存器2中止 10——守时器溢出 0——没有中止 三:留意事项 需求留意的是在增计数形式时CCR1和CCR2的值应该小于CCR0,不然CCR1和CCR2不会发生中止。 而且每次CCR1和CCR2中止后要把它们从头赋值这样才干确保CCR1和CCR2的中止间隔时刻不变。 相似句子如下: CCR1 += 100; |