文章转载自网络----------------- 感谢原作者的辛勤奉献 MSP430 的定时器中有比较捕获比较模式: 这是定时器的默认模式,当在比较模式下的时候,与捕获模式相关的硬件停止工作,如果这个时候开启定时器中断,然后设置定时器终值( 将终值写入 Rx) , 开启定时器,当 TA R 的值增到 R x 的时候, 中断标志 IFG x 置一,同时产生中断。IFGx 置一。例子:比较模式就像 51 单片机一样,要能够软件设置定时间隔来产生中断处理一些事情, 如键盘扫描, 也可以结合信号输出产生时序脉冲发生器, PWM 信号发生器。如: 不断装载 Rx , 启动定时器, TAR 和 Rx 比较产生中断处理。捕获模式: 利用外部信号的上升沿、下降沿或上升下降沿触发来测量外部或内部事件, 也可以由软件停止。 ISx IxB,GND,VCC 。完成 IFGx 置一捕获模式的应用: 利用捕获源的来触发捕获 TAR 的值, 并将每次捕获的值都保存到 R x 中, 可以随时读取 Rx 的值, Rx 是个 16 位的寄存器, 捕获模式用于事件的精确定位。如测量时间、频率、速度等例子: 利用两次捕获的值来测量脉冲的宽度。或捕获选择任意沿, CCISx= ” 11“(输入选择 VCC) ,这样即当 VCC 与 GND 发生切换时产生捕获条件结合利用:异步通讯同时应用比较模式和捕获模式来实现 UART 异步通信。即利用定时器的比较模式来模拟通讯时序的波特率来发送数据,同时采用捕获模式来接收数据,并及时转换比较模式来选定调整通信的接受波特率,达到几首一个字节的目的---------------------------------------- 利用 MSP430 单片机定时器 A 和捕获/ 比较功能模块结合使用,实现脉冲宽度的测量。本例程用到了定时器 I1A 端口(例如 MSP430F14X 的 引脚)作捕获外部输入的脉冲电平跳变, 同时结合简单的软件算法就能实现脉冲宽度的测量。在实际应用中可根据例程中的 start,end,overflow 三个变量来计算脉冲宽度。此功能模块在实际产品应用中体现出有较高的应用价值。 2- 例程#include <> unsigned int start,end; unsigned char overflow; void main (void) { WDTCTL = WDTPW+WDTHOLD; // 关闭看门狗定时器 P1DIR = BIT0+BIT4; // 设置 方向为输出 P1SEL = BIT2; // 设置 端口为功能模块使用 TACTL = TASSEL0+TACLR+TAIE+MC1; // 定时器A 时钟信号选择 ACLK, 同时设置定时器 A TL1 = MC0+SCS+IE; // 输入上升沿捕获,CCI0A 为捕获信号源_EINT(); // 中断允许 while(1); //LOOP } #pragma vector=TIMERA1_VECTOR // 定时器 A 中断处理__interrupt void timer_a(void) { switch(TAIV) // 向量查询{ case 2: // 捕获中断 TL1&CM0) // 上升沿{ CCTL1=(CCTL1&(~CM0))|CM1; // 更变设置为下降沿触发 start=TAR; // 记录初始时间 overflow=0; // 溢出计数变量复位} else if (CCTL1&CM1) // 下降沿{ CCTL1=(CCTL1&(~CM1))|CM0; // 更变设置为上升沿触发 end=TAR; //用 start,end,overflow 计算脉冲宽度} break; case 10: // 定时器溢出中断 overflow++; break; // 溢出计数加 1 default:break; }} // 例程结束----------------------------------- ----------------------------------- msp430 单片机定时器 Timer_A Timer_A 定时器: 注: msp430 有两个 16 位定时器 Timer_A 和 Timer_B. 二者基本相同。主要有 TACTL,R2,TAIV 几个寄存器。其中最主要的是 TACTL 寄存器, 它决定 Timer_A 的输入时钟信号, Timer_A 的工作模式, Timer_A 的开启与停止, 中断的申请等。定时器 A 大致可分为四个功能模块:计数器、比较/ 捕获寄存器 0 、比较/ 捕获寄存器 1 、比较/ 捕获寄存器 2。计数器是主体它是一个开启和关
MSP430定时器A中文超级详解 来自淘豆网www.taodocs.com转载请标明出处.