MSP430霓虹灯_第1页
MSP430霓虹灯_第2页
MSP430霓虹灯_第3页
MSP430霓虹灯_第4页
MSP430霓虹灯_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、霓虹灯霓虹灯内容提要内容提要定时器概述定时器概述定时器定时器A定时器的应用定时器的应用利用利用MSP430G2553MSP430G2553开发板上开发板上P1.3P1.3的按键改变的按键改变LEDLED亮度。(亮度。(P1.6P1.6为为TATA输出口并接输出口并接LEDLED)项目目标项目目标定时器概述定时器概述 定时器是能够对时钟进行计数的计数器,定时器是能够对时钟进行计数的计数器,类似闹钟。类似闹钟。定时器就是为弥补定时器就是为弥补CPU顺序执行程序这个顺序执行程序这个“死脑经死脑经”缺陷量身定做的。缺陷量身定做的。定时器定时器 (Timer) 主要内容主要内容看门狗定时器看门狗定时器

2、WDT的操作的操作 看门狗定时器的中断控制功能看门狗定时器的中断控制功能 看门狗应用举例看门狗应用举例16位定时器位定时器 A 定时器定时器A的特性的特性 Timer_A结构结构 Timer_A工作原理工作原理 Timer_A典型应用典型应用16位定时器位定时器 B16位定时器位定时器 DTimer_A模块模块定时器计数值定时器计数值捕获比较寄存器捕获比较寄存器外部外部输入输入时钟时钟 MCx=00 MCx=00,停止计数模式,停止计数模式 MCx=10 MCx=10,连续计数模式,连续计数模式 MCx=01 MCx=01,增计数模式,增计数模式 MCx=11 MCx=11,增减计数模式,增减

3、计数模式核心单元是一个核心单元是一个1616位的主定时器。位的主定时器。工作模式工作模式连续计数模式连续计数模式主定时器犹如一个表盘,主定时器犹如一个表盘,TARTAR寄存器最大值寄存器最大值6553565535,计满则清,计满则清0 0,指针沿表盘指针沿表盘360360工作。工作。增计数模式增计数模式注意:注意:1.当当TAR的值与的值与TACCR0预设值相等时,预设值相等时,TAR被强迫清被强迫清0,时,时钟表盘只能在灰色区域活动。钟表盘只能在灰色区域活动。2.定时器的实际周期不再仅由时钟源决定,还与定时器的实际周期不再仅由时钟源决定,还与TACCR0设定设定值有关。值有关。增减计数模式增

4、减计数模式注意:注意:1.当当TAR的值与的值与TACCR0预设值相等时,预设值相等时,TAR减法计数,时钟减法计数,时钟表盘只能在灰色区域活动。当表盘只能在灰色区域活动。当TAR减到减到0后,主定时器自动变后,主定时器自动变回加法器。回加法器。2.定时器的实际周期不再仅由时钟源决定,还与定时器的实际周期不再仅由时钟源决定,还与TACCR0设定设定值有关,并且是增计数模式的两倍。值有关,并且是增计数模式的两倍。主定时器的一般设置主定时器的一般设置1.确定计数脉冲的来源寄存器确定计数脉冲的来源寄存器TASSELx及分频值寄存器及分频值寄存器IDx。2.确定定时器的工作模式寄存器确定定时器的工作模

5、式寄存器MCx。3.何时触发何时触发TAIFG?4.复位键复位键TACLR,用于重新开始一次计时。,用于重新开始一次计时。TACLR对分对分频器也是彻底的复位。频器也是彻底的复位。定时器定时器A的应用的应用1 例例1:利用定时器的增计数模式控制:利用定时器的增计数模式控制P10口,让口,让P10口灯每隔口灯每隔50毫秒闪一次。时钟为毫秒闪一次。时钟为800KHz。ACLK=32768HzSMCLK=MCLK=DCO=800KHz#include void main(void) WDTCTL = WDTPW + WDTHOLD; / 关狗 P1DIR |= 0 x01; / P1.0 输出 CC

6、TL0 = CCIE; / CCR0 中断打开 CCR0 = 40000; TACTL = TASSEL_2 + MC_1; / SMCLK, 增计数 _BIS_SR(LPM0_bits + GIE); / 进入 LPM0 打开全局中断 #pragma vector=TIMER0_A0_VECTOR_interrupt void Timer_A (void) P1OUT = 0 x01; / P1.0取反中断向量中断向量#define TIMER0_A1_VECTOR /* 0 xFFF0 Timer0_A CC1, TA0 */#define TIMER0_A0_VECTOR /* 0 xF

7、FF2 Timer0_A CC0 */#define TIMER1_A1_VECTOR /* 0 xFFF8 Timer1_A CC1-4, TA1 */#define TIMER1_A0_VECTOR /* 0 xFFFA Timer1_A CC0 */例例2:利用定时器的连续计数模式控制:利用定时器的连续计数模式控制P10口,口,让让P10口灯每隔口灯每隔1秒闪一次。时钟为秒闪一次。时钟为800KHz。ACLK=32768HzSMCLK=MCLK=DCO=800KHzXT1CLK的配置要分为以下几步:的配置要分为以下几步:1.配置配置IO口口13引脚和引脚和14引脚为引脚为XT1功能。功能

8、。 2.清除清除XT1OFF标志位。标志位。3.配置配置XCAP为为XCAP_3,即,即12PF的电容。的电容。 4.等待等待XT1起振。起振。 单片机上电后: 适用于适用于MSP430F6638(1)XT1处于LF模式作为XT1CLK时钟源。ACLK选通为XT1CLK。 (2)MCLK选通为DCOCLKDIV (3)SMCLK选通为DCOCLKDIV (4)FLL使能,且将XT1CLK作为FLL参考时钟。 (5)XIN和XOUT脚设置为通用IO,XIN和XOUT配置为XT1功能前,XT1保持禁用。 (6)如果可用的话,XT2IN和XT2OUT被设置为通用IO且保持禁止状态。1.while(B

9、AKCTL & LOCKIO) 1.while(BAKCTL & LOCKIO) BAKCTL &= (LOCKIO); BAKCTL &= (LOCKIO);解锁解锁XT1XT1引脚引脚2.2. UCSCTL6 &= (XT1OFF); UCSCTL6 &= (XT1OFF); 3. UCSCTL6 |= XCAP_3;3. UCSCTL6 |= XCAP_3;2PF2PF、6PF6PF、9PF9PF、12PF 12PF 4.do4.do UCSCTL7 &= (XT2OFFG + XT1LFOFFG + DCOFFG); UCSCTL

10、7 &= (XT2OFFG + XT1LFOFFG + DCOFFG); SFRIFG1 &= OFIFG; SFRIFG1 &= OFIFG; while (SFRIFG1&OFIFG); /OFIFG while (SFRIFG1&OFIFG); /OFIFG晶振故障中断标志位晶振故障中断标志位捕获捕获/ /比较模块比较模块CCRxCCRx1.捕获模块捕获模块capture。2.比较模块比较模块comparator。3.捕获捕获/比较共用了比较共用了TACCRx寄存器,故不能同时使用。寄存器,故不能同时使用。CAP寄存器位用于选择捕获寄存器位用于选择

11、捕获/比较工作模式比较工作模式:CAP=0 比较比较CAP=1 捕获捕获CCISxCCISx选择源:选择源:P2.4和和P2.5为为Timer1_A的的CCI2A、CCI2BGND和和VCC是为了软件给上升沿和下降沿。是为了软件给上升沿和下降沿。CMxCMx选择捕获的触发沿:选择捕获的触发沿:00不捕获不捕获 01上升沿捕获上升沿捕获 10下降沿捕获下降沿捕获 11边沿均捕获边沿均捕获C CCICI:输入的信号源可随时被读出。输入的信号源可随时被读出。SCSSCS同步异步的选择:同步异步的选择:0为异步捕获为异步捕获1为同步捕获为同步捕获COVCOV:捕获的溢出位。捕获的溢出位。比方说第一次捕

12、获未结束第二比方说第一次捕获未结束第二次捕获又来了,这时次捕获又来了,这时COV=1捕获模块捕获模块当当CCRxCCRx检测到检测到CCIxCCIx的电平边沿时,瞬间读取的电平边沿时,瞬间读取TARTAR寄存器的值并寄存器的值并写入写入TACCRxTACCRx。CCRx可以选择检测上升沿或下降沿,或者都检测。可以选择检测上升沿或下降沿,或者都检测。CCRx用于测定信号脉宽时,只需要分别记录信号上升沿时刻和下降沿时刻,两时刻相减就是脉宽;而测量频率时,连续记用于测定信号脉宽时,只需要分别记录信号上升沿时刻和下降沿时刻,两时刻相减就是脉宽;而测量频率时,连续记录两次上升沿时刻,相减就是周期。录两次

13、上升沿时刻,相减就是周期。定时器定时器A的应用的应用2-捕获捕获 例例3:利用定时器:利用定时器A的捕获功能测量脉冲信号的的捕获功能测量脉冲信号的脉宽。脉宽。#include int PWM_wide=0 , PWM_end , PWM_start;void main(void) WDTCTL = WDTPW + WDTHOLD; / 关狗 P2SEL|=BIT4; /CCI2A TACCTL1=CAP+CM_3+CCIS_0+SCS+CCIE; TACTL = TASSEL_2 + MC_2; / SMCLK, 连续计数 _BIS_SR(LPM0_bits + GIE); / 进入 LPM0

14、 打开全局中断PWM_wide=PWM_end - PWM_start;while(1) #pragma vector=TIMER1_A1_VECTOR_interrupt void Timer_A (void) switch(TAIV)case 2:if(TACCTL1&CCI)PWM_start=CCR1;elsePWM_end=CCR1;break;case 4:break;case 10:break;比较模块比较模块CCR0CCR0在比较模式中,用于设定定时器的周期。在比较模式中,用于设定定时器的周期。当当CCR1/2CCR1/2发现发现TARTAR的值与的值与TACCR0TA

15、CCR0或它们自己的或它们自己的TACCRxTACCRx相等时,相等时,便自动改变输出便自动改变输出IOIO口口TAxTAx的输出电平,从而生成波形。的输出电平,从而生成波形。改变的规则由改变的规则由OUTMODxOUTMODx决定。决定。Timer_ATimer_A比较模块的比较模块的8 8种输出模式种输出模式这这8 8种规则配合主定时器种规则配合主定时器TARTAR的的3 3种模式(连续计数、增计数、种模式(连续计数、增计数、增减计数),可以生成各种波形。主要有以下四种波形:增减计数),可以生成各种波形。主要有以下四种波形:1.1.单稳态波形单稳态波形2.2.普通普通PWMPWM。占空比可

16、调范围。占空比可调范围0 0100%100%3.3.带死区控制的双路对称带死区控制的双路对称PWMPWM。4.34.3路路50%50%占空比方波,相位可调。占空比方波,相位可调。1.单稳态波形单稳态波形模式模式1 1和模式和模式5 5用于生成单稳态脉冲。主定时器(计数器)设用于生成单稳态脉冲。主定时器(计数器)设置为增计数模式,使用置为增计数模式,使用OUTOUT控制位预先置控制位预先置0/0/置置1 1后,就可以得后,就可以得到正到正/ /负单稳态脉冲,脉宽由负单稳态脉冲,脉宽由TACCRxTACCRx决定。决定。2.PWM信号信号模式模式3 3和模式和模式7 7用于产生用于产生PWMPWM

17、信号。主定时器(计数器)设置为信号。主定时器(计数器)设置为增计数模式。增计数模式。PWMPWM的频率由的频率由CCR0CCR0的的TACCR0TACCR0决定,占空比由决定,占空比由TACCRxTACCRx与与TACCR0TACCR0的比值决定。的比值决定。3.带死区时间带死区时间控制的互补控制的互补PWM模式模式2 2和模式和模式6 6用于产生带死区时间控制的互补用于产生带死区时间控制的互补PWMPWM信号。主定时信号。主定时器(计数器)设置为增减计数模式,由器(计数器)设置为增减计数模式,由TACCR0TACCR0决定决定PWMPWM频率。频率。CCR1CCR1和和CCR2CCR2分别设

18、定为模式分别设定为模式6 6和模式和模式2 2,只要,只要TACCR1-TACCR1-TACCR2TTACCR2TDEADDEAD就可安全工作。就可安全工作。TACCR1TACCR1和和TACCR2TACCR2与与TACCR0TACCR0的比值决定占空比。的比值决定占空比。4.移相波形移相波形模式模式4 4用于生成最多用于生成最多3 3多移相波形。主定时器(计数器)设置为多移相波形。主定时器(计数器)设置为增计数模式,由增计数模式,由TACCR0TACCR0决定输出信号的频率。决定输出信号的频率。CCR1/2CCR1/2的的TACCR1/2TACCR1/2值决定了值决定了TA1/2TA1/2超

19、前超前TA0TA0的相位。的相位。定时器定时器 A典型应用典型应用PWM 例程例程 例:设ACLK = TACLK = LFXT1 = 32768, MCLK = SMCLK = DCOCLK = 32ACLK = 1.048576Mhz,利用Timer_A输出周期为512 /32768 = 15.625ms、占空比分别为75%和25%的PWM矩形波:#include void main(void) WDTCTL = WDTPW +WDTHOLD; TACTL = TASSEL0 + TACLR; / ACLK, 清除清除 TAR CCR0 = 512-1; / PWM周期周期 CCTL1 =

20、 OUTMOD_7; CCR1 = 384; /占空比占空比 384/512=0.75 CCTL2 = OUTMOD_7; CCR2 = 128; /占空比占空比128/512=0.25 P1DIR |= BIT2; / P1.2 输出输出 P1SEL |= BIT2; / P1.2 TA1 P1DIR |= BIT3; / P1.3 输出输出 P1SEL |= BIT3; / P1.3 TA2 TACTL |= MC0; / Timer_A 增计数模式增计数模式 for (;) _BIS_SR(LPM3_bits); / 进入进入 LPM3 _NOP(); 由程序知:由程序知:P1.2 CC

21、R1 - 75% PWM,P1.3 CCR2 - 25% PWM。周期周期15.625ms。WDT定时器定时器定时喂狗,狗饿复位定时喂狗,狗饿复位WDT模块功能模块功能 看门狗功能看门狗功能 选择合适的时钟和定时值,定时一到就复位选择合适的时钟和定时值,定时一到就复位单片机。单片机。 定时器功能。 控制RST/NMI引脚。MSP430G2553引脚图引脚图单片机复位详解单片机复位详解 复位分为上电复位POR、上电清除PUC和掉电复位BOR。 WDT的复位属于PUC。1.什么情况下单片机会复位?什么情况下单片机会复位?1)芯片上电)芯片上电2)在)在RST/NMI引脚上出现低电平信号引脚上出现低

22、电平信号3)处于看门狗模式下,看门狗定时时间到)处于看门狗模式下,看门狗定时时间到4)看门狗定时器写入错误的安全键值)看门狗定时器写入错误的安全键值5)Flash存储器写入错误的安全键值存储器写入错误的安全键值2.单片机复位后的初始状态是什么?单片机复位后的初始状态是什么?1)I/O引脚切换成输入模式引脚切换成输入模式2)I/O标志位清除标志位清除3)其他外围模块及寄存器实现初始化)其他外围模块及寄存器实现初始化4)状态寄存器复位)状态寄存器复位5)CPU从内存的从内存的0FFFE地址开始执行代码地址开始执行代码 典型的复位电路有一下典型的复位电路有一下3种:种: (1)在)在 /NMI管脚上

23、接管脚上接100K欧的上拉电阻。欧的上拉电阻。 (2)在()在(1)的基础上再接)的基础上再接0.1uf的电容的电容,电容的一端接地电容的一端接地,可以使复位更加可可以使复位更加可靠。靠。 (3)在()在(2)的基础上)的基础上,再在电阻上并接一个型号为再在电阻上并接一个型号为IN4008的二极管的二极管,可以可可以可靠的实现系统断电后立即上电。靠的实现系统断电后立即上电。典型复位电路RST看门狗的作用:看门狗的作用:看门狗定时器是一个计数器看门狗定时器是一个计数器,基本功能是在发基本功能是在发生软件问题和程序跑飞后使系统重新启动。生软件问题和程序跑飞后使系统重新启动。看门狗如何解决程序跑飞的

24、问题?看门狗如何解决程序跑飞的问题?看门狗就是一定时器,定时器一启动就一直运行,看门狗就是一定时器,定时器一启动就一直运行,除非硬件复位或软件关闭,定时到一定时间自动除非硬件复位或软件关闭,定时到一定时间自动的溢出使系统复位,系统重新运行,在编程时一的溢出使系统复位,系统重新运行,在编程时一定要小于一定的时间重置定时器的初值(喂狗),定要小于一定的时间重置定时器的初值(喂狗),喂狗也不能太频繁,这样降低了喂狗也不能太频繁,这样降低了CPUCPU的工作效率,的工作效率,一般时间留一般时间留20-30%20-30%的余量。的余量。看门狗的作用看门狗的作用 WDTCTL控制寄存器 WDTPWWDTP

25、W:安全键值,写:安全键值,写:05Ah 05Ah 读:读:069h069hWDTHOLDWDTHOLD:为:为1 1时关狗时关狗WDTNMIES: 0WDTNMIES: 0是上升沿触发是上升沿触发NMI 1NMI 1是下降沿触发是下降沿触发WDTNMIWDTNMI:0 0是引脚复位是引脚复位 1 1是引脚为是引脚为NMINMIWDTTMSEL:0WDTTMSEL:0是看门狗模式是看门狗模式 1 1是定时器模式是定时器模式WDTCNTCLWDTCNTCL:1 1时看门狗定时器清零时看门狗定时器清零WDTSSELWDTSSEL:0 0是是SMCLK 1SMCLK 1是是ACLKACLKWDTIS

26、xWDTISx:0000是是1/32768 011/32768 01:1/8192 101/8192 10:1/512 111/512 11:1/641/64WDTCTL=WDT_MRST_32; /定时定时32ms(默认)(默认)WDTCTL=WDT_MRST_8; /定时定时8msWDTCTL=WDT_MRST_0_5; /定时定时0.5msWDTCTL=WDT_MRST_0_064; /定时定时0.064ms看门狗模式看门狗模式选用选用SMCLKSMCLK为时钟源,为时钟源,1MHz1MHz看门狗宏定义WDTCTL=WDT_ARST_1000; /定时定时1000msWDTCTL=WDT

27、_ARST_250; /定时定时250msWDTCTL=WDT_ARST_16; /定时定时16msWDTCTL=WDT_ARST_1_9; /定时定时1.9ms看门狗模式看门狗模式选用选用ACLKACLK为时钟源为时钟源,32KHz,32KHz看门狗模式举例看门狗模式举例看门狗定时器工作模式为看门狗,看门狗定时器工作模式为看门狗,P10口接口接LED,正常工作时为常亮,由于看门狗的复位作用,单片正常工作时为常亮,由于看门狗的复位作用,单片机机1000ms便会复位一次,实际效果是便会复位一次,实际效果是LED在闪烁。在闪烁。#include void main(void) unsigned i

28、nt i=0; WDTCTL = WDTPW + WDTHOLD; /关狗关狗 P1DIR |= BIT0; P1OUT&= BIT0; for(i=0;i16000;i+) P1OUT|=BIT0; WDTCTL=WDT_ARST_1000; /启动看门狗启动看门狗 while(1); 看门狗定时器工作模式为看门狗,看门狗定时器工作模式为看门狗,P10口接口接LED,正常工作时为常亮,由于看门狗的复位作用,正常工作时为常亮,由于看门狗的复位作用,LED会闪烁。会闪烁。引入喂狗后,看门狗不会再复位,引入喂狗后,看门狗不会再复位,LED也不再闪烁。也不再闪烁。#include void

29、main(void) unsigned int i=0; WDTCTL = WDTPW + WDTHOLD; /关狗关狗 P1DIR |= BIT0; P1OUT&= BIT0; for(i=0;i60000;i+) P1OUT|=BIT0; WDTCTL=WDT_ARST_1000; /启动看门狗启动看门狗 while(1); for(i=0;i0;i-);void P13_Onclick()/P1.3的事件处理函数的事件处理函数/-Bright在函数执行完后不能被清空,所以得设为静态局部变量在函数执行完后不能被清空,所以得设为静态局部变量-static unsigned int B

30、right=0;/-循环改变循环改变PWM占空比占空比-Bright=Bright+40;if(Bright=400)/占空比最大占空比最大40%,更亮的区间视觉变化不明显,更亮的区间视觉变化不明显Bright=0;TA0_PWM_SetPermill(1,Bright); /调用库函数,更新调用库函数,更新PWM占空比占空比_nop();TA_PWM.h#ifndef TA_PWM_H_#define TA_PWM_H_extern char TA0_PWM_Init(); /初始化初始化extern char TA0_PWM_SetPeriod(); /周期设定函数周期设定函数extern

31、 char TA0_PWM_SetPermill(); /占空比设定占空比设定extern char TA1_PWM_Init();extern char TA1_PWM_SetPeriod();extern char TA1_PWM_SetPermill();#endifextern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。遇到此变量和函数时在其他模块中寻找其定义。ifndef/define/endif”主要目的是防止头文件的重复包含和编译主要目的是防止

32、头文件的重复包含和编译TA_PWM.c#include msp430g2553.h#define DEADTIME 20/预设死区时间,以预设死区时间,以TA的的clk为单位为单位/*设定设定TA输出输出IO口,目前设定为口,目前设定为MSP430G2553*/#define TA01_SET P1SEL |= BIT6; P1DIR |= BIT6/P1.6#define TA11_SET P2SEL |= BIT2; P2DIR |= BIT2/P2.2#define TA12_SET P2SEL |= BIT4; P2DIR |= BIT4/P2.4#define TA01_OFF P1

33、SEL&= BIT6 /P1.6#define TA11_OFF P2SEL &= BIT2 /P2.2#define TA12_OFF P2SEL &= BIT4/P2.4char TA0_PWM_Init(char Clk,char Div,char Mode1,char Mode2) TA0CTL =0;/ 清除以前设置清除以前设置 switch(Mode1)/为定时器选择计数模式为定时器选择计数模式 case F: case f:/普通普通PWM TA0CTL |=MC_1; break; /主定时器为增计数主定时器为增计数 case B:case b: TA0

34、CTL |=MC_1; break; /主定时器为增计数主定时器为增计数 case D: case d:/死区死区PWM TA0CTL |=MC_3; break;/主定时器为增减计数主定时器为增减计数 default : return(0);/其他情况都是设置参数有误,返回其他情况都是设置参数有误,返回0 switch(Clk) /为定时器为定时器TA选择时钟源选择时钟源 case A: case a: TA0CTL|=TASSEL_1; break; /ACLK case S: case s: TA0CTL|=TASSEL_2; break; /SMCLK case E: TA0CTL|=

35、TASSEL_0; break; /外部输入外部输入(TACLK) case e: TA0CTL|=TASSEL_3; break; /外部输入外部输入(TACLK取反取反) default : return(0); /设置参数有误,返回设置参数有误,返回0 switch(Div) /为定时器为定时器TA选择分频系数选择分频系数 case 1: TA0CTL|=ID_0; break; /1 case 2: TA0CTL|=ID_1; break; /2 case 4: TA0CTL|=ID_2; break; /4 case 8: TA0CTL|=ID_3; break; /8 defaul

36、t : return(0); /设置参数有误,返回设置参数有误,返回0 switch(Mode1)/设置设置PWM通道通道1的输出模式。的输出模式。 case F:case f: TA0CCTL1 = OUTMOD_7; TA01_SET; break; case B:case b: TA0CCTL1 = OUTMOD_3; TA01_SET; break; case D: cased: TA0CCTL1 = OUTMOD_6; TA01_SET; break; case 0:case 0: /如果设置为禁用如果设置为禁用 TA01_OFF; /TA0.1恢复为普通恢复为普通IO口口 brea

37、k; default : return(0); /设置参数有误,返回设置参数有误,返回0 switch(Mode2) /设置设置PWM通道通道2的输出模式。的输出模式。 case F: case f: TA0CCTL2 = OUTMOD_7; TA02_SET; break; case B:case b: TA0CCTL2 = OUTMOD_3; TA02_SET; break; case D: case d: TA0CCTL2 = OUTMOD_2; TA02_SET; break; case 0:case 0: /如果设置为禁用如果设置为禁用 TA02_OFF; /TA0.1恢复为普通恢复

38、为普通IO口口 break; default : return(0); /设置参数有误,返回设置参数有误,返回0 return(1);char TA0_PWM_SetPeriod(unsigned int Period)if (Period65535)return(0); TA0CCR0 = Period;return(1);char TA0_PWM_SetPermill(char Channel,unsigned int Duty)unsigned char Mod = 0;unsigned int DeadPermill=0;unsigned long int Percent=0;/防止乘

39、法运算时溢出防止乘法运算时溢出Percent=Duty;DeadPermill=(DEADTIME*1000)/TACCR0); /将绝对死区时间换算成千分比死区时间将绝对死区时间换算成千分比死区时间switch (Channel)/先判断出通道的工作模式先判断出通道的工作模式case 1:Mod = (TA0CCTL1& 0 x00e0)5;break;/读取输出模式,读取输出模式,OUTMOD0位于位于5-7位位case 2:Mod = (TA0CCTL2 & 0 x00e0)5;break;/读取输出模式,读取输出模式,OUTMOD1位于位于5-7位位default:re

40、turn(0);switch(Mod)/根据模式设定根据模式设定TACCRxcase 2: case 6:/*死区模式死区模式2,6时,需要判断修正死区时间,且同时设定时,需要判断修正死区时间,且同时设定TA0CCR1/2 的值的值*/if(1000-2*Percent)1000)Percent=1000;if(Channel=1) TA0CCR1=Percent* TA0CCR0/1000;if(Channel=2) TA0CCR2=Percent* TA0CCR0/1000;break;case 3: /占空比一律为正脉宽,所以需要占空比一律为正脉宽,所以需要 TA0CCR0减去占空比减去

41、占空比if(Percent1000)Percent=1000;if(Channel=1) TA0CCR1= TA0CCR0-Percent*TA0CCR0/1000;if(Channel=2) TA0CCR2= TA0CCR0-Percent*TA0CCR0/1000;break;default: return(0);return (1);char TA1_PWM_Init(char Clk,char Div,char Mode1,char Mode2) TA1CTL =0;/ 清除以前设置清除以前设置 switch(Mode1)/为定时器选择计数模式为定时器选择计数模式 case F: ca

42、se f:/普通普通PWM TA1CTL |=MC_1; break;/主定时器为增计数主定时器为增计数 case B:case b: TA1CTL |=MC_1; break;/主定时器为增计数主定时器为增计数 case D: case d:/死区死区PWM TA1CTL |=MC_3; break;/主定时器为增减计数主定时器为增减计数 default : return(0);/其他情况都是设置参数有误,返回其他情况都是设置参数有误,返回0 switch(Clk) /为定时器为定时器TA选择时钟源选择时钟源 case A: case a: TA1CTL|=TASSEL_1; break;

43、/ACLK case S: case s: TA1CTL|=TASSEL_2; break; /SMCLK case E: TA1CTL|=TASSEL_0; break; /外部输入外部输入(TACLK) case e: TA1CTL|=TASSEL_3; break; /外部输入外部输入(TACLK取反取反) default : return(0); /设置参数有误,返回设置参数有误,返回0 switch(Div) /为定时器为定时器TA选择分频系数选择分频系数 case 1: TA1CTL|=ID_0; break; /1 case 2: TA1CTL|=ID_1; break; /2 case 4: TA1CTL|=ID_2; break; /4 case 8: TA1CTL|=ID_3; break; /8 default : return(0); /设置参数有误,返回设置参数有误,返回0 switch(Mode1)/设置设置PWM通道通道1的输出模式。的输出模式。 case F:case f: TA1CCTL1 =OUTMO

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论