490 likes | 767 Views
msp430f449+msp430 launchpad. 1 、开发环境: IAR Embedded Workbench 2 、 IAR 的安装及相应设置 3 、 IAR 的使用. msp430f449 简介. 1 、低工作电压: 1.8~3.6V 2 、超低功耗: 活动模式: 280UA ( 1MHZ , 2.2V ) 待机模式 : 1.1UA 掉电模式 : ( RAM 数据保持) 0.1UA 3 、有 5 种节电模式 4 、从待机到唤醒的响应时间不超过 6us 5 、 12 位 A/D 转换器 ( 8 通道、带有内部参考源、采样保持)
E N D
msp430f449+msp430 launchpad 1、开发环境:IAR Embedded Workbench 2、IAR的安装及相应设置 3、IAR的使用
msp430f449简介 1、低工作电压:1.8~3.6V 2、超低功耗: 活动模式:280UA(1MHZ,2.2V) 待机模式 : 1.1UA 掉电模式: (RAM数据保持)0.1UA 3、有5种节电模式 4、从待机到唤醒的响应时间不超过6us 5、12位A/D转换器 (8通道、带有内部参考源、采样保持) 6、16位精简指令结构(RISC),150ns指令周期 7、带有3个捕获/比较器结构的16位定时器 8、串行通信可软件选择UART/SPI两种模式 9、可在线串行编程,不需要外部编程电压 10、驱动液晶能力为160段 11、FLASH存储器为60KB,RAM为2KB
msp430f449 1、IO口 2、时钟 3、中断 4、定时 5、AD 6、UART 7、PWM波 8、头文件
1、IO口 一、P口端口寄存器: 1、PxDIR 输入/输出方向寄存器 (0:输入模式 1:输出模式) 2、PxIN 输入寄存器 输入寄存器是只读寄存器,用户不能对其写入,只能通过读取该寄存器的内容知道I/O口的输入信号。 3、PxOUT 输出寄存器 寄存器内的内容不会受引脚方向改变的影响。 4、PxIFG 中断标志寄存器 (0:没有中断请求 1:有中断请求) 该寄存器有8个标志位,对应相应的引脚是否有待处理的中断请求; 这8个中断标志共用一个中断向量,中断标志不会自动复位,必须软件复位; 外部中断事件的时间必须>=1.5倍的MCLK的时间,以保证中断请求被接受; 5、PxIES 中断触发沿选择寄存器 (0:上升沿中断 1:下降沿中断) 6、PxSEL 功能选择寄存器 (0:选择引脚为I/O端口 1:选择引脚为外围模块功能) 7、PxREN 上拉/下拉电阻使能寄存器 (0:禁止 1:使能)
二、常用特殊P口: 1、P1和P2口可作为外部中断口。 2、P6可作为A/D输入口。 3、P1.2和P2.0可作为PWM波输出口。 4、P1.1:MCLK P1.5:ACLK 5、串口通信时:P2.4、 P4.0为发送TXD, P2.5 、P4.1为接收RXD。
三、基本操作: 1、所有P口都可作为通用IO口使用 2、所有P口都可进行字节操作和位操作 按字节操作: 例: P1DIR=0xff; //将P1口作为输出口 PIOUT=0x20; // P1口输出0x20 P1DIR=0x00; //将P1口作为输入口 data=P1IN //读取P1口外部输入值 按位操作: 例: P1DIR=BIT0; //将P1.0作为输出口 P1OUT|=BIT0; //P1.0输出1 P1OUT&=~BIT0; //P1.0输出0 P1DIR&=~BIT0 //将P1.0口作为输入 data=P1IN&BIT0 //读取P1.0口外部输入值
2、时钟 一、三个时钟源: 1、LFXT1CLK:低频时钟(32768HZ) 2、XT2CLK:高频时钟(8MHZ) 3、DCOCLK:片内数控振荡器最高46MHZ 但不稳定(不能作为定时用) 二、时钟模块结构图:
三、时钟模块可提供的四种时钟信号: 1、ACLK:辅助时钟,来自LFXT1CLK低频时 钟,可有软件选作各外围模块的时 钟信号,一般用于低速外设。 2、ACLK/n:ACLK经过1、2、4、8分频后由 P1.5输出,仅供外部电路使用。 3、MCLK:系统主时钟,可有软件选择来自 LFXT1CLK、XT2CLK或DCOCLK的 时钟,然后经1、2、4、8分频得 到。可由P1.1输出(主要用于cpu) 4、SMCLK:子系统时钟,可有软件选择来自 XT2CLK或DCOCLK的时钟。(主要用于高速外设)
四、MCLK应用举例: 1、在默认情况下,MCLK来自于DCOCLK其频率为1.048576MHZ 其计算方法:MCLK=(31+1)*32768 2、如何选择ACLK作为MCLK: void clk_initial() { do { IFG1&=~OFIFG; //清除振荡器的失效标志 __delay_cycles(200); } while((IFG1&OFIFG)!=0); //如果振荡器的失效标志存在 FLL_CTL1=SELM1+SELM0; //选择ACLK作为MCLK }
3、如何选择 XT2CLK作为MCLK: void clk_initial() { do { IFG1&=~OFIFG; //清除振荡器的失效标志 __delay_cycles(200); } while((IFG1&OFIFG)!=0); //如果振荡器的失效标志存在 FLL_CTL1=SELM1; //选择XT2CLK作为MCLK } 4、如何选择 DCOCLK作为MCLK:计算(121+1) *2*32768=7.995MHZ void CLK_initial() { SCFI0|=FN_4; //选择DCO频率调整范围为2.8~26.6MHZ SCFQCTL=249; //倍频倍数,最高位为DCO+调制器的控制位 FLL_CTL0=DCOPLUS+OSCCAP_1; //选择DCO作为MCLK前分频 }
3、中断 一、中断源: 1、外部中断:P1、P2 2、定时器中断。 3、看门狗定时器中断。 4、串口中断。 5、A/D 转换中断。 6、比较器中断。 二、中断的 一般设置: 1、打开、关闭局部中断: 打开局部中断一般是给想关的特殊功能寄存器相关位置1 以P1口外部中断为例: 打开局部中断: P1IE|=BIT0;//打开P1.0外部中断
关闭局部中断一般是给想关的特殊功能寄存器相关位置0关闭局部中断一般是给想关的特殊功能寄存器相关位置0 同样以P1口外部中断为例: 关闭局部中断: P1IE&=~BIT0;//关闭P1.0外部中断 2、打开、关闭全局中断: _EINT();//打开总中断,相当于51的EA=1; _DINT();//关闭总中断,相当于51的EA=0; 3、各中断向量Interrupt Vectors: #define BASICTIMER_VECTOR (0 * 2u) /* 0xFFE0 Basic Timer */ #define PORT2_VECTOR (1 * 2u) /* 0xFFE2 Port 2 */ #define USART1TX_VECTOR (2 * 2u) /* 0xFFE4 USART 1 Transmit */ #define USART1RX_VECTOR (3 * 2u) /* 0xFFE6 USART 1 Receive */ #define PORT1_VECTOR (4 * 2u) /* 0xFFE8 Port 1 */ #define TIMERA1_VECTOR (5 * 2u) /* 0xFFEA Timer A CC1-2, TA */ #define TIMERA0_VECTOR (6 * 2u) /* 0xFFEC Timer A CC0 */ #define ADC12_VECTOR (7 * 2u) /* 0xFFEE ADC */ #define USART0TX_VECTOR (8 * 2u) /* 0xFFF0 USART 0 Transmit */ #define USART0RX_VECTOR (9 * 2u) /* 0xFFF2 USART 0 Receive */ #define WDT_VECTOR (10 * 2u) /* 0xFFF4 Watchdog Timer */ #define COMPARATORA_VECTOR (11 * 2u) /* 0xFFF6 Comparator A */ #define TIMERB1_VECTOR (12 * 2u) /* 0xFFF8 Timer B CC1-6, TB */ #define TIMERB0_VECTOR (13 * 2u) /* 0xFFFA Timer B CC0 */ #define NMI_VECTOR (14 * 2u) /* 0xFFFC Non-maskable */ #define RESET_VECTOR (15 * 2u) /* 0xFFFE Reset [Highest Priority] */
4、中断优先级: 优先级顺序从高到低为: PORT2_VECTOR (1 * 2u) /* 0xFFE2 Port 2 */ PORT1_VECTOR (4 * 2u) /* 0xFFE8 Port 1 */ TIMERA1_VECTOR (5 * 2u) /* 0xFFEA Timer A CC1-2, TA */ TIMERA0_VECTOR (6 * 2u) /* 0xFFEC Timer A CC0 */ ADC_VECTOR (7 * 2u) /* 0xFFEE ADC */ USART0TX_VECTOR (8 * 2u) /* 0xFFF0 USART 0 Transmit */ USART0RX_VECTOR (9 * 2u) /* 0xFFF2 USART 0 Receive */ WDT_VECTOR (10 * 2u) /* 0xFFF4 Watchdog Timer */ COMPARATORA_VECTOR (11 * 2u) /* 0xFFF6 Comparator A */ TIMERB1_VECTOR (12 * 2u) /* 0xFFF8 Timer B CC1-2, TB */ TIMERB0_VECTOR (13 * 2u) /* 0xFFFA Timer B CC0 */ NMI_VECTOR (14 * 2u) /* 0xFFFC Non-maska××e */ RESET_VECTOR (15 * 2u) /* 0xFFFE Reset [Highest Priority] */
5、中断的嵌套: 当同时有多个中断来的时候才有优先级的考虑(优先级顺序可查看向量表) 实现中断嵌套需要注意以下几点: 1)430默认的是关闭中断嵌套的,一定要中断嵌套的话,就必须在中断服务程序中打开总中断 msp430的指令中,_DINT()和_EINT()分别指关和开总中断。 2)当进入中断服务程序时,只要不在中断服务程序中再次开中断,则总中断是关闭的,此时来中断不管是比当前中断的优先级高还是低都不执行; 3)若在中断服务程序A中开了总中断,则可以响应后来的中断B(不管B的优先级比A高还是低),B执行完再继续执行A。注意:进入中断服务程序B后总中断同样也会关闭,如 果B中断程序执行时需响应中断C,则此时也要开总中断,若不需响应中断,则不用开中断,B执行完后跳出中断程序进入A程序时,总中断会自动打开; 4)若在中断服务程序中开了总中断,后来的中断同时有多个,则会按优先级来执行,即中断优先级只有在多个中断同时到来时才起做用!中断服务不执行抢先原则。 5)对于单源中断,只要响应中断,系统硬件自动清中断标志位,对于TA/TB定时器的比较/捕获中断,只要访问TAIV/TBIV,标志位倍被自动清除; 对于多源中断要手动清标志位,比如P1/P2口中断,要手工清除相应的标志,如果在这种中断用"EINT();"开中断,而在打开中断前没有清标志,就会 有相同的中断不断嵌入,而导致堆栈溢出引起复位,所以在这类中断中必须先清标志再打开中断开关.
6、中断应用程序举例(外部中断): void interrupt_initial() { P1DIR&=~BIT7; //P1.7为输入 P1IE|=0x80; //P1.7中断允许 P1IES|=0x00; //P1.7上升沿触发 P1IFG=0; //P1.7中断标志清除,对于多源中断必须先清中断标志再打开中断 _EINT(); //总中断允许 } #pragma vector=PORT1_VECTOR __interrupt void Port_1(void) { P1IFG&=~BIT7; //P1.7中断标志清除 /*在此写中断服务子程序*/ }
4、定时 一、常见的定时方式: 1、软件定时:通过延时程序实现。缺点:在延时期间,CPU一直被占用,浪费 了CPU的利用率,而且延时时间不好计算。 2、硬件延时:通过专门的定时器件实现。优点:在简单的软件控制下,产生准 确的延时。 二、硬件定时器种类: 1、看门狗定时器。 2、定时器A。 3、定时器B。 4、实时时钟RTC。
三、Timer_A的基本特点: 1、输入时钟可以有多种选择。 2、产生的定时脉冲或PWM信号没有软件带来的误差。 3、四种计数功能。 4、8种输出方式。 5、16位定时器。 6、生成的PWM波能用软件任意改变占空比和周期,当PWM波不需要修改占空比和周期时,Timer_A能自动输出PWM,而不需要利用中断来维持PWM波的输出 四、定时器的工作模式: 1、停止模式:用于定时器的暂停,并不发生复位,所有寄存器现行类容在停止模式结束后都可用。当定时器暂停后重新计数时,计数器将从暂停前的计数方向计数。 2、增计数模式:捕获/比较寄存器CCR0用作Timer_A增计数模式的周期寄存器,因为CCR0为16位寄存器,所以该模式适用于定时周期小于65536的连续计数情况。计数器TAR可以增计数到CCR0的值,当计数值与CCR0的值相等时,定时器复位,并从0开始重新计数。
增计数模式: 例程: void zengjishu() { TACTL=TASSEL1+TACLR; //选择计数时钟为ACLK,将计数器TAR清零 CCTL0=CCIE; //使能中断 CCR0=200; //计数终值,方波频率为:32768/200/2 TACTL|=MC_1; //选择Timer_A为增计数模式 P1DIR|=BIT0; //P1.0作为输出 _EINT(); //使能总中断 } #pragma vertor =TIMERA0_VECTOR __interrupt void Timer_A(void) { P1OUT^=0X01; //P1.0取反 }
3、连续计数模式: 特点:定时器从0开始记到0XFFFF后又开始从0开始计数,当记到CCR0时产生中断(可产生多个定时信号)
例程: void lianxujishu() { TACTL=TASSEL_1+TACLR; //选择计数时钟为ACLK,将计数器TAR清零 CCTL0=CCIE; //使能中断 CCR0=1000; //计数终值,方波频率为:32768/1000/2 TACTL|=MC_2; //选择Timer_A为连续计数模式 P1DIR|=BIT0; //P1.0作为输出 _EINT(); //使能总中断 } #pragma vertor =TIMERA0_VECTOR __interrupt void Timer_A(void) { P1OUT^=0X01; //P1.0取反 CCR0+=1000; }
4、增/减计数模式:需要对称波形的情况可以用增/减计数模式,该模式下,定时器先计数到CCR0的值,然后反向减计数到0。4、增/减计数模式:需要对称波形的情况可以用增/减计数模式,该模式下,定时器先计数到CCR0的值,然后反向减计数到0。 注:定时器TAR的值从CCR0—1增计数到CCR0时,中断标志CCIFG0置位,从1减计数到0时,中断标志TAIFG置位
5、捕获/比较模块: 一、工作模式: 1、捕获模式:当捕获/比较控制寄存器CCTLx中的CAP=1时,该模块工作于捕 获模式。这时如果在选定的引脚上发生设定的脉冲沿,则TAR中的值将自动写入到捕获/比较寄存器CCRx中。 用途:1、测量软件程序执行所用时间。 2、测量硬件之间的时间。 3、测量频率。 2、比较模式:当捕获/比较控制寄存器CCTLx中的CAP=0时,该模块工作于比较模式。Timer_A 有三个捕获/比较器,在比较模式下有8个输出模式
5、A/D 一、msp430f449内自带A/D的主要特点: 1、 12位转换精度。 2、有多种时钟源可供选择,内带时钟发生器。 3、配有8个外部通道和4个内部通道。 4、内置参考电源,并且参考电压Vref有6种组合。 5、采样速度快,最快200Ks/s。 6、四种工作模式: 1、单通道单次转换模式: CONSEQ_0。 2、单通道多次转换模式: CONSEQ_2。 3、序列通道单次转换模式:CONSEQ_1 。 4、序列通道多次转换模式:CONSEQ_3。 二、ADC12内部结构图:
三、A/D转换的一般步骤: 1、选择转换通道: P6SEL|=0x01; //使能A/D通道A0(P6.0); P6SEL|=BIT7; //使能A/D通道A7(P6.7); 2、打开ADC12内核,设置采样周期,参考电压: ADC12CTL0=ADC12ON; //打开ADC12内核; ADC12CTL0=SHT0_0; //设置采样周期为4/200KHZ*1 ADC12CTL0=REFON; //选择内部参考电压为2.5V; ADC12CTL0=MSC; //多次采样/转换位 3、设置工作模式,转换触发方式: ADC12CTL1=SHP; //采样信号SAMPCON来自采样定时器 ADC12CTL1=ADC12SSEL_0; //采样时钟来自ADC12OSC为200KHZ ADC12CTL1=CONSEQ_2;//单通道多次转换模式 4、使能转换(即允许转换): ADC12CTL0|=ENC; //使能转换;
注意:当MSC=1且SHP=1时,仅首次转换由SHI信号的上升沿触发采样定 时器,之后采样转换将在前一次转换完成之后立即进行。 5、开始转换: ADC12CTL0|=ADC12SC; //开始转换; 四、几种工作模式例程: 1、单通道单次转换: void ADC_convert() { P6SEL|=0x01; //使能A/D通道A0(P6.0); ADC12CTL0=ADC12ON+ SHT0_0; //开ADC12内核,设置采样周期为4*200KHZ*1 ADC12CTL1=SHP; //采样信号SAMPCON来自采样定时器 ADC12CTL0|=ENC; //使能转换; ADC12CTL0|=ADC12SC; //开始转换; } int Read_result() { int result; result= ADC12MEM0; return (result); }
2、单通道多次转换: Void ADC_convert() { P6SEL|=0x02; //使能A/D通道A1; ADC12CTL0=ADC12ON+SHT0_8+MSC; //打开ADC12内核,设置为首次触发即可,确定采样周期为4*mclk*64,选择内部参考电压为2.5v; ADC12CTL1=SHP+ADC12SSEL_2+CONSEQ_2; //设置为单通道多次转换模式并且由采样输入信号的上升沿触发采样定时器 ; ADC12CTL0|=ENC; //使能转换; ADC12CTL0|=ADC12SC; //开始转换; } int Read_result() { int result; result= ADC12MEM1; return (result); }
3、序列通道单次转换: void ADC_convert() { P6SEL|=0x0f; ADC12MCTL0=SREF_0+INCH_0; ADC12MCTL1=SREF_0+INCH_1; ADC12MCTL2=SREF_0+INCH_2; ADC12MCTL3=SREF_0+INCH_3+EOS; //EOS为序列结束信号 ADC12CTL0=ADC12ON+MSC+ SHT0_0; //开ADC12内核,设置采样周期为4*200KHZ*1 ADC12CTL1=SHP+CONSEQ_1; //采样信号SAMPCON来自采样定时器 ADC12CTL0|=ENC; //使能转换; ADC12CTL0|=ADC12SC; //开始转换; _EINT(); //开中断 } #pragma vector=ADC_VECTOR __interrupt void ADC12ISR(void) { result0 = ADC12MEM0; result1 = ADC12MEM1; result2 = ADC12MEM2; result3 = ADC12MEM3; }
4、序列通道多次转换: void ADC_convert() { P6SEL|=0x0f; ADC12MCTL0=SREF_0+INCH_0; ADC12MCTL1=SREF_0+INCH_1; ADC12MCTL2=SREF_0+INCH_2; ADC12MCTL3=SREF_0+INCH_3+EOS; //EOS为序列结束信号 ADC12CTL0=ADC12ON+MSC+ SHT0_0; //开ADC12内核,设置采样周期为4*200KHZ*1 ADC12CTL1=SHP+CONSEQ_3; //采样信号SAMPCON来自采样定时器 ADC12CTL0|=ENC; //使能转换; ADC12CTL0|=ADC12SC; //开始转换; _EINT(); //开中断 } #pragma vector=ADC_VECTOR __interrupt void ADC12ISR(void) { result0 = ADC12MEM0; result1 = ADC12MEM1; result2 = ADC12MEM2; result3 = ADC12MEM3; }
6、USART 一、串口是系统与外界联系的重要手段,我们有时需要使用上位机实现系统调试 及现场数据的采集和控制,msp430f449中有两个串口模块USART0、USART1 分别对应P2.4、P2.5和P4.0、P4.1都可实现 UART异步通信和SPI同步通信。 二、串行异步通信的主要特点: 1、两个独立的移位寄存器:输入、输出寄存器。 2、传输7位或8位数据,可采用奇校验或偶校验或无校验。 3、数据在发送或接收时低位在先。 4、独立的发送、接收中断。 5、可编程实现分频因子为整数或小数的波特率。 三、USART模块结构图:
四、串口通信的一般步骤(无校验): 1、选择串口模块(USART0、USART1)。 USART1: P4SEL=0X03; P4DIR=0X01; //P4.0为发送TXD,P4.1为接收RXD 2、在SWRST=1时,设置串口。 U1CTL=SWRST; // 复位USART,并设置串口 3、选择波特率发生器时钟。 UTCTL1=SSEL1; //UCLK=MCLK 4、使能发送、接收。 ME2=UTXE1+URXE1; //使能RXD TXD 5、设置字符长度。 U1CTL=CHAR; //设置字符长度为8位,默认时为7位 6、设置波特率。 注:UBR=U1BR0+U1BR1; 其值应大于3 U1BR0=0X1B; //存放波特率分频因子的整数部分的低字节 U1BR1=0X00; //存放波特率分频因子的整数部分的高字节 U1MCTL=0X03; //设置波特率为38400 7、SWRST=0,串口设置完毕。 U1CTL&=~SWRST; //在SWRST为1之前设置串口 8、使能中断。 IE2=URXIE1; //使能接收 中断
7、PWM波 一、Timer_A在增计数模式下的PWM输出: void PWM_Creat(int a,int b) { TACTL=TASSEL_1+TACLR+ID_3; //选择计数时钟为ACLK,并进行8分频,将计数器TAR清零 CCR0=255; //计数终值,方波频率为:32768/256/8/2=8HZ CCTL1=OUTMOD_7; CCR1=a; //占空比为:a/256 CCTL2=OUTMOD_7; CCR2=b; //占空比为:b/256 P1DIR|=BIT2; //CCR1 P1SEL|=BIT2; P2DIR|=BIT0; //CCR2 P2SEL|=BIT0; TACTL|=MC_1; //选择Timer_A为增计数模式 }
8、头文件 一、两种头文件使用方式: 1、#ifndef _ADC_H #define _ADC_H extern void ADC_convert(); extern int Read_result(); #endif 2、在工程里直接调用.C文件
msp430launchpad Msp430g2553简介: 1、低工作电压:1.8~3.6V 2、超低功耗: 活动模式:280UA(1MHZ,2.2V) 待机模式 : 0.5UA 掉电模式: (RAM数据保持)0.1UA 3、有5种节电模式 4、从待机到唤醒的响应时间不超过1us 5、10位A/D转换器 (带有内部参考源、采样保持,最大采样率200Ks/s) 6、16位精简指令结构(RISC),6.25ns指令周期 7、带有3个捕获/比较器结构的16位定时器 8、串行通信可软件选择UART/SPI/I2C三种模式 9、可在线串行编程,不需要外部编程电压 11、FLASH存储器为16KB,RAM为512B
Msp430g2553 1、IO口 2、时钟 3、中断 4、定时 5、AD 6、PWM波
1、IO 一、P口的基本特点: 1、有P1、P2两个可独立编程的IO口。 2、每个P口都有输入、输出、中断功能。 3、对P口控制寄存器的读写支持所有指令集。 4、每一个P口都有独立可编程的上拉、下拉电阻。 二、P口的 基本操作: 大致同msp430f449相同,注意:在将P2.6、P2.7作为普通IO口时,需要进行以下设置: P2SEL&=~(BIT6+BIT7);
2、时钟 一、时钟源: 1、ACLK:系统辅助时钟,来自 LFXT1CLK 为32768HZ。 2、MCLK:系统主时钟,有以下5种选择: 1、32768HZ,来自ACLK。 2、1MHZ: BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ; 3、8MHZ: BCSCTL1 = CALBC1_8MHZ; DCOCTL = CALDCO_8MHZ; 4、12MHZ: BCSCTL1 = CALBC1_12MHZ; DCOCTL = CALDCO_12MHZ; 5、16MHZ: BCSCTL1 = CALBC1_16MHZ; DCOCTL = CALDCO_16MHZ; 3、SMCLK:子系统时钟,一般为16MHZ。
3、中断 一、其中断基本同msp430f449一样。 二、例程: void interrupt_initial() { P1DIR&=~BIT7; //P1.7为输入 P1SEL|=BIT7; P1IE|=BIT7; //P1.7中断允许 P1IES|=0x80; //P1.7下降沿触发 P1IFG=0; //P1.7中断标志清除,对于多源中断必须先清中断标志再打开中断 P1DIR|=BIT6; P1OUT&=~BIT6; _EINT(); //总中断允许 } #pragma vector=PORT1_VECTOR __interrupt void Port_1(void) { P1IFG&=~BIT7; //P1.7中断标志清除 P1OUT|=BIT6; //点亮绿灯 }
4、定时 一、其定时基本同msp430f449一样。 二、例程: void zengjishu() { TACTL=TASSEL_2+TACLR+ID_3; //选择计数时钟为MCLK,并进行8分频,将计数器TAR清零 CCTL0=CCIE; //使能中断 CCR0=65535; //计数终值,方波频率为:1048576/65536/8/2=1HZ TACTL|=MC_1; //选择Timer_A为增计数模式 P1DIR|=BIT0; //P1.0作为输出 _EINT(); //使能总中断 } #pragma vector =TIMER0_A0_VECTOR __interrupt void Timer_A(void) { P1OUT^=BIT0; //P1.0取反 }
5、A/D 一、主要特点: 1、 10位转换精度。 2、有多种时钟源可供选择,内带时钟发生器。 3、配有6个外部通道和2个内部通道。 4、内置参考电源,并且参考电压Vref有8种组合。 5、采样速度快,最快200Ks/s。 6、四种工作模式: 1、单通道单次转换模式: CONSEQ_0。 2、单通道多次转换模式: CONSEQ_2。 3、序列通道单次转换模式:CONSEQ_1 。 4、序列通道多次转换模式:CONSEQ_3。
DirectTransferController DataTransferController 二、A/D结构图:
三、例程: void ADC_convert() { P1SEL&=0x20; //使能A/D通道A5; ADC10CTL0 = ADC10SHT_1+ ADC10ON+SREF_1+REF2_5V+REFON+MSC; // 打开ADC10内核,确定采样周期为8*ADC10OSC/2,选择内部参考电压为2.5v; ADC10CTL1 = INCH_5+ADC10DIV_1+CONSEQ_2; // input A5模拟信号输入选择通道A5即P1.5,设置为单通道多次转换模式,分频因子为2 ADC10AE0 |= BIT5; // 使P1.5允许AD模拟输入信号 ADC10CTL0|=ENC; //使能转换; ADC10CTL0|=ADC10SC; //开始转换; } int Read_result() { int result; result= ADC10MEM; return (result); }
6、PWM波 一、例程: void PWM_Creat(int a,int b) { TACTL=TASSEL_2+TACLR+ID_3; //选择计数时钟为MCLK,并进行8分频,将计数器TAR清零 CCR0=65535; //计数终值,方波频率为:1048576/65536/8/2=1HZ CCTL1=OUTMOD_7; CCR1=a; //占空比为:a/65536 CCTL2=OUTMOD_7; CCR2=b; //占空比为:b/65536 P1DIR|=BIT2; //CCR1 P1SEL|=BIT2; P1DIR|=BIT7; //CCR2 P1SEL|=BIT7; TACTL|=MC_1; //选择Timer_A为增计数模式 }