msp430G2553程序实例

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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 */
关闭局部中断一般是给想关的特殊功能寄存器相关位置0 同样以P1口外部中断为例: 关闭局部中断: P1IE&=~BIT0;//关闭P1.0外部中断 2、打开、关闭全局中断: _EINT();//打开总中断,相当于51的EA=1; _DINT();//关闭总中断,相当于51的EA=0; 3、各中断向量Interrupt Vectors:
二、常用特殊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口外部输入值
#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] */
四、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外部中断
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中断标志清除 /*在此写中断服务子程序*/ }
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
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();"开中断,而在打开中断前没有清标志,就会 有相同的中断不断嵌入,而导致堆 栈溢出引起复位,所以在这类中断中必须先清标志再打开中断开关.
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的时钟。(主要用于高速外设)
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:使能)
相关文档
最新文档