历史上的今天
返回首页

历史上的今天

今天是:2025年02月09日(星期日)

正在发生

2020年02月09日 | MSP430学习笔记3----定时器学习

2020-02-09 来源:eefocus

先给出框图

随便从百度文库上找了个定时器程序,分析下。


 1 #include

 2 void main (void)

 3 {

 4     WDTCTL = WDTPW + WDTHOLD;

 5 

 6 

 7     TA1CTL|=TASSEL_2+TACLR+MC_3+ID_3;//采取内部时钟源1.04M,八分频,增减计数模式

 8     TA1CCTL0=CCIE;//启用定时器中断

 9     TA1CCR0=65535;//计数1S

10     P1DIR|=BIT0;

11     _EINT();

12     //LPM4;

13     while(1);

14 }

15 #pragma vector=TIMER1_A0_VECTOR

16 __interrupt void ta10_isr(void)

17 {

18     P1OUT^=BIT0;

19 }

View Code

测试通过,这个程序可以是LED1按2秒的频率闪烁(1秒亮,一秒暗)下面分析下:


第1句:WDTCTL = WDTPW + WDTHOLD;


这一句有点不太懂了,明明是定时器,怎么把看门狗定时器给停止了呢?


第2句:TA1CTL |= TASSEL_2+TACLR+MC_3+ID_3;


后面的解释:采取内部时钟源1.04M,八分频,增减计数模式。


先分析程序句,去头文件里找各自的定义:


1 SFR_16BIT(TA1CTL);                            /* Timer1_A3 Control */

 1 #define MC_0                   (0*0x10u)      /* Timer A mode control: 0 - Stop */

 2 #define MC_1                   (1*0x10u)      /* Timer A mode control: 1 - Up to CCR0 */

 3 #define MC_2                   (2*0x10u)      /* Timer A mode control: 2 - Continous up */

 4 #define MC_3                   (3*0x10u)      /* Timer A mode control: 3 - Up/Down */

 5 #define ID_0                   (0*0x40u)      /* Timer A input divider: 0 - /1 */

 6 #define ID_1                   (1*0x40u)      /* Timer A input divider: 1 - /2 */

 7 #define ID_2                   (2*0x40u)      /* Timer A input divider: 2 - /4 */

 8 #define ID_3                   (3*0x40u)      /* Timer A input divider: 3 - /8 */

 9 #define TASSEL_0               (0*0x100u)     /* Timer A clock source select: 0 - TACLK */

10 #define TASSEL_1               (1*0x100u)     /* Timer A clock source select: 1 - ACLK  */

11 #define TASSEL_2               (2*0x100u)     /* Timer A clock source select: 2 - SMCLK */

12 #define TASSEL_3               (3*0x100u)     /* Timer A clock source select: 3 - INCLK */

第1句话表示了在特殊功能寄存器里找16个位置给Timer1_A3 Control;后面12句话定义了各个宏,实际上就是用前面的标示符表示后面的数,没别的意思。


从数据手册上截取:

数据手册对TACTL的结构有说明:

后面对各个有详细的说明,这里只说明遇到的:


(1)TASSELx:   (Timer_A Source select,A计时器的激励源选择)


TASSEL_0:  00  代表着 TACLK,外部时钟单元


TASSEL_1:  01  代表着 ACLK ,Auxiliary clock ,辅助时钟单元,可做2、4或者8分频。


TASSEL_2:  10  代表着 SMCLK,Sub-main clock,子时钟单元,也可做2、4或者8分频。


TASSEL_3:  11  代表着 INCLK ,外部时钟单元


(2)IDx: 表示分频的个数


ID_0 ID_1 ID_2 ID_3 

1分频,也就是不分 2分频 4分频 8分频

(3)MCx表示模式


百度文库找个图:

嘿嘿,这个图就是整个的定时器结构图和计数模式了,虽然有点复杂,但对于老爷们来说,这点事不算啥。


(4)TACLR:Timer A clear


第3句:TA1CCTL0=CCIE;


后面给出的解释是:启用定时器中断。


从头文件里获取


SFR_16BIT(TA1CCTL0); 

#define CCIE                   (0x0010)       /* Capture/compare interrupt enable */

 

如果TA1CCTL0=CCIE,实际上在置CCIE位为1的同时,把其他位置0,


第4句:P1DIR|=BIT0;


BIT0在头文件里这么定义的,并不是0的意思:


1 #define BIT0                   (0x0001)

2 #define BIT1                   (0x0002)

3 #define BIT2                   (0x0004)

4 #define BIT3                   (0x0008)

所以这句话的意思是把P1.0 的方向设为输出。


第5句:_EINT();


enable interuption  打开全局中断。


相反的,_DINT(); disable interruption关闭全局中断。


第6句:#pragma vector=TIMER1_A0_VECTOR


__interrupt void ta10_isr(void)


用关键字来__interrupt来定义一个中断函数。注意前面的下划线是两个,一个会出错的。


用#pragma vector来提供中断函数的入口地址。

推荐阅读

史海拾趣

埃派克森微电子(Apexone)公司的发展小趣事

2005年,埃派克森微电子发布了一系列USB鼠标控制器芯片,这些产品采用了公司独创的无晶振鼠标控制技术和对管免调技术。这些专利性的混合信号集成核心技术不仅为全球鼠标生产厂商提供了高性价比、简单方便的解决方案,还标志着埃派克森的专利技术全面进入商用时代。这一突破不仅提升了公司的市场地位,也为公司的后续发展注入了强大动力。

CDIL[Continental Device India Pvt. Ltd.]公司的发展小趣事

CDIL采用无晶圆厂模式生产分立半导体器件,专注于功率半导体和高可靠性组件的研发与生产。这一模式使CDIL能够更加灵活地应对市场变化,降低生产成本,提高产品竞争力。同时,公司还采用自己的封装技术,确保产品能够满足太空应用等严苛环境的严格标准。

Bussmann (Eaton)公司的发展小趣事

随着全球市场的不断扩张,Bussmann也加快了其全球化布局的步伐。目前,Bussmann的产品已在全球170多个国家销售,为各地的客户提供优质的电路保护解决方案。同时,为了满足不同客户的需求,Bussmann不断扩展其产品线,现已涵盖电气电源熔断器、电子电路板及小型熔断器、熔丝盒、熔丝座及断开开关等多个品类。这些产品的推出不仅丰富了Bussmann的产品线,也使其能够更好地满足市场的多元化需求。

以上五个故事展示了Bussmann (Eaton)公司在电子行业发展的不同阶段和关键节点,体现了其技术创新、市场拓展和全球化布局的重要历程。这些故事不仅反映了Bussmann在电路保护领域的领先地位,也展示了其在应对市场变化和客户需求方面的灵活性和实力。

Aleph America Corporation公司的发展小趣事

1914年,Bussmann五兄弟以家族生意为起点,在自家的地下室里开始生产熔断器。他们凭借对电路保护的深刻理解和对市场需求的敏锐洞察,不久便将业务从地下室扩展到了小型厂房,并专注于汽车熔断器的生产。这一转变不仅标志着Bussmann业务的飞速发展,也奠定了其在电路保护领域的基石。通过不断的技术创新和市场拓展,Bussmann逐步在保险丝市场上取得了领先地位。

FerriShield公司的发展小趣事

为了进一步推动技术创新和产品研发,FerriShield积极寻求与高校和研究机构的合作。公司与多所知名大学建立了产学研合作关系,共同开展新材料、新工艺的研究和开发。这些合作不仅提升了FerriShield的技术实力,还为公司培养了一批高素质的研发人才。

CLAIREX公司的发展小趣事

Clairex Technologies成立于1993年,当时的市场上,航空电子部件的供应存在着严重的质量问题。老David Catter和一位商业伙伴发现了这一商机,他们提议改进并供应财富500强公司通用航空航空电子部门所需的零件。然而,创业的道路并非一帆风顺。他们面临着资金短缺、技术难题以及市场竞争激烈等多重挑战。但凭借对技术的深入理解和不懈的努力,Clairex团队成功设计出了一款性能卓越的光电导体,并在得克萨斯州普莱诺开始了生产。这一创新产品很快便赢得了市场的认可,为Clairex的发展奠定了坚实的基础。

问答坊 | AI 解惑

电工应用识图

大家一起努力! http://www.abab123.com/bbs/down.asp?html=1033626…

查看全部问答>

请问这个放大器输出该怎么计算???谢谢

如下图计算输出电压Vout [ 本帖最后由 june33 于 2009-10-17 15:07 编辑 ]…

查看全部问答>

ENC03系列各种传感器资料

ENC03系列各种传感器资料…

查看全部问答>

铁路装备行业有前途吗?

俺目前是在工业节能行业从事装备制造研发设计,发现这个行业前景不是太妙。想换到铁路装备行业,有XDJM在铁路装备行业吗?给我一点意见,谢了。…

查看全部问答>

大家想不想让EEWORLD办公室的MM浮上水面??

发现,最近一阵子,论坛里最八卦最大的八卦点就是:   EEWORLD 美眉的声音。   (当然,我就是其中之一。哈哈)   先来几个证据: (去我的回复里找找就行了~~) https://bbs.eeworld.com.cn/viewthread.php?tid=109503&e ...…

查看全部问答>

关于ARM7 LPC2368无操作系统移植TCP/IP协议栈,八百里加急!!!

我刚刚接触嵌入式编程不久 最近接手一个项目要求无操作系统移植一个TCP/IP协议栈,任务比较急 开始我打算移植LwIP,但是过程中遇到了许多问题无法解决 现在正在试图移植 nichelite的TCP/IP协议栈, 因为nichelite LPC23xx系列的程序针对8389芯片编 ...…

查看全部问答>

wince支持imgdecmp.dll吗?

如题!不是ppc呀...我做了个程序,编译没问题,用的是voimage,但运行的时候就说少组件???这是为什么呀???难道wince不支持imgdecmp+voimage????只能ppc里面用??? 那wince用什么浏览图片???…

查看全部问答>

【讨论】捕获模式脉冲计数

我想用430测一个从外部输入的脉冲在1秒钟时间的脉冲数,我用Timer_A定时一秒,然后把输入引脚定义为捕获模式,每测到一个脉冲TAR应加1,(TAR初值是0吧???)同时TAR把此值写入CCR1,那么我到定时时间到时直接读取CCR1的值就是一秒钟内的脉冲数, ...…

查看全部问答>

智能台灯

功能还想加上:时钟和语音播报,求高手解答,在线。。。。等待…

查看全部问答>

J-link 出现target vcc failure .please check target voltage.failed to connect

J-link 出现target vcc failure .please check target voltage.failed to connect我是笔记本电脑,用的开发板是mini2440。在看国嵌体验入门班-1-5(软硬件环境搭建) 视频教程根据视频教程的步骤,我装好了J-Flash ARM V4.08l,并连接好J-link跟开 ...…

查看全部问答>