﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-深海拾贝-文章分类-MSP430</title><link>http://www.cppblog.com/coloerful/category/10644.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 22 May 2009 09:11:48 GMT</lastBuildDate><pubDate>Fri, 22 May 2009 09:11:48 GMT</pubDate><ttl>60</ttl><item><title>MSP430单片机实践篇---数字型LCD－1602显示</title><link>http://www.cppblog.com/coloerful/articles/85417.html</link><dc:creator>小猪</dc:creator><author>小猪</author><pubDate>Fri, 22 May 2009 08:23:00 GMT</pubDate><guid>http://www.cppblog.com/coloerful/articles/85417.html</guid><wfw:comment>http://www.cppblog.com/coloerful/comments/85417.html</wfw:comment><comments>http://www.cppblog.com/coloerful/articles/85417.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/coloerful/comments/commentRss/85417.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/coloerful/services/trackbacks/85417.html</trackback:ping><description><![CDATA[<p>/**************************************************<br>* <br>* LCD1602显示<br>* cpu:AVRmega16<br>*<br>* 描述:4线数据宽度，操作Lcd1602<br>* 在LCD1602屏幕上第一行显示　<a onmousedown=javascript:event.cancelBubble=true; href="http://www.goodmcu.cn/" target=_blank><u><font color=#000000>www.goodmcu.cn</font></u></a> <br>* 第二行显示　13652037001<br>* 如果没有显示请按复位键，并多试几次<br>*<br>* 时间：2008年1月5日调试成功（出现问题主要是因为LCD第3脚V0的2K接地电阻没有接好）<br>* <a onmousedown=javascript:event.cancelBubble=true; href="http://www.goodmcu.cn/" target=_blank><u><font color=#000000>www.goodmcu.cn</font></u></a><br>*<br>* 硬件电路：MSP430F135核心实验板-I型<br>* 硬件连接： <br>* <br>* MSP430与LCD连接信息 <br>* LCD1602，4位接口，即使用D4-D7数据口，D0-D3不接入MCU<br>* PIN1 --&gt; 地<br>* PIN2 --&gt; VCC（一定要接+5V）<br>* PIN3 --&gt; 2K电阻--&gt;地 (一定要接好，否则没有任何显示)<br>* PIN4 --&gt; RS --&gt; P5.0<br>* PIN5 --&gt; R/W --&gt; GND<br>* PIN6 --&gt; EN --&gt; P5.1<br>* PIN7 --&gt; D0不接<br>* PIN8 --&gt; D1不接<br>* PIN9 --&gt; D2不接<br>* PIN10 --&gt; D3不接<br>* PIN11 --&gt; D4 --&gt; P4.4<br>* PIN12 --&gt; D5 --&gt; P4.5<br>* PIN13 --&gt; D6 --&gt; P4.6<br>* PIN14 --&gt; D7 --&gt; P4.7<br>* PIN15 --&gt; VCC（一定要接+5V，如果不要背光可以不接）<br>* PIN16 --&gt; 地</p>
<p>* 调试器：MSP430FET全系列JTAG仿真器<br>* 调试软件： IAR Embedded Workbench Version: 3.41A 编译<br>**************************************************/</p>
<p><span><font color=#0000ff>#include</font></span> &lt;msp430x13x.h&gt; <br><span><font color=#0000ff>#include</font></span> &lt;intrinsics.h&gt;</p>
<p><font color=#0000ff><span>////管脚定义////////////////////////////////////////////////////////////////////</span><br></font>#define LCD_EN_PORT P5OUT //以下2个要设为同一个口 <br>#define LCD_EN_DDR P5DIR <br>#define LCD_RS_PORT P5OUT //以下2个要设为同一个口 <br>#define LCD_RS_DDR P5DIR <br>#define LCD_DATA_PORT P4OUT //以下3个要设为同一个口 <br>#define LCD_DATA_DDR P4DIR //一定要用高4位 <br>#define LCD_RS BIT0<br>#define LCD_EN BIT1<br>#define LCD_DATA BIT4|BIT5|BIT6|BIT7</p>
<p><font color=#0000ff><span>////预定义函数//////////////////////////////////////////////////////////////////</span><br></font>void LCD_init(void); <br>void LCD_en_write(void); <br>void LCD_write_command(unsigned char command);<br>void LCD_write_data(unsigned char data); <br>void LCD_set_xy (unsigned char x, unsigned char y); <br>void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s); <br>void LCD_write_char(unsigned char X,unsigned char Y,unsigned char data); <br>void delay_nus(unsigned int n); <br>void delay_nms(unsigned int n); </p>
<p>void main()<br>{<br>WDTCTL = WDTPW + WDTHOLD; // Stop watchdog<br><br>LCD_init(); <br>LCD_write_string(1,0,"<a onmousedown=javascript:event.cancelBubble=true; href="http://www.goodmcu.cn/" target=_blank><u><font color=#000000>www.goodmcu.cn</font></u></a>"); <br>LCD_write_string(2,1,"13652037001"); <br>delay_nms(50);<br>LCD_write_command(0x01); //清屏<br>delay_nms(50);<br>LCD_write_char(2,1,'1');<br>delay_nms(50);<br>LCD_write_char(3,1,'3');<br>delay_nms(50);<br>LCD_write_char(4,1,'6');<br>delay_nms(50);<br>LCD_write_char(5,1,'5');<br>delay_nms(50);<br>LCD_write_char(6,1,'2');<br>delay_nms(50);<br>LCD_write_char(7,1,'0');<br>delay_nms(50);<br>LCD_write_char(8,1,'3');<br>delay_nms(50);<br>LCD_write_char(9,1,'7'); <br>delay_nms(50);<br>LCD_write_char(10,1,'0');<br>delay_nms(50);<br>LCD_write_char(11,1,'0');<br>delay_nms(50);<br>LCD_write_char(12,1,'1');<br>}<br><font color=#0000ff><span>//LCD液晶操作函数///////////////////////////////////////////////////////////////<br>//LCD1602液晶初始化 </span><br></font>void LCD_init(void) <br>{ <br>LCD_DATA_DDR|=LCD_DATA; //数据口方向为输出<br>LCD_EN_DDR|=LCD_EN; //设置EN方向为输出<br>LCD_RS_DDR|=LCD_RS; //设置RS方向为输出<br><br>LCD_write_command(0x28); //4位数据接口<br>delay_nus(40); <br>LCD_write_command(0x28); //4位显示<br>LCD_write_command(0x0c); //显示开<br>LCD_write_command(0x01); //清屏<br>delay_nms(2); <br>} <br><font color=#0000ff><span>//液晶使能 </span><br></font>void LCD_en_write(void) <br>{ <br>LCD_EN_PORT|=LCD_EN; <br>delay_nus(1); <br>LCD_EN_PORT&amp;=~LCD_EN; <br>} <br><font color=#0000ff><span>//写指令 </span><br></font>void LCD_write_command(unsigned char command) <br>{ <br>delay_nus(16); <br>LCD_RS_PORT&amp;=~LCD_RS; //RS=0 <br>LCD_DATA_PORT&amp;=0X0f; //清高四位 <br>LCD_DATA_PORT|=command&amp;0xf0; //写高四位 <br>LCD_en_write(); <br>command=command&lt;&lt;4; //低四位移到高四位 <br>LCD_DATA_PORT&amp;=0x0f; //清高四位 <br>LCD_DATA_PORT|=command&amp;0xf0; //写低四位 <br>LCD_en_write(); <br>} <br><font color=#0000ff><span>//写数据 </span><br></font>void LCD_write_data(unsigned char data) <br>{ <br>delay_nus(16); <br>LCD_RS_PORT|=LCD_RS; //RS=1 <br>LCD_DATA_PORT&amp;=0X0f; //清高四位 <br>LCD_DATA_PORT|=data&amp;0xf0; //写高四位 <br>LCD_en_write(); <br>data=data&lt;&lt;4; //低四位移到高四位 <br>LCD_DATA_PORT&amp;=0X0f; //清高四位 <br>LCD_DATA_PORT|=data&amp;0xf0; //写低四位 <br>LCD_en_write(); <br>} <br><font color=#0000ff><span>//写地址函数 </span><br></font>void LCD_set_xy( unsigned char x, unsigned char y ) <br>{ <br>unsigned char address; <br>if (y == 0) address = 0x80 + x; <br>else address = 0xc0 + x; <br>LCD_write_command( address); <br>} <br><font color=#0000ff><span>//LCD在任意位置写字符串<br>//列x=0~15,行y=0,1 </span><br></font>void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s) <br>{ <br>LCD_set_xy( X, Y ); //写地址 <br>while (*s) // 写显示字符 <br>{ <br>LCD_write_data( *s ); <br>s ++; <br>}<br>}<br><font color=#0000ff><span>//LCD在任意位置写字符<br>//列x=0~15,行y=0,1 </span><br></font>void LCD_write_char(unsigned char X,unsigned char Y,unsigned char data) <br>{ <br>LCD_set_xy( X, Y ); //写地址 <br>LCD_write_data( data); <br>} </p>
<p><span><font color=#0000ff>//延时函数//////////////////////////////////////////////////////////////////////<br>//1us延时函数</font></span><span><br>void delay_1us(void) <br>{<br>asm("nop");<br>}<br><span><font color=#0000ff>//N us延时函数</font></span></span><span><br>void delay_nus(unsigned int n) <br>{<br>unsigned int i;<br>for (i=0;i&lt;n;i++)<br>delay_1us();<br>}<br><font color=#0000ff><span>//1ms延时函数</span><br></font>void delay_1ms(void) <br>{<br>unsigned int i;<br>for (i=0;i&lt;1140;i++);<br>}<br><font color=#0000ff><span>//N ms延时函数</span><br></font>void delay_nms(unsigned int n) <br>{<br>unsigned int i=0;<br>for (i=0;i&lt;n;i++)<br>delay_1ms();<br>}</span></p>
<img src ="http://www.cppblog.com/coloerful/aggbug/85417.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/coloerful/" target="_blank">小猪</a> 2009-05-22 16:23 <a href="http://www.cppblog.com/coloerful/articles/85417.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MSP430单片机实践篇---内部FALSH的操作</title><link>http://www.cppblog.com/coloerful/articles/85416.html</link><dc:creator>小猪</dc:creator><author>小猪</author><pubDate>Fri, 22 May 2009 08:22:00 GMT</pubDate><guid>http://www.cppblog.com/coloerful/articles/85416.html</guid><wfw:comment>http://www.cppblog.com/coloerful/comments/85416.html</wfw:comment><comments>http://www.cppblog.com/coloerful/articles/85416.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/coloerful/comments/commentRss/85416.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/coloerful/services/trackbacks/85416.html</trackback:ping><description><![CDATA[<p>//******************************************************************************<br>// 测试MSP430单片机向FLASH中写入操作<br>// <br>// 描述; 每次掉电或复位后都能看到数码管上显示的数值增1，说明对flash的写入与读取成功<br>//<br>// 注意：修改flash中的内容必须首先执行擦除操作，<br>// 因为对FLASH的操作只能将1写成0，而不能将0写成1只有擦除才能将0写回1<br>// 擦除操作至少将擦除1个段<br>//<br>// 如果使用其它型号的单片机，只需将头文件改为相应的&lt;msp430xx.h&gt;;<br>// 并在Option的Target中的device改为相应的cpu即可。<br>//<br>// 硬件连接：如下图<br>// MSP430F13x<br>// -----------------<br>// /|\| XIN|- <br>// | | |<br>// --|RST XOUT|-<br>// | |<br>// | P5.0|--&gt;LED_DOUT<br>// | P5.2|--&gt;LED_CLK<br>// | P5.4|--&gt;LED_LATCH<br>//<br>// 时间：2007年12月<br>// <a onmousedown=javascript:event.cancelBubble=true; href="http://www.goodmcu.cn/" target=_blank><u><font color=#000000>www.goodmcu.cn</font></u></a><br>//<br>// 硬件电路：MSP430F135核心实验板-I型 ＋ TY-DIS1(8位数码管显示模块)<br>// 硬件连接： <br>//<br>// 调试器：MSP430FET全系列JTAG仿真器<br>// 调试软件： IAR Embedded Workbench Version: 3.41A 编译<br>//******************************************************************************</p>
<p><span><font color=#0000ff>#include</font></span> &lt;msp430x13x.h&gt; </p>
<p><font color=#0000ff><span>////预定义函数//////////////////////////////////////////////////////////////////</span><br></font>void LED_595(char SMG1,char SMG2,char SMG3,char SMG4);<font color=#666666><span>//4位LED数码管显示子程序</span><br></font>void Led_out(unsigned char X);<font color=#666666><span>//74HC595串行输出子程序</span><br></font>void A16(unsigned int dd);<font color=#666666><span>// 16进制到4位10进制转换</span><br></font>const unsigned char LED_0_F[];<span><font color=#666666>//LED数码管段码转换表</font></span></p>
<p>void Flash_clr( int *Data_ptr );<br>void Flash_ww( int *Data_ptr, int word );<br>void Flash_wb( char *Data_ptr, char byte );</p>
<p><font color=#0000ff><span>////变量定义////////////////////////////////////////////////////////////////////</span><br></font>unsigned char Buffer[4];</p>
<p>void main(void)<br>{<br>char *point,*readaa; <font color=#666666><span>// 定义2个指针，分别指向flash和变量aa</span><br></font>char aa;<br><br><font color=#666666><span>//初始化IO口用于显示</span><br></font>P5DIR =0; //P5口全部设为输入口<br>P5SEL =0; //将P5口所有的管脚设置为一般I/O口<br>P5DIR |= BIT0; //将P5.0 P5.2 P5.4设置为输出方向<br>P5DIR |= BIT2;<br>P5DIR |= BIT4;<br><br>WDTCTL = WDTPW + WDTHOLD;<font color=#666666><span> //停止watchdog</span><br></font>_DINT(); <font color=#666666><span>//对FLASH操作之前必须关闭中断</span><br><br></font>readaa=&amp;aa;<font color=#666666><span> //读取变量aa的地址；<br>//在watch观察窗中可以通过readaa看到aa所在的地址及内容</span><br></font>point=(char*)0xcb10; <font color=#666666><span>//设置要读取的flash地址为&#8220;0xcb10&#8221;<br>//在watch观察窗中可以通过point看到0xcb10所在地址的内容</span><br></font>*readaa=*point;<font color=#666666><span> //将flash数据读入aa</span><br></font>aa=*point;<font color=#666666><span> //另一种将flash数据读入aa的方法</span><br><br></font>aa++;<br><br>Flash_clr((int*)0xcb00);<font color=#666666><span> //擦除0xcb00所在段，只有擦除才能将0写回1</span><br></font>Flash_wb((char*)0xcb10,aa); <font color=#666666><span>//向0xcb10写入新的aa（字节）</span><br><br><br></font>while(1)<br>{<br>A16(aa);<br>LED_595(Buffer[0],Buffer[1],Buffer[2],Buffer[3]);<br>}<br>}</p>
<p><font color=#0000ff><span>//***FLASH操作类函数集**********************************************************<br>//-----------------------------------------------------------------<br>// Flash_wb<br>//-----------------------------------------------------------------<br>// 将1个字节(8 bit)写入到flash memory中</span><br></font>void Flash_wb( char *Data_ptr, char byte )<br>{<br>FCTL3 = 0x0A500; /* Lock = 0 */<br>FCTL1 = 0x0A540; /* WRT = 1 */<br>*Data_ptr=byte; /* program Flash word */<br>FCTL1 = 0x0A500; /* WRT = 0 */<br>FCTL3 = 0x0A510; /* Lock = 1 */<br>}<br><span><font color=#0000ff>//-----------------------------------------------------------------<br>// Flash_ww<br>//-----------------------------------------------------------------<br>// 将1个字节(16 bits)写入到flash memory中</font></span></p>
<p>void Flash_ww( int *Data_ptr, int word )<br>{<br>FCTL3 = 0x0A500; /* Lock = 0 */<br>FCTL1 = 0x0A540; /* WRT = 1 */<br>*Data_ptr=word; /* program Flash word */<br>FCTL1 = 0x0A500; /* WRT = 0 */<br>FCTL3 = 0x0A510; /* Lock = 1 */<br>}<br><font color=#0000ff><span>//-----------------------------------------------------------------<br>// Flash_clr<br>//-----------------------------------------------------------------<br>// 擦除1个段的flash memory</span><br></font>void Flash_clr( int *Data_ptr )<br>{<br>FCTL3 = 0x0A500; /* Lock = 0 */<br>FCTL1 = 0x0A502; /* ERASE = 1 */<br>*Data_ptr=0; /* erase Flash segment */<br>FCTL1 = 0x0A500; /* ERASE = 0 */<br>FCTL3 = 0x0A510; /* Lock = 1 */<br>}</p>
<p><font color=#0000ff><span>//***显示类函数集***************************************************************</span><br></font><font color=#0000ff><span>//------------------------------------------------------<br>// 4位LED数码管显示子程序<br>//<br>// 人口参数：SMG1,SMG2,SMG3,SMG4——待显示的数据<br>//</span><br></font>void LED_595(char SMG1,char SMG2,char SMG3,char SMG4)<br>{<br>char z;<br><font color=#666666><span>//最高位（最左侧）LED数码管显示---------------------</span><br></font>z = LED_0_F[SMG1];<br>Led_out(z); //段码输出<br>z = 0xFE; //位码<br>Led_out(z); //位码输出<br><br>P5OUT &amp;=~(BIT4); //显示输出 <br>P5OUT |=BIT4;<br><br><font color=#666666><span>//次高位（左数第2个）LED数码管显示---------------------</span><br></font>z = LED_0_F[SMG2];<br>Led_out(z); //段码输出<br>z = 0xFD; //位码<br>Led_out(z); //位码输出<br><br>P5OUT &amp;=~(BIT4); //显示输出 <br>P5OUT |=BIT4;<br><br><font color=#666666><span>//次低位（左数第3位）LED数码管显示---------------------</span><br></font>z = LED_0_F[SMG3];<br>Led_out(z); //段码输出<br>z = 0xFB; //位码<br>Led_out(z); //位码输出<br><br>P5OUT &amp;=~(BIT4); //显示输出 <br>P5OUT |=BIT4;<br><br><font color=#666666><span>//最低位（左数第4位）LED数码管显示---------------------</span><br></font>z = LED_0_F[SMG4];<br>Led_out(z); //段码输出<br>z = 0xF7; //位码<br>Led_out(z); //位码输出<br><br>P5OUT &amp;=~(BIT4); //显示输出 <br>P5OUT |=BIT4;<br>}</p>
<p><font color=#0000ff><span>//------------------------------------------------------<br>// 用于74HC595的LED串行移位子程序<br>//<br>// 人口参数：X——待输出的数据<br>//</span><br></font>void Led_out(unsigned char X)<br>{<br>unsigned char i;<br>for(i=8;i&gt;0;i--)<br>{<br>if (X&amp;0x80) P5OUT |=BIT0; else P5OUT &amp;=~(BIT0);<br>X&lt;&lt;=1;<br>P5OUT &amp;= ~(BIT2); <font color=#666666><span>//P5.2管脚输出低电平</span><br></font>P5OUT |= BIT2; <font color=#666666><span>//P5.2管脚输出高电平</span><br></font>}<br>}</p>
<span><font color=#666666>//------------------------------------------------------ // LED段码转换表0——F //------------------------------------------------------</font></span> const unsigned char LED_0_F[] = {// 0&nbsp; 1&nbsp; &nbsp; 2&nbsp; &nbsp; 3&nbsp; &nbsp; 4&nbsp; &nbsp; 5&nbsp; &nbsp; 6&nbsp; &nbsp; 7&nbsp; &nbsp; 8&nbsp; &nbsp; 9&nbsp; &nbsp; A&nbsp; &nbsp; b&nbsp; &nbsp; c&nbsp; &nbsp; d&nbsp; &nbsp; E&nbsp; &nbsp; F&nbsp; &nbsp; 不显示 -&nbsp; o(18)H(19)h(20)C(21)0(22)n(23) 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xA7,0xA1,0x86,0x8e,0xFF,0xbf,0xa3,0x89,0x8b,0xc6,0xc0,0xab }; 
<img src ="http://www.cppblog.com/coloerful/aggbug/85416.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/coloerful/" target="_blank">小猪</a> 2009-05-22 16:22 <a href="http://www.cppblog.com/coloerful/articles/85416.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MSP430功能模块详解系列之——FLASH存储器</title><link>http://www.cppblog.com/coloerful/articles/85415.html</link><dc:creator>小猪</dc:creator><author>小猪</author><pubDate>Fri, 22 May 2009 08:21:00 GMT</pubDate><guid>http://www.cppblog.com/coloerful/articles/85415.html</guid><wfw:comment>http://www.cppblog.com/coloerful/comments/85415.html</wfw:comment><comments>http://www.cppblog.com/coloerful/articles/85415.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/coloerful/comments/commentRss/85415.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/coloerful/services/trackbacks/85415.html</trackback:ping><description><![CDATA[<div style="FONT-SIZE: 14px; LINE-HEIGHT: 1.5em"><span><strong>一、MSP430单片机FLASH存储器模块特点</strong></span>
<blockquote>
<p><span><font color=#9900ff>1.8～3.6V工作电压，2.7～3.6V编程电压；<br>擦除/编程次数可达100000次：<br>数据保持时间从10年到100年不等：<br>60KB空间编程时间&lt;5秒：<br>保密熔丝烧断后不可恢复，不能再对JTAG进行任何访问；<br>FLASH编程/擦除时间由内部硬件控制，无任何软件干预；</font></span></p>
</blockquote>
<p><strong>二、FLASH存储器的操作</strong></p>
<p>由于FLASH存储器由很多相对独立的段组成，因此可在一个段中运行程序，而对另一个段进行擦除或写入操作。正在执行编程或擦除等操作的FLASH段是不能被访问的，因为这时该段是与片内地址总线暂时断开的。</p>
<p>对FLASH模块的操作可分为3类：擦除、写入及读出。而擦除又可分为单段擦除和整个模块擦除；写入可分为字写入、字节写入、字连续写入和字节连续写入</p>
<p><strong>1.FLASH擦除操作：</strong>对FLASH要写入数据，必须先擦除相应的段，对FLASH存储器的擦除必须是整段地进行，可以一段一段地擦除，也可以多端一起擦除，但不能一个字节或一个字地擦除。擦除之后各位为1。擦除操作的顺序如下：</p>
<blockquote>
<p>选择适当的时钟源和分频因子，为时序发生器提供正确时钟输入<br>如果Lock=1，则将它复位<br>****BUSY标志位，只有当BUSY=0时才可以执行下一步，否则一直****BUSY<br>如果擦除一段，则设置ERASE=1<br>如果擦除多段，则设置MERAS=1<br>如果擦除整个FLASH，则设置RASE=1，同时MERAS=1<br>对擦除的地址范围内的任意位置作一次空写入，用以启动擦除操作。<br>在擦除周期选择的时钟源始终有效<br>在擦除周期不修改分频因子<br>在BUSY=1期间不再访问所操作的段<br>电源电压应符合芯片的相应要求</p>
<p>对FLASH擦除要做4件事</p>
<p>对FLASH控制寄存器写入适当的控制位<br>****BUSY位<br>空写一次<br>等待</p>
</blockquote>
<p><strong>2.FLASH编程操作。</strong>对FLASH编程按如下顺序进行：</p>
<blockquote>
<p><span><font size=2>选择适当的时钟源和分频因子<br>如果Lock=1，则将它复位<br>****BUSY标志位，只有当BUSY=0时才可以执行下一步，否则一直****BUSY<br>如果写入单字或单字节，则将设置WRT=1<br>如果是块写或多字、多字节顺序写入，则将设置WRT=1，BLKWRT=1<br>将数据写入选定地址时启动时序发生器，在时序发生器的控制下完成整个过程</font></span></p>
<p>块写入可用于在FLASH段中的一个连续的存储区域写入一系列数据。一个块为64字节长度。块开始在0XX00H、0XX40H、0XX80H、0XXC0H等地址，块结束在0XX3FH、0XX7FH、0XXBFH、0XXFFH等地址。块操作在64字节分界处需要特殊的软件支持，操作如下：</p>
<blockquote>
<p><font size=2><span>等待WAIT位，直到WAIT=1，表明最后一个字或字节写操作结束<br>将控制位BLKWRT复位<br>保持BUSY位为1，直到编程电压撤离FLASH模块</span><br></font>在新块被编程前，等待trcv（编程电压恢复时间）时间</p>
</blockquote>
<p>在写周期中，必须保证满足以下条件：</p>
<p>被选择的时钟源在写过程中保持有效<br>分频因子不变<br>在BUSY=1期间，不访问FLASH存储器模块</p>
<p>对FLASH写入要做4件事</p>
<p>对FLASH控制寄存器写入适当的控制位<br>****BUSY位<br>写一个数据<br>继续写一直到写完</p>
</blockquote>
<p><strong>3.FLASH错误操作的处理：</strong>在写入FLASH控制寄存器控制参数时，可引发以下错误：</p>
<blockquote>
<p>如果写入高字节口令码错误，则引发PUC信号。小心操作可避免<br>在对FLASH操作期间读FLASH内容，会引发ACCVFIG状态位的设置。小心操作可避免<br>在对FLASH操作期间看门狗定时器溢出。建议用户程序在进行FLASH操作之前先停止看门狗定时器，等操作结束后再打开看门狗<br>所有的FLASH类型的MSP430器件0段都包含有中断向量等重要的程序代码，如果对其进行擦除操作，将会引起严重的后果<br>不要在FLASH操作期间允许中断的发生</p>
</blockquote>
<p><strong>4.FLASH操作小结</strong></p>
<p>对FLASH的操作是通过对3个控制字中的相应位来完成的，只有控制位的唯一组合才能实现相应的功能。下表给出了正确的控制位组合：</p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr bgColor=#ff9900>
            <td width=200 height=20>
            <p align=center>功能</p>
            </td>
            <td vAlign=center align=middle width=60><span><font size=2>BLKWRT</font></span></td>
            <td vAlign=center align=middle width=60><span><font size=2>WRT</font></span></td>
            <td vAlign=center align=middle width=60><span><font size=2>Meras</font></span></td>
            <td vAlign=center align=middle width=60><span><font size=2>Erase</font></span></td>
            <td vAlign=center align=middle width=60><span><font size=2>BUSY</font></span></td>
            <td vAlign=center align=middle width=60><span><font size=2>WAIT</font></span></td>
            <td vAlign=center align=middle width=60>
            <p align=center><span><span><span></span></span></span>Lock</p>
            </td>
        </tr>
        <tr bgColor=#ffffcc>
            <td vAlign=center align=left width=200 bgColor=#990000 height=18>字或字节写入</td>
            <td vAlign=center align=middle width=60 height=18>0</td>
            <td vAlign=center align=middle width=60 height=18>1</td>
            <td vAlign=center align=middle width=60 height=18>0</td>
            <td vAlign=center align=middle width=60 height=18>0</td>
            <td vAlign=center align=middle width=60 height=18>0</td>
            <td vAlign=center align=middle width=60 height=18>0</td>
            <td vAlign=center align=middle width=60>0</td>
        </tr>
        <tr bgColor=#ffffcc>
            <td vAlign=center align=left width=200 bgColor=#990000 height=18>块写入</td>
            <td vAlign=center align=middle width=60 height=18>1</td>
            <td vAlign=center align=middle width=60 height=18>1</td>
            <td vAlign=center align=middle width=60 height=18>0</td>
            <td vAlign=center align=middle width=60 height=18>0</td>
            <td vAlign=center align=middle width=60 height=18>0</td>
            <td vAlign=center align=middle width=60 height=18>1</td>
            <td vAlign=center align=middle width=60>0</td>
        </tr>
        <tr bgColor=#ffffcc>
            <td vAlign=center align=left width=200 bgColor=#990000 height=18>段擦除并写入</td>
            <td vAlign=center align=middle width=60 height=18>0</td>
            <td vAlign=center align=middle width=60 height=18>0</td>
            <td vAlign=center align=middle width=60 height=18>0</td>
            <td vAlign=center align=middle width=60 height=18>1</td>
            <td vAlign=center align=middle width=60 height=18>0</td>
            <td vAlign=center align=middle width=60 height=18>0</td>
            <td vAlign=center align=middle width=60>0</td>
        </tr>
        <tr bgColor=#ffffcc>
            <td vAlign=center align=left width=200 bgColor=#990000 height=18>擦除A和B以外段</td>
            <td vAlign=center align=middle width=60 height=18>0</td>
            <td vAlign=center align=middle width=60 height=18>0</td>
            <td vAlign=center align=middle width=60 height=18>1</td>
            <td vAlign=center align=middle width=60 height=18>0</td>
            <td vAlign=center align=middle width=60 height=18>0</td>
            <td vAlign=center align=middle width=60 height=18>0</td>
            <td vAlign=center align=middle width=60>0</td>
        </tr>
        <tr bgColor=#ffffcc>
            <td vAlign=center align=left width=200 bgColor=#990000 height=18>全部擦除并写入</td>
            <td vAlign=center align=middle width=60 height=18>0</td>
            <td vAlign=center align=middle width=60 height=18>0</td>
            <td vAlign=center align=middle width=60 height=18>1</td>
            <td vAlign=center align=middle width=60 height=18>1</td>
            <td vAlign=center align=middle width=60 height=18>0</td>
            <td vAlign=center align=middle width=60 height=18>&nbsp;</td>
            <td vAlign=center align=middle width=60>0</td>
        </tr>
    </tbody>
</table>
<p><strong>三、FLASH寄存器说明</strong></p>
<p>允许编程、擦除等操作首先要对3个控制寄存器（FCTL1、FCTL2、FCTL3）的各位进行定义。它们使用安全键值（口令码）来防止错误的编程和擦除周期，口令出错将产生非屏蔽中断请求。安全键值位于每个控制字的高字节，读时为96H，写时为5AH。</p>
<p>1．<strong>FCTL1</strong> 控制寄存器1（用于控制所有写/编程或者删除操作的有效位），各位定义如下：</p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr bgColor=#0000ff>
            <td vAlign=center align=middle width=200>15～8</td>
            <td vAlign=center align=middle width=70>7</td>
            <td width=70>
            <p align=center>6</p>
            </td>
            <td width=50>
            <p align=center>5</p>
            </td>
            <td width=50>
            <p align=center>4</p>
            </td>
            <td width=50>
            <p align=center>3</p>
            </td>
            <td width=70>
            <p align=center>2</p>
            </td>
            <td width=70>
            <p align=center>1</p>
            </td>
            <td width=70>
            <p align=center>0</p>
            </td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle width=200>安全键值，读时为96H，写时为5AH</td>
            <td vAlign=center align=middle width=70>BLKWRT</td>
            <td vAlign=center align=middle width=70>WRT</td>
            <td vAlign=center align=middle>保留</td>
            <td vAlign=center align=middle width=70>MERAS</td>
            <td vAlign=center align=middle width=70>ERASE</td>
            <td vAlign=center align=middle width=70>&nbsp;</td>
        </tr>
    </tbody>
</table>
<p>BLKWRT——段编程位。如果有较多的连续数据要编程到某一段或某几段，则可选择这种方式，这样可缩短编程时间。在一段程序完毕，再编程其它段，需对该位先复位再置位，在下一条写指令执行前WAIT位应为1。</p>
<blockquote>
<p>0：未选用段编程方式<br>1：选用段编程方式</p>
</blockquote>
<p>WRT——编程位</p>
<blockquote>
<p>0：不编程，如对FLASH写操作，发生非法访问，使ACCVIFG位置位；<br>1：编程</p>
</blockquote>
<p>MERAS——主存控制擦除位</p>
<blockquote>
<p>0：不擦除<br>1：主存全擦除，对主存空写时启动擦除操作，完成后MERAS自动复位</p>
</blockquote>
<p>ERASE——擦除一段控制位</p>
<blockquote>
<p>0：不擦除<br>1：擦除一段。由空写指令带入段号来指定擦除哪一段，操作完成后自动复位</p>
</blockquote>
<p>2．<strong>FCTL2</strong> 控制寄存器2（对进入时序发生器的时钟进行定义），各位定义如下：</p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr bgColor=#0000ff>
            <td vAlign=center align=middle width=200>15～8</td>
            <td vAlign=center align=middle width=70>7</td>
            <td width=70>
            <p align=center>6</p>
            </td>
            <td width=70>
            <p align=center>5</p>
            </td>
            <td width=70>
            <p align=center>4</p>
            </td>
            <td width=70>
            <p align=center>3</p>
            </td>
            <td width=70>
            <p align=center>2</p>
            </td>
            <td width=70>
            <p align=center>1</p>
            </td>
            <td width=70>
            <p align=center>0</p>
            </td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle width=200>安全键值，读时为96H，写时为5AH</td>
            <td vAlign=center align=middle width=70>SSEL1</td>
            <td vAlign=center align=middle width=70>SSEL0</td>
            <td vAlign=center align=middle width=70>FN5</td>
            <td vAlign=center align=middle width=70>FN4</td>
            <td vAlign=center align=middle width=70>FN3</td>
            <td vAlign=center align=middle width=70>FN2</td>
            <td vAlign=center align=middle width=70>FN1</td>
            <td vAlign=center align=middle width=70>FN0</td>
        </tr>
    </tbody>
</table>
<p>SSEL1、SSEL0——选择时钟源</p>
<blockquote>
<p>0：ACLK<br>1：MCLK<br>2：SMCLK<br>3：SMCLK</p>
</blockquote>
<p>FN5～FN0——分频系数选择位</p>
<blockquote>
<p>0：直通<br>1：2分频<br>2：3分频<br>......<br>63：64分频</p>
</blockquote>
<p>3．<strong>FCTL3</strong> 控制寄存器3（用于控制FLASH存储器操作，保存相应的状态标志和错误条件），各位定义如下：</p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr bgColor=#0000ff>
            <td vAlign=center align=middle width=200>15～8</td>
            <td vAlign=center align=middle width=70>7</td>
            <td width=70>
            <p align=center>6</p>
            </td>
            <td width=70>
            <p align=center>5</p>
            </td>
            <td width=70>
            <p align=center>4</p>
            </td>
            <td width=70>
            <p align=center>3</p>
            </td>
            <td width=70>
            <p align=center>2</p>
            </td>
            <td width=70>
            <p align=center>1</p>
            </td>
            <td width=70>
            <p align=center>0</p>
            </td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle width=200>安全键值，读时为96H，写时为5AH</td>
            <td vAlign=center align=middle width=70>&nbsp;</td>
            <td vAlign=center align=middle width=70>&nbsp;</td>
            <td vAlign=center align=middle width=70>EMEX</td>
            <td vAlign=center align=middle width=70>Lock</td>
            <td vAlign=center align=middle width=70>WAIT</td>
            <td vAlign=center align=middle width=70>ACCVIFG</td>
            <td vAlign=center align=middle width=70>KEYV</td>
            <td vAlign=center align=middle width=70>BUSY</td>
        </tr>
    </tbody>
</table>
<p>EMEX——紧急退出位。对FLASH的操作失败时使用该位作紧急处理</p>
<blockquote>
<p>0：无作用<br>1：立即停止对FLASH的操作</p>
</blockquote>
<p>Lock——锁定位，给已经编程好的FLASH存储器加锁</p>
<blockquote>
<p>0：不加锁，FLASH存储器可读、可写、可擦除<br>1：加锁，加锁的FLASH存储器可读、不可写、不可擦除</p>
</blockquote>
<p>WAIT——等待指示信号，该位只读。</p>
<blockquote>
<p>0：段编程操作已经开始，编程操作进行中<br>1：段编程操作有效，当前数据已经正确地写入FLASH存储器，后续编程数据被列入计划</p>
</blockquote>
<p>ACCVIFG——非法访问中断标志。当对FLASH阵列进行编程或擦除操作时不能访问FLASH，否则将使得该位置位</p>
<blockquote>
<p>0：没有对FLASH存储器的非法访问<br>1：有对FLASH存储器的非法访问</p>
</blockquote>
<p>KEYV——安全键值（口令码）出错标志位</p>
<blockquote>
<p>0：对3个控制寄存器的访问，写入时高字节是0A5H<br>1：对3个控制寄存器的访问，写入时高字节不是0A5H，同时引发PUC信号<br>KEYV不会自动复位，须用软件复位</p>
</blockquote>
<p>BUSY——忙标志位。该位只读。每次编程或擦除之前都应该检查BUSY位。当编程或擦除启动后，时序发生器将自动设置该位为1，操作完成后BUSY位自动复位</p>
<blockquote>
<p>0：FLASH存储器不忙<br>1：FLASH存储器忙</p>
</blockquote></div>
<img src ="http://www.cppblog.com/coloerful/aggbug/85415.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/coloerful/" target="_blank">小猪</a> 2009-05-22 16:21 <a href="http://www.cppblog.com/coloerful/articles/85415.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MSP430单片机ADC模数转换操作</title><link>http://www.cppblog.com/coloerful/articles/85413.html</link><dc:creator>小猪</dc:creator><author>小猪</author><pubDate>Fri, 22 May 2009 08:20:00 GMT</pubDate><guid>http://www.cppblog.com/coloerful/articles/85413.html</guid><wfw:comment>http://www.cppblog.com/coloerful/comments/85413.html</wfw:comment><comments>http://www.cppblog.com/coloerful/articles/85413.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/coloerful/comments/commentRss/85413.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/coloerful/services/trackbacks/85413.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<p>//******************************************************************************<br>// D13x 实例4 - 12位AD转换<br>//<br>// 描述：系统处于休眠状态LPM0<br>// 如果AD采样值大于等于7FF小灯点亮；如果小于7FF小灯熄灭。<br>// ACLK= n/a, MCLK= SMCLK= default DCO ~ 800k<br>//<br>// MSP430F13x<br>// -------------------<br>// /|\| XIN|- <br>// | | | 32kHz<br>// --|RST XOUT|-<br>// | |<br>// Vin--&gt;|P6.0/A0 P1.5|--&gt; LED<br>//<br>// 时间：2007年10月<br>// <a onmousedown=javascript:event.cancelBubble=true; href="http://www.goodmcu.cn/" target=_blank><u><font color=#000000>www.goodmcu.cn</font></u></a><br>//<br>// 硬件电路：MSP430F135核心实验板-I型<br>// 硬件连接： <br>//<br>// 调试器：MSP430FET全系列JTAG仿真器<br>// 调试软件： IAR Embedded Workbench Version: 3.41A 编译<br>//******************************************************************************</p>
<p><span><font color=#0000ff>#include</font></span> &lt;msp430x13x.h&gt;</p>
<p><span><font color=#0000ff>void</font></span> main(<span><font color=#0000ff>void</font></span>)<br>{<br>WDTCTL = WDTPW + WDTHOLD;<font color=#990000><span> // Stop WDT</span><br></font>ADC12CTL0 = SHT0_2 + ADC12ON;<font color=#990000><span> // 设置采样时间, 打开 ADC12</span><br></font>ADC12CTL1 = SHP;<font color=#990000><span> // 打开采样定时器</span><br></font>ADC12IE = 0x01;<font color=#990000><span> // AD0采样结束允许中断</span><br></font>ADC12CTL0 |= ENC;<font color=#990000><span> // AD转换使能</span><br></font>P6SEL |= 0x01; <font color=#990000><span>// 选择 P6.0 功能为 ADC</span><br></font>P1DIR |= 0x20; <span><font color=#990000>// P1.5 输出口</font></span></p>
<p>for (;;)<br>{<br>ADC12CTL0 |= ADC12SC; <font color=#990000><span>// 转换打开</span><br></font>_BIS_SR(CPUOFF + GIE);<font color=#990000><span> // LPM0, ADC12_ISR will force exit</span><br></font>}<br>}</p>
<p><font color=#990000><span>// ADC12 中断处理程序</span><br></font><span><font color=#0000ff>#pragma</font></span> vector=ADC12_VECTOR <font color=#990000><span>//Timer_A中断函数</span><br></font>__interrupt<span><font color=#0000ff> void</font></span> ADC()<br>{<br>if (ADC12MEM0 &lt; 0x7FF)<br>P1OUT &amp;= ~0x20;<font color=#990000><span> // 小于7FF 关闭 P1.5 LED 灯</span><br></font>else<br>P1OUT |= 0x20;<font color=#990000><span> // 点亮 P1.5 LED 灯</span><br></font>_BIC_SR_IRQ(CPUOFF); <font color=#990000><span>// Clear CPUOFF bit from 0(SR)</span><br></font>}</p>
<img src ="http://www.cppblog.com/coloerful/aggbug/85413.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/coloerful/" target="_blank">小猪</a> 2009-05-22 16:20 <a href="http://www.cppblog.com/coloerful/articles/85413.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MSP430单片机的PWM操作</title><link>http://www.cppblog.com/coloerful/articles/85414.html</link><dc:creator>小猪</dc:creator><author>小猪</author><pubDate>Fri, 22 May 2009 08:20:00 GMT</pubDate><guid>http://www.cppblog.com/coloerful/articles/85414.html</guid><wfw:comment>http://www.cppblog.com/coloerful/comments/85414.html</wfw:comment><comments>http://www.cppblog.com/coloerful/articles/85414.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/coloerful/comments/commentRss/85414.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/coloerful/services/trackbacks/85414.html</trackback:ping><description><![CDATA[<div style="FONT-SIZE: 14px; LINE-HEIGHT: 1.5em">
<p><font color=#000066><span>//*******************************************************************************<br>// 描述：MSP430实现PWM。反映在LED灯上，可以看到LED灯的亮度不断变化<br>//<br>// ACLK= n/a, MCLK= SMCLK= default DCO ~ 800k<br>//<br>// MSP430F13x<br>// -------------------<br>// /|\| XIN|- <br>// | | | 32kHz<br>// --|RST XOUT|-<br>// | |<br>// | P1.2|--&gt;LED<br>//<br>// 时间：2007年10月<br>// <a onmousedown=javascript:event.cancelBubble=true; href="http://www.goodmcu.cn/" target=_blank><u><font color=#000000>www.goodmcu.cn</font></u></a><br>//<br>// 硬件电路：MSP430F135核心实验板-I型<br>// 硬件连接： <br>//<br>// 调试器：MSP430FET全系列JTAG仿真器<br>// 调试软件： IAR Embedded Workbench Version: 3.41A 编译<br>//******************************************************************************</span><br></font><span><font color=#0000ff>#include</font></span> &lt;msp430x13x.h&gt;</p>
<p>void Init_CLK(void);<br>void Init_TimerA(void);</p>
<p>unsigned int nCount; </p>
<p>void Init_CLK(void)<br>{<br>unsigned int i;<br><font color=#990000><span>//将寄存器的内容清零<br>//XT2震荡器开启<br>//LFTX1工作在低频模式<br>//ACLK的分频因子为1</span><br></font>BCSCTL1 = 0X00; <br><br>do <br>{<br><font color=#990000><span>// 清除OSCFault标志</span><br></font>IFG1 &amp;= ~OFIFG; <br>for (i = 0x20; i &gt; 0; i--); <br>}<br>while ((IFG1 &amp; OFIFG) == OFIFG); <br><br>BCSCTL2 = 0X00; <br><font color=#990000><span>//MCLK的时钟源为TX2CLK:2.048MHz，分频因子为0</span><br></font>BCSCTL2 += SELM1 + DIVM_0; <br><font color=#990000><span>//SMCLK的时钟源为TX2CLK:2.048MHz，分频因子为1</span><br></font>BCSCTL2 += SELS + DIVS_0;<br>return;<br>}<br>void Init_TimerA(void)<br>{<br>nCount = 0;</p>
<p>TACTL = TASSEL1 + TACLR; <font color=#990000><span>// 选择SMCLK，清除TAR</span><br></font>CCTL0 = CCIE; <font color=#990000><span>// CCR0 中断允许</span><br></font>CCR0 = 65535 - 1;<font color=#990000><span> // PWM周期为256</span><br></font>CCTL1 = OUTMOD_7; <font color=#990000><span>// CCR1输出模式为&#8220;复位/置位&#8221;模式</span><br></font>TACTL |= MC1; <font color=#990000><span>// 增记数模式 </span><br></font>return;<br>}</p>
<p><span><font color=#0000ff>#pragma</font></span> vector=TIMERA0_VECTOR <font color=#990000><span>//Timer_A中断函数</span><br></font>__interrupt void TimerA_ISR()<br>{<br>nCount += 655; <br>CCR1 = nCount;<br>}</p>
<p>int main(void)<br>{<br><font color=#990000><span>// 关闭看门狗</span><br></font>WDTCTL = WDTPW + WDTHOLD; <br><br>P1DIR |= BIT2;<font color=#990000><span> // P1.2为输出</span><br></font>P1SEL |= BIT2;<font color=#990000><span> // 选择P1.2为TA1管脚<br>// 关闭中断</span><br></font>_DINT(); <br><br><font color=#990000><span>// 初始化</span><br></font>Init_CLK();<br>Init_TimerA();<br><font color=#990000><span>// 打开中断</span><br></font>_EINT(); <br>for(;;)<br>{<br><font color=#990000><span>//CUP进入低功耗模式</span><br></font>_BIS_SR(LPM0_bits); <br>_NOP(); <br>}<br>}</p>
</div>
<img src ="http://www.cppblog.com/coloerful/aggbug/85414.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/coloerful/" target="_blank">小猪</a> 2009-05-22 16:20 <a href="http://www.cppblog.com/coloerful/articles/85414.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MSP430功能模块详解系列之——ADC12</title><link>http://www.cppblog.com/coloerful/articles/85412.html</link><dc:creator>小猪</dc:creator><author>小猪</author><pubDate>Fri, 22 May 2009 08:19:00 GMT</pubDate><guid>http://www.cppblog.com/coloerful/articles/85412.html</guid><wfw:comment>http://www.cppblog.com/coloerful/comments/85412.html</wfw:comment><comments>http://www.cppblog.com/coloerful/articles/85412.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/coloerful/comments/commentRss/85412.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/coloerful/services/trackbacks/85412.html</trackback:ping><description><![CDATA[<div style="FONT-SIZE: 14px; LINE-HEIGHT: 1.5em"><span><strong>一、ADC12转换模式</strong></span>
<p><span><font color=#9900ff>ADC12提供4种转换模式：</font></span></p>
<blockquote>
<p><span><font color=#9900ff>单通道单次转换</font></span></p>
<blockquote>
<p><span>对选定的通道进行单次转换要进行如下设置：</span><br>x=CSStartAdd，指向转换开始地址<br>ADC12MEMx存放转换结果<br>ADC12IFG.x为对应的中断标志<br>ADC12MCTLx寄存器中定义了通道和参考电压<br><span><font size=2>转换完成时必须使ENC再次复位并置位（上升沿），以准备下一次转换。在ENC复位并再次置位之前的输入信号将被忽略。</font></span></p>
</blockquote>
<p><span><font color=#9900ff>序列通道单次转换</font></span></p>
<blockquote>
<p><span>对序列通道进行单次转换要进行如下设置：</span><br>x=CSStartAdd，指示转换开始地址<br>EOS（ADC12MCTLx.7）=1标志序列中最后通道y，非最后通道的EOS位都是0，表示序列没有结束。<br>ADC12MEMx，...ADC12MEM.y存放转换结果<br>ADC12IFG.x，...ADC12IFG.y为对应的中断标志<br>ADC12MCTLx寄存器中定义了通道和参考电压<br><span><font size=2>转换完成时必须使ENC再次复位并置位（上升沿），以准备下一次转换。在ENC复位并再次置位之前的输入信号将被忽略。</font></span></p>
</blockquote>
<p><span><font color=#9900ff>单通道多次转换</font></span></p>
<blockquote>
<p><span>对选定的通道进行多次转换，直到关闭该功能或ENC=0。进行如下设置：</span><br>x=CSStartAdd，指向转换开始地址<br>ADC12MEMx存放转换结果 <br>ADC12MCTLx寄存器中定义了通道和参考电压<br><span>在这种模式下，改变转换模式，不必先停止转换，在当前正在进行的转换结束后，可改变转换模式。该模式的停止可有如下几种办法：</span><br>使用CONSEQ=0的办法，改变为单通道单次模式。<br>使用ENC=0直接使当前转换完成后停止。<br>使用单通道单次模式替换当前模式，同时使ENC=0 </p>
</blockquote>
<p><span><font color=#9900ff>序列通道多次转换</font></span></p>
<blockquote>
<p><span>对序列通道进行多次转换，直到关闭该功能或ENC=0。进行如下设置：</span><br>x=CSStartAdd，指示转换开始地址<br>EOS（ADC12MCTLx.7）=1标志序列中最后通道y。 <br>ADC12MCTLx寄存器中定义了通道和参考电压<br><span>改变转换模式，不必先停止转换。一旦改变模式（单通道单次模式除外），将在当前序列完成后立即生效</span></p>
</blockquote></blockquote>
<p><span><font color=#9900ff>不论用户使用何种转换模式，都要处理以下问题：</font></span></p>
<blockquote>
<p><span><font color=#9900ff>设置具体模式<br>输入模拟信号<br>关注转换结束信号<br>存放转换数据以及采用查询或者中断方式读取数据</font></span></p>
</blockquote>
<p><strong>二、ADC12寄存器说明</strong></p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr bgColor=#ff9900>
            <td width=129 height=20>
            <p align=center>寄存器类型</p>
            </td>
            <td width=209>
            <p align=center>寄存器缩写</p>
            </td>
            <td width=184>
            <p align=center>寄存器含义</p>
            </td>
        </tr>
        <tr bgColor=#ffffcc>
            <td vAlign=center align=middle width=129>转换控制寄存器</td>
            <td vAlign=center align=left width=209 height=18>ADC12CTL0</td>
            <td vAlign=center align=middle width=184>转换控制寄存器0</td>
        </tr>
        <tr bgColor=#ffffcc>
            <td vAlign=center align=left width=209 height=18>ADC12CTL1</td>
            <td vAlign=center align=middle width=184>转换控制寄存器1</td>
        </tr>
        <tr bgColor=#ffffcc>
            <td vAlign=center align=middle width=129>中断控制寄存器</td>
            <td vAlign=center align=left width=209 height=18>ADC12IFG</td>
            <td vAlign=center align=middle width=184>中断标志寄存器</td>
        </tr>
        <tr bgColor=#ffffcc>
            <td vAlign=center align=left height=18>ADC12IE</td>
            <td vAlign=center align=middle width=184>中断使能寄存器</td>
        </tr>
        <tr bgColor=#ffffcc>
            <td vAlign=center align=left width=209 height=18>ADC12IV</td>
            <td vAlign=center align=middle width=184>中断向量寄存器</td>
        </tr>
        <tr bgColor=#ffffcc>
            <td vAlign=center align=middle>存储及其控制寄存器</td>
            <td vAlign=center align=left height=18>ADC12MCTL0～ADC12MCTL15</td>
            <td vAlign=center align=middle width=184>存储控制寄存器0～15</td>
        </tr>
        <tr bgColor=#ffffcc>
            <td vAlign=center align=left width=209 height=18>ADC12MEM0～ADC12MEM15</td>
            <td vAlign=center align=middle width=184>存储寄存器0～15</td>
        </tr>
    </tbody>
</table>
<p>1．<strong>ADC12CTL0</strong> 控制寄存器0，各位定义：</p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr bgColor=#0000ff>
            <td vAlign=center align=middle width=71>15～12</td>
            <td vAlign=center align=middle width=71>11～8</td>
            <td vAlign=center align=middle width=71>7</td>
            <td width=71>
            <p align=center>6</p>
            </td>
            <td width=71>
            <p align=center>5</p>
            </td>
            <td width=71>
            <p align=center>4</p>
            </td>
            <td width=71>
            <p align=center>3</p>
            </td>
            <td width=71>
            <p align=center>2</p>
            </td>
            <td width=71>
            <p align=center>1</p>
            </td>
            <td width=71>
            <p align=center>0</p>
            </td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle width=71>SHT1</td>
            <td vAlign=center align=middle width=71>SHT0</td>
            <td vAlign=center align=middle width=71>MSC</td>
            <td vAlign=center align=middle width=71>2.5V</td>
            <td vAlign=center align=middle width=71>REF<br>ON</td>
            <td vAlign=center align=middle width=71>ADC12<br>ON</td>
            <td vAlign=center align=middle width=71>ADC12<br>TOVIE</td>
            <td vAlign=center align=middle width=71>ADC12<br>TVIE</td>
            <td vAlign=center align=middle width=71>ENC</td>
            <td vAlign=center align=middle width=71>ADC12<br>SC</td>
        </tr>
    </tbody>
</table>
<p>ADC12SC——采样/转换控制位。在不同条件下，ADC12SC的含义如下所示：</p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle width=71 bgColor=#ffffff>
            <p>ENC=1<br>ISSH=0</p>
            </td>
            <td vAlign=center align=middle width=71 bgColor=#ffffff>SHP=1</td>
            <td vAlign=center width=204 bgColor=#ffffff>ADC12SC由0变为1启动A/D转换</td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center bgColor=#ffffff>A/D转换完成后ADC12SC自动复位</td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle bgColor=#ffffff>SHP=0</td>
            <td vAlign=center bgColor=#ffffff>ADC12SC保持高电平采样</td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center bgColor=#ffffff>ADC12SC复位时启动一次转换</td>
        </tr>
    </tbody>
</table>
<p>ENC——转换允许位。</p>
<blockquote>
<p>0：ADC12为初始状态，不能启动A/D转换；<br>1：首次转换由SAMPCON上升沿启动</p>
</blockquote>
<p>ADC12TVIE——转换时间溢出中断允许位（当前转换还没完成时，又发生一次采样请求，则会发生转换时间溢出）</p>
<blockquote>
<p>0：没发生转换时间溢出<br>1：发生转换时间溢出</p>
</blockquote>
<p>ADC12OVIE——溢出中断允许位（当ADC12MEMx中原有数据还没有读出，而又有新的转换结果数据要写入时，则发生溢出）</p>
<blockquote>
<p>0：没发生溢出<br>1：发生溢出</p>
</blockquote>
<p>ADC12ON——ADC12内核控制位</p>
<blockquote>
<p>0：关闭ADC12内核<br>1：打开ADC12内核</p>
</blockquote>
<p>REFON——参考电压控制位</p>
<blockquote>
<p>0：内部参考电压发生器关闭<br>1：内部参考电压发生器打开</p>
</blockquote>
<p>2.5V——内部参考电压的电压值选择位</p>
<blockquote>
<p>0：选择1.5V内部参考电压<br>1：选择2.5V内部参考电压</p>
</blockquote>
<p>MSC——多次采样转换位（CONSEQ&lt;&gt;0表示当前转换模式不是单通道单次转换）</p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr bgColor=#0000ff>
            <td width=71 bgColor=#666666>
            <p align=center>有效条件</p>
            </td>
            <td width=71 bgColor=#666666>
            <p align=center>MSC值</p>
            </td>
            <td width=499 bgColor=#666666>
            <p align=center>含义</p>
            </td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle bgColor=#ffffff>SHP=1<br>CONSEQ&lt;&gt;0</td>
            <td vAlign=center align=middle bgColor=#ffffff>0</td>
            <td vAlign=center align=left bgColor=#ffffff>每次转换需要SHI信号的上升沿触发采样定时器</td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle bgColor=#ffffff>1</td>
            <td vAlign=center align=left bgColor=#ffffff>仅首次转换由SHI信号的上升沿触发采样定时器，而后采样转换将在前一次转换完成后立即进行</td>
        </tr>
    </tbody>
</table>
<p>SHT1、SHT0——采样保持定时器1，采样保持定时器0</p>
<p>分别定义保存在转换结果寄存器ADC12MEM8～ADC12MEM15和ADC12MEM0～ADC12MEM7中的转换采样时序与采样时钟ADC12CLK的关系。采样周期是ADC12CLK周期乘4的整数倍，即：</p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr bgColor=#0000ff>
            <td vAlign=center align=middle width=40 bgColor=#666666>
            <p align=center>SHITx</p>
            </td>
            <td vAlign=center align=middle width=40 bgColor=#666666>
            <p align=center>0</p>
            </td>
            <td vAlign=center align=middle width=40 bgColor=#666666>
            <p align=center>1</p>
            </td>
            <td vAlign=center align=middle width=40 bgColor=#666666>2</td>
            <td vAlign=center align=middle width=40 bgColor=#666666>3</td>
            <td vAlign=center align=middle width=40 bgColor=#666666>4</td>
            <td vAlign=center align=middle width=40 bgColor=#666666>5</td>
            <td vAlign=center align=middle width=40 bgColor=#666666>6</td>
            <td vAlign=center align=middle width=40 bgColor=#666666>7</td>
            <td vAlign=center align=middle width=40 bgColor=#666666>8</td>
            <td vAlign=center align=middle width=40 bgColor=#666666>9</td>
            <td vAlign=center align=middle width=40 bgColor=#666666>10</td>
            <td vAlign=center align=middle width=40 bgColor=#666666>11</td>
            <td vAlign=center align=middle width=40 bgColor=#666666>12～15</td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>n</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>1</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>2</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>4</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>8</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>16</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>24</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>32</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>48</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>64</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>96</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>128</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>192</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>256</td>
        </tr>
    </tbody>
</table>
<p>2．<strong>ADC12CTL1</strong> 转换控制寄存器1（大多数3～15位，只有在ENC=0时才可被修改），各位定义：</p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr bgColor=#0000ff>
            <td vAlign=center align=middle width=71>15～12</td>
            <td vAlign=center align=middle width=71>11～10</td>
            <td width=71>
            <p align=center>9</p>
            </td>
            <td width=71>
            <p align=center>8</p>
            </td>
            <td width=71>
            <p align=center>7～5</p>
            </td>
            <td width=71>
            <p align=center>4、3</p>
            </td>
            <td width=71>
            <p align=center>2、1</p>
            </td>
            <td width=71>
            <p align=center>0</p>
            </td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle width=71>CSSTARTADD</td>
            <td vAlign=center align=middle width=71>SHS</td>
            <td vAlign=center align=middle width=71>SHP</td>
            <td vAlign=center align=middle width=71>ISSH</td>
            <td vAlign=center align=middle width=71>ADC12<br>DIV</td>
            <td vAlign=center align=middle width=71>ADC12<br>SSEL</td>
            <td vAlign=center align=middle width=71>CONSEQ</td>
            <td vAlign=center align=middle width=71>
            <p align=center>ADC12<br>BUSY</p>
            </td>
        </tr>
    </tbody>
</table>
<p>CSSTARTADD——转换存储器地址位。该4位所表示的二进制数0～15分别对应ADC12MEM0～15。可以定义单次转换地址或序列转换的首地址。</p>
<p>SHS——采样触发输入源选择位。</p>
<blockquote>
<p>0：ADC12SC<br>1：Timer_A.OUT1<br>2：Timer_B.OUT0<br>3：Timer_B.OUT1</p>
</blockquote>
<p>SHP——采样信号（SAMPCON）选择控制位。</p>
<blockquote>
<p>0：SAMPCON源自采样触发输入信号<br>1：SAMPCON源自采样定时器，由采样输入信号的上升沿触发采样定时器</p>
</blockquote>
<p>ISSH——采样输入信号方向控制位</p>
<blockquote>
<p>0：采样输入信号为同向输入<br>1：采样输入信号为反向输入</p>
</blockquote>
<p>ADC12DIV——ADC12时钟源分频因子选择位。分频因子为该3位二进制数加1</p>
<p>ADC12SSEL——ADC12内核时钟源选择</p>
<blockquote>
<p>0：ADC12内部时钟源——ADC12OSC<br>1：ACLK<br>2：MCLK<br>3：SMCLK</p>
</blockquote>
<p>CONSEQ——转换模式选择位</p>
<blockquote>
<p>0：单通道单次转换模式<br>1：序列通道单次转换模式<br>2：单通道多次转换模式<br>3：序列通道多次转换模式</p>
</blockquote>
<p>ADC12BUSY——ADC12忙标志（只用于单通道单次转换模式，在其它转换模式下，该位无效）</p>
<blockquote>
<p>0：表示没有活动的操作<br>1：表示ADC12正处于采样期间、转换期间或序列转换期间</p>
</blockquote>
<p><span><font color=#0000ff>3．<strong>ADC12MEM0～ADC12MEM15</strong> 转换存储寄存器</font></span></p>
<p>该组寄存器均为16位寄存器，用来存放A/D转换结果。中用其中低12位，高4位在读出时为0</p>
<p><span><font color=#0000ff>4．<strong>ADC12MCTLx</strong> 转换存储控制寄存器（所有位只有在ENC为低电平时可修改，在POR时各位被复位）</font></span></p>
<p>对于每个转换存储器有一个对应的转换存储器控制寄存器，所以在进行CSSTARTADD转换存储器地址位设置的同时，也确定了ADC12MCTLx。该寄存器各位含义如下：</p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr bgColor=#0000ff>
            <td vAlign=center align=middle width=71>7</td>
            <td vAlign=center align=middle width=77>6，5，4</td>
            <td width=103>
            <p align=center>3，2，1，0</p>
            </td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle width=71>EOS</td>
            <td vAlign=center align=middle width=77>SREF</td>
            <td vAlign=center align=middle width=103>INCH</td>
        </tr>
    </tbody>
</table>
<p>EOS——序列结束控制位</p>
<blockquote>
<p>0：序列没有结束<br>1：该序列中最后一次转换</p>
</blockquote>
<p>SREF——参考电压源选择位</p>
<blockquote>
<p>0：Vr＋＝AVcc，Vr－＝AVss<br>1：Vr＋＝VREF＋，Vr－＝AVss<br>2，3：Vr＋＝VEREF+，Vr－＝AVss<br>4：Vr＋＝AVcc，Vr－＝VREF-/VEREF-<br>5：Vr＋＝VREF+，Vr－＝VREF-/VEREF-<br>6，7：Vr＋＝VEREF+，Vr－＝VREF-/VEREF-</p>
</blockquote>
<p>INCH——选择模拟输入通道</p>
<blockquote>
<p>0～7：A0～A7<br>8：VeREF+<br>9：VREF-/VeREF-<br>10：片内温度传感器的输出<br>11～15：（AVCC-AVSS）/2</p>
</blockquote>
<p><span><font color=#0000ff>5．<strong>ADC12IFG</strong> 中断标志寄存器</font></span> 为16位，其中中断标志位ADC12IFG.x对应于转换存储寄存器ADC12MEMx。各位含义如下：</p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr bgColor=#0000ff>
            <td vAlign=center align=middle width=60>15</td>
            <td vAlign=center align=middle width=60>14</td>
            <td width=60>
            <p align=center>......</p>
            </td>
            <td align=middle width=60>1</td>
            <td align=middle width=60>0</td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle width=60>ADC12<br>IFG15</td>
            <td vAlign=center align=middle width=60>ADC12<br>IFG14</td>
            <td vAlign=center align=middle width=60>......</td>
            <td vAlign=center align=middle width=60>ADC12<br>IFG1</td>
            <td vAlign=center align=middle width=60>ADC12<br>IFG0</td>
        </tr>
    </tbody>
</table>
<p>ADC12IFG.x置位：转换结束，并且转换结果已经装入转换存储寄存器。<br>ADC12IFG.x复位：ADC12MEMx被访问。</p>
<p><span><font color=#0000ff>6．<strong>ADC12IE</strong> 中断使能寄存器</font></span> 为16位，对应于ADC12IFG寄存器。各位含义如下：</p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr bgColor=#0000ff>
            <td vAlign=center align=middle width=60>15</td>
            <td vAlign=center align=middle width=60>14</td>
            <td width=60>
            <p align=center>......</p>
            </td>
            <td align=middle width=60>1</td>
            <td align=middle width=60>0</td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle width=60>ADC12<br>IE.15</td>
            <td vAlign=center align=middle width=60>ADC12<br>IE.14</td>
            <td vAlign=center align=middle width=60>......</td>
            <td vAlign=center align=middle width=60>ADC12<br>IE.1</td>
            <td vAlign=center align=middle width=60>ADC12<br>IE.0</td>
        </tr>
    </tbody>
</table>
<p>ADC12IE.x=1：允许相应的中断标志位ADC12IFG.x在置位时发生的中断请求服务。<br>ADC12IE.x=0：禁止相应的中断标志位ADC12IFG.x在置位时发生的中断请求服务。</p>
<p><span><font color=#0000ff>7．<strong>ADC12IV</strong> 中断向量寄存器</font></span> </p>
<p>ADC12是一个多源中断：有18个中断标志（ADC12IFG.0～ADC12IFG.15与ADC12TOV，ADC12OV），但只有一个中断向量。所以需要设置这18个标志的优先级顺序，按照优先级顺序安排中断标志的响应，高优先级的请求可以中断正在服务的低优先级。如下表所示：</p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr bgColor=#0000ff>
            <td vAlign=center align=middle bgColor=#666666>
            <p align=center>ADC12中断标志ADC12IFG</p>
            </td>
            <td vAlign=center align=middle width=70 bgColor=#666666>ADC12TOV</td>
            <td vAlign=center align=middle width=70 bgColor=#666666>ADC12OV</td>
            <td vAlign=center align=middle width=70 bgColor=#666666>ADC12IV</td>
        </tr>
        <tr bgColor=#0000ff>
            <td vAlign=center align=middle width=40 bgColor=#666666>15</td>
            <td vAlign=center align=middle width=40 bgColor=#666666>14</td>
            <td vAlign=center align=middle width=40 bgColor=#666666>13</td>
            <td vAlign=center align=middle width=40 bgColor=#666666>12</td>
            <td vAlign=center align=middle width=40 bgColor=#666666>11</td>
            <td vAlign=center align=middle width=40 bgColor=#666666>10</td>
            <td vAlign=center align=middle width=40 bgColor=#666666>9</td>
            <td vAlign=center align=middle width=40 bgColor=#666666>8</td>
            <td vAlign=center align=middle width=40 bgColor=#666666>7</td>
            <td vAlign=center align=middle width=40 bgColor=#666666>6</td>
            <td vAlign=center align=middle width=40 bgColor=#666666>5</td>
            <td vAlign=center align=middle width=40 bgColor=#666666>4</td>
            <td vAlign=center align=middle width=40 bgColor=#666666>3</td>
            <td vAlign=center align=middle width=40 bgColor=#666666>2</td>
            <td vAlign=center align=middle width=40 bgColor=#666666>1</td>
            <td vAlign=center align=middle width=40 bgColor=#666666>0</td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=70 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=70 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=70 bgColor=#ffffff>0</td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>X</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>X</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>X</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>X</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>X</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>X</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>X</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>X</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>X</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>X</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>X</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>X</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>X</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>X</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>X</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>X</td>
            <td vAlign=center align=middle width=70 bgColor=#ffffff>X</td>
            <td vAlign=center align=middle width=70 bgColor=#ffffff>1</td>
            <td vAlign=center align=middle width=70 bgColor=#ffffff>2</td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle width=70 bgColor=#ffffff>1</td>
            <td vAlign=center align=middle width=70 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=70 bgColor=#ffffff>4</td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>1</td>
            <td vAlign=center align=middle width=70 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=70 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=70 bgColor=#ffffff>6</td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>X</td>
            <td vAlign=center align=middle bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=70 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=70 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=70 bgColor=#ffffff>8</td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>～</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>～</td>
            <td vAlign=center align=middle bgColor=#ffffff>～</td>
            <td vAlign=center align=middle bgColor=#ffffff>～</td>
            <td vAlign=center align=middle bgColor=#ffffff>～</td>
            <td vAlign=center align=middle bgColor=#ffffff>～</td>
            <td vAlign=center align=middle bgColor=#ffffff>～</td>
            <td vAlign=center align=middle bgColor=#ffffff>～</td>
            <td vAlign=center align=middle bgColor=#ffffff>～</td>
            <td vAlign=center align=middle bgColor=#ffffff>～</td>
            <td vAlign=center align=middle bgColor=#ffffff>～</td>
            <td vAlign=center align=middle bgColor=#ffffff>～</td>
            <td vAlign=center align=middle bgColor=#ffffff>～</td>
            <td vAlign=center align=middle bgColor=#ffffff>～</td>
            <td vAlign=center align=middle bgColor=#ffffff>～</td>
            <td vAlign=center align=middle bgColor=#ffffff>～</td>
            <td vAlign=center align=middle bgColor=#ffffff>～</td>
            <td vAlign=center align=middle bgColor=#ffffff>～</td>
            <td vAlign=center align=middle bgColor=#ffffff>～</td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>X</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>1</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=70 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=70 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=70 bgColor=#ffffff>34</td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>1</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=40 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=70 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=70 bgColor=#ffffff>0</td>
            <td vAlign=center align=middle width=70 bgColor=#ffffff>36</td>
        </tr>
    </tbody>
</table>
<p>各中断标志会产生一个0～36的偶数。</p>
<p>ADC12OV和ADC12TOV会在访问ADC12IV后自动复位。但在响应了ADC12IFG.x标志对应的中断服务之后，相应的标志不自动复位，用以保证能处理发生溢出的情况。</p>
</div>
<img src ="http://www.cppblog.com/coloerful/aggbug/85412.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/coloerful/" target="_blank">小猪</a> 2009-05-22 16:19 <a href="http://www.cppblog.com/coloerful/articles/85412.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MSP430单片机RTC操作－TimeA实现的实时时钟</title><link>http://www.cppblog.com/coloerful/articles/85411.html</link><dc:creator>小猪</dc:creator><author>小猪</author><pubDate>Fri, 22 May 2009 08:18:00 GMT</pubDate><guid>http://www.cppblog.com/coloerful/articles/85411.html</guid><wfw:comment>http://www.cppblog.com/coloerful/comments/85411.html</wfw:comment><comments>http://www.cppblog.com/coloerful/articles/85411.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/coloerful/comments/commentRss/85411.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/coloerful/services/trackbacks/85411.html</trackback:ping><description><![CDATA[<div style="FONT-SIZE: 14px; LINE-HEIGHT: 1.5em">
<p>//*******************************************************************************<br>// D13x Demo - 利用Timer_A及中断实现RTC，观察LED灯的闪烁频率<br>//<br>// 描述：利用Timer_A及中断实现RTC；通过 P1 异或 来取反 P1.5；<br>// 系统处于休眠状态LPM3，中断时唤醒执行P1.5切换<br>// ACLK= n/a, MCLK= SMCLK= default DCO ~ 800k<br>//<br>// MSP430F13x<br>// -------------------<br>// /|\| XIN|- <br>// | | | 32kHz<br>// --|RST XOUT|-<br>// | |<br>// | P1.5|--&gt;LED<br>//<br>// 时间：2007年10月<br>// <a onmousedown=javascript:event.cancelBubble=true; href="http://www.goodmcu.cn/" target=_blank><u><font color=#000000>www.goodmcu.cn</font></u></a><br>//<br>// 硬件电路：MSP430F135核心实验板-I型<br>// 硬件连接： <br>//<br>// 调试器：MSP430FET全系列JTAG仿真器<br>// 调试软件： IAR Embedded Workbench Version: 3.41A 编译<br>//******************************************************************************</p>
<p><span><font color=#0000ff>#include</font></span> &lt;msp430x13x.h&gt;</p>
<p><span><font color=#0000ff>void</font></span> main(<span><font color=#0000ff>void</font></span>)<br>{<br>WDTCTL = WDTPW + WDTHOLD; <font color=#990000><span>// 停止看门狗</span><br></font>TACTL = TASSEL0 + TACLR;<font color=#990000><span> // ACLK, 清 TAR</span><br></font>CCTL0 = CCIE; <font color=#990000><span>// CCR0 中断使能</span><br></font>CCR0 = 16384; <font color=#990000><span>// 设定中断间隔，32768Hz晶振，0.5s</span><br></font>P1DIR |= 0x20;<font color=#990000><span> // P1.5为输出口</span><br></font>TACTL |= MC0;<font color=#990000><span> // Timer_a 为增量计数模式</span><br></font>_EINT(); <font color=#990000><span>// 开中断</span><br><br></font>for (;;) <br>{<br>_BIS_SR(LPM3_bits);<font color=#990000><span> // 进入 LPM3</span><br></font>}<br>}</p>
<p><span><font color=#0000ff>#pragma</font></span> vector=TIMERA0_VECTOR <font color=#990000><span>//Timer_A中断函数</span><br></font>__interrupt <span><font color=#0000ff>void</font></span> TimerA_ISR()<br>{<br>P1OUT ^= 0x20;<font color=#990000><span> // 通过异或取反P1.5</span><br></font>}</p>
</div>
<img src ="http://www.cppblog.com/coloerful/aggbug/85411.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/coloerful/" target="_blank">小猪</a> 2009-05-22 16:18 <a href="http://www.cppblog.com/coloerful/articles/85411.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MSP430单片机控制IO口操作－LED灯闪烁</title><link>http://www.cppblog.com/coloerful/articles/85408.html</link><dc:creator>小猪</dc:creator><author>小猪</author><pubDate>Fri, 22 May 2009 08:17:00 GMT</pubDate><guid>http://www.cppblog.com/coloerful/articles/85408.html</guid><wfw:comment>http://www.cppblog.com/coloerful/comments/85408.html</wfw:comment><comments>http://www.cppblog.com/coloerful/articles/85408.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/coloerful/comments/commentRss/85408.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/coloerful/services/trackbacks/85408.html</trackback:ping><description><![CDATA[<div style="FONT-SIZE: 14px; LINE-HEIGHT: 1.5em">
<p><span><font color=#000066>//*******************************************************************************<br>// D13x Demo - 在上一节基础上改变系统时钟，观察LED灯的闪烁频率<br>//<br>// 描述：通过改变系统时钟，来改变闪烁频率；通过 P1 异或 来取反 P1.5；软件循环延时<br>// ACLK= n/a, MCLK= SMCLK= default DCO ~ 800k<br>//<br>// MSP430F13x<br>// -----------------<br>// /|\| XIN|- <br>// | | |<br>// --|RST XOUT|-<br>// | |<br>// | P1.5|--&gt;LED<br>//<br>// 时间：2007年10月<br>// <a onmousedown=javascript:event.cancelBubble=true; href="http://www.goodmcu.cn/" target=_blank><u><font color=#000000>www.goodmcu.cn</font></u></a><br>//<br>// 硬件电路：MSP430F135核心实验板-I型<br>// 硬件连接： <br>//<br>// 调试器：MSP430FET全系列JTAG仿真器<br>// 调试软件： IAR Embedded Workbench Version: 3.41A 编译<br>//******************************************************************************</font></span></p>
<p><span><font color=#0000ff>#include</font></span> &lt;msp430x13x.h&gt;</p>
<p>void main(void)<br>{<br>WDTCTL = WDTPW + WDTHOLD;<span><font color=#990000> // 停止看门狗</font></span></p>
<p>P1DIR |= 0x20; <font color=#990000><span>// 设P1.5为输出口</span><br><br></font>// BCSCTL1= 0x80; <font color=#990000><span>//分频电阻选择为0（此时闪烁频率较慢）</span><br></font>// BCSCTL1= 0x87;<font color=#990000><span> //分频电阻选择为7（此时闪烁频率较快）</span><br><br></font>// BCSCTL2= 0xc0;<font color=#990000><span> //选择外部32768低频晶振作为MCLK（此时闪烁频率极慢）</span><br></font>// BCSCTL2= 0x10; <font color=#990000><span>//选择外部8M高频晶振作为MCLK（此时闪烁频率较快）</span><br><br></font>for (;;) <br>{<br>unsigned int i;<br>i = 50000;<font color=#990000><span> // 循环</span><br></font>do i--; while (i);<br>P1OUT ^= 0x20; <font color=#990000><span>// 通过异或取反P1.5</span><br></font>}<br>}</p>
</div>
<img src ="http://www.cppblog.com/coloerful/aggbug/85408.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/coloerful/" target="_blank">小猪</a> 2009-05-22 16:17 <a href="http://www.cppblog.com/coloerful/articles/85408.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MSP430功能模块详解系列之——TimerA</title><link>http://www.cppblog.com/coloerful/articles/85409.html</link><dc:creator>小猪</dc:creator><author>小猪</author><pubDate>Fri, 22 May 2009 08:17:00 GMT</pubDate><guid>http://www.cppblog.com/coloerful/articles/85409.html</guid><wfw:comment>http://www.cppblog.com/coloerful/comments/85409.html</wfw:comment><comments>http://www.cppblog.com/coloerful/articles/85409.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/coloerful/comments/commentRss/85409.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/coloerful/services/trackbacks/85409.html</trackback:ping><description><![CDATA[<font color=#9900ff>定时器A是一个16位的定时/计数器。它有3个捕获/比较寄存器；能支持多个时序控制、多个捕获/比较功能和多个PWM输出；有广泛的中断功能，中断可由计数器溢出产生，也可以由捕获/比较寄存器产生。</font>
<p><strong>一、TimerA的4种工作模式</strong></p>
<p>1.停止模式</p>
<p>用于定时器暂停，并不发生复位，所有寄存器现行的内容在停止模式结束后都可用。当定时器暂停后重新计数时，计数器将从暂停时的值开始以暂停前的计数方向计数。</p>
<p>2.增计数模式</p>
<p>捕获/比较寄存器CCR0用作Timer_A增计数模式的周期寄存器。因为CCR0为16位寄存器，所以该模式适用于定时器周期小于65536的连续计数情况。计数器TAR可以增计数到CCR0的值，当计数值与CCR0的值相等（或定时器值大于CCR0的值）时，定时器复位并从0开始重新计数。</p>
<p>3.连续计数模式</p>
<p>在需要65536个时钟周期的定时应用场合常用连续计数模式。定时器从当前值计数到0FFFH后，又从0开始重新计数。</p>
<blockquote>
<p>连续计数模式的典型应用：<br>产生多个独立的时序信号。利用捕获比较寄存器捕获各种其它外部事件发生的定时器数据。<br>产生多个定时信号。</p>
</blockquote>
<p>4.增/减计数模式</p>
<p>需要生成对称波形的情况经常可以使用增/减计数模式。该模式下，定时器先增计数到CCR0的值，然后反向减计数到0。计数周期仍由CCR0定义，它是CCR0计数器值的2倍。</p>
<p><strong>二、TimerA寄存器说明</strong></p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr bgColor=#ff9900>
            <td width=114 height=20>
            <p align=center>寄存器</p>
            </td>
            <td width=214>
            <p align=center>寄存器说明</p>
            </td>
            <td width=114>
            <p align=center>类型</p>
            </td>
            <td width=114>
            <p align=center>地址</p>
            </td>
            <td width=114>
            <p align=center>初始状态</p>
            </td>
        </tr>
        <tr bgColor=#ffffcc>
            <td width=114 height=18>
            <p align=center>TACTL</p>
            </td>
            <td width=214>
            <p>Timer_A控制寄存器</p>
            </td>
            <td width=114>
            <p align=center>读写</p>
            </td>
            <td width=114>
            <p align=center>160H</p>
            </td>
            <td width=114>
            <p align=center>POR复位</p>
            </td>
        </tr>
        <tr bgColor=#ffffcc>
            <td width=114 height=18>
            <p align=center>TAR</p>
            </td>
            <td width=214>
            <p>Timer_A计数器</p>
            </td>
            <td width=114>
            <p align=center>读写</p>
            </td>
            <td width=114>
            <p align=center>170H</p>
            </td>
            <td width=114>
            <p align=center>POR复位</p>
            </td>
        </tr>
        <tr bgColor=#ffffcc>
            <td width=114 height=18>
            <p align=center>CCTL0</p>
            </td>
            <td width=214>
            <p>捕获/比较控制寄存器0</p>
            </td>
            <td width=114>
            <p align=center>读写</p>
            </td>
            <td width=114>
            <p align=center>162H</p>
            </td>
            <td width=114>
            <p align=center>POR复位</p>
            </td>
        </tr>
        <tr bgColor=#ffffcc>
            <td vAlign=center align=middle height=18>CCR0</td>
            <td vAlign=center align=left>捕获/比较寄存器0</td>
            <td width=114>
            <p align=center>读写</p>
            </td>
            <td vAlign=center align=middle>172H</td>
            <td width=114>
            <p align=center>POR复位</p>
            </td>
        </tr>
        <tr bgColor=#ffffcc>
            <td vAlign=center align=middle height=18>CCTL1</td>
            <td width=214>
            <p>捕获/比较控制寄存器1</p>
            </td>
            <td width=114>
            <p align=center>读写</p>
            </td>
            <td vAlign=center align=middle>164H</td>
            <td width=114>
            <p align=center>POR复位</p>
            </td>
        </tr>
        <tr bgColor=#ffffcc>
            <td vAlign=center align=middle height=18>CCR1</td>
            <td vAlign=center align=left>捕获/比较寄存器1</td>
            <td width=114>
            <p align=center>读写</p>
            </td>
            <td vAlign=center align=middle>174H</td>
            <td width=114>
            <p align=center>POR复位</p>
            </td>
        </tr>
        <tr bgColor=#ffffcc>
            <td vAlign=center align=middle height=18>CCTL2</td>
            <td width=214>
            <p>捕获/比较控制寄存器2</p>
            </td>
            <td width=114>
            <p align=center>读写</p>
            </td>
            <td vAlign=center align=middle>166H</td>
            <td width=114>
            <p align=center>POR复位</p>
            </td>
        </tr>
        <tr bgColor=#ffffcc>
            <td vAlign=center align=middle height=18>CCR2</td>
            <td vAlign=center align=left>捕获/比较寄存器2</td>
            <td width=114>
            <p align=center>读写</p>
            </td>
            <td vAlign=center align=middle>176H</td>
            <td width=114>
            <p align=center>POR复位</p>
            </td>
        </tr>
        <tr bgColor=#ffffcc>
            <td vAlign=center align=middle height=18>TAIV</td>
            <td vAlign=center align=left>中断向量寄存器</td>
            <td width=114>
            <p align=center>读写</p>
            </td>
            <td vAlign=center align=middle>12EH</td>
            <td width=114>
            <p align=center>POR复位</p>
            </td>
        </tr>
    </tbody>
</table>
<p>1．<strong>TACTL</strong> 控制寄存器，各位定义：</p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr bgColor=#0000ff>
            <td width=71>
            <p align=center>15-10</p>
            </td>
            <td vAlign=center align=middle width=71>9</td>
            <td vAlign=center align=middle width=71>8</td>
            <td vAlign=center align=middle width=71>7</td>
            <td width=71>
            <p align=center>6</p>
            </td>
            <td width=71>
            <p align=center>5</p>
            </td>
            <td width=71>
            <p align=center>4</p>
            </td>
            <td width=71>
            <p align=center>3</p>
            </td>
            <td width=71>
            <p align=center>2</p>
            </td>
            <td width=71>
            <p align=center>1</p>
            </td>
            <td width=71>
            <p align=center>0</p>
            </td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle width=71>
            <p align=center>未用</p>
            </td>
            <td vAlign=center align=middle width=71>SSEL1</td>
            <td vAlign=center align=middle width=71>SSEL0</td>
            <td vAlign=center align=middle width=71>ID1</td>
            <td vAlign=center align=middle width=71>ID0</td>
            <td vAlign=center align=middle width=71>MC1</td>
            <td vAlign=center align=middle width=71>MC0</td>
            <td vAlign=center align=middle width=71>未用</td>
            <td vAlign=center align=middle width=71>CLR</td>
            <td vAlign=center align=middle width=71>TAIE</td>
            <td vAlign=center align=middle width=71>TAIFG</td>
        </tr>
    </tbody>
</table>
<p>SSEL1、SSEL0选择进入定时器分频器的时钟源，</p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr bgColor=#0000ff>
            <td width=71 bgColor=#666666>
            <p align=center>SSEL1</p>
            </td>
            <td width=71 bgColor=#666666>
            <p align=center>SSEL0</p>
            </td>
            <td width=71 bgColor=#666666>
            <p align=center>输入时钟源</p>
            </td>
            <td width=71 bgColor=#666666>
            <p align=center>说明</p>
            </td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle bgColor=#ffffff>0</td>
            <td vAlign=center align=middle bgColor=#ffffff>0</td>
            <td vAlign=center align=middle bgColor=#ffffff>TACLK</td>
            <td vAlign=center bgColor=#ffffff>用特定的外部引脚信号</td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle bgColor=#ffffff>0</td>
            <td vAlign=center align=middle bgColor=#ffffff>1</td>
            <td vAlign=center align=middle bgColor=#ffffff>ACLK</td>
            <td vAlign=center bgColor=#ffffff>辅助时钟</td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle bgColor=#ffffff>1</td>
            <td vAlign=center align=middle bgColor=#ffffff>0</td>
            <td vAlign=center align=middle bgColor=#ffffff>MCLK</td>
            <td vAlign=center bgColor=#ffffff>系统时钟</td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle bgColor=#ffffff>1</td>
            <td vAlign=center align=middle bgColor=#ffffff>1</td>
            <td vAlign=center align=middle bgColor=#ffffff>INCLK</td>
            <td vAlign=center bgColor=#ffffff>外部输入时钟</td>
        </tr>
    </tbody>
</table>
<p>ID1、ID0输入分频系数</p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr bgColor=#0000ff>
            <td width=71 bgColor=#666666>
            <p align=center>ID1</p>
            </td>
            <td width=71 bgColor=#666666>
            <p align=center>ID0</p>
            </td>
            <td width=71 bgColor=#666666>
            <p align=center>分频系数</p>
            </td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle bgColor=#ffffff>0</td>
            <td vAlign=center align=middle bgColor=#ffffff>0</td>
            <td vAlign=center align=middle bgColor=#ffffff>不分频</td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle bgColor=#ffffff>0</td>
            <td vAlign=center align=middle bgColor=#ffffff>1</td>
            <td vAlign=center align=middle bgColor=#ffffff>1/2分频</td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle bgColor=#ffffff>1</td>
            <td vAlign=center align=middle bgColor=#ffffff>0</td>
            <td vAlign=center align=middle bgColor=#ffffff>1/4分频</td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle bgColor=#ffffff>1</td>
            <td vAlign=center align=middle bgColor=#ffffff>1</td>
            <td vAlign=center align=middle bgColor=#ffffff>1/8分频</td>
        </tr>
    </tbody>
</table>
<p>MC1、MC0计数模式控制位</p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr bgColor=#0000ff>
            <td width=71 bgColor=#666666>
            <p align=center>MC1</p>
            </td>
            <td width=71 bgColor=#666666>
            <p align=center>MC0</p>
            </td>
            <td width=71 bgColor=#666666>
            <p align=center>模式</p>
            </td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle bgColor=#ffffff>0</td>
            <td vAlign=center align=middle bgColor=#ffffff>0</td>
            <td vAlign=center align=middle bgColor=#ffffff>停止模式</td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle bgColor=#ffffff>0</td>
            <td vAlign=center align=middle bgColor=#ffffff>1</td>
            <td vAlign=center align=middle bgColor=#ffffff>增计数模式</td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle bgColor=#ffffff>1</td>
            <td vAlign=center align=middle bgColor=#ffffff>0</td>
            <td vAlign=center align=middle bgColor=#ffffff>减计数模式</td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle bgColor=#ffffff>1</td>
            <td vAlign=center align=middle bgColor=#ffffff>1</td>
            <td vAlign=center align=middle bgColor=#ffffff>增/减计数模式</td>
        </tr>
    </tbody>
</table>
<p>CLR——定时器清除。当该位为1时，定时器复位。</p>
<p>TAIE——定时器中断允许位。0：禁止定时器溢出中断；1：允许定时器溢出中断。</p>
<p>TAIFG——定时器溢出标志位。</p>
<blockquote>
<p>增计数模式：当定时器由CCR0计数到0时，TAIFG置位；<br>连续计数模式：当定时器由0FFFFH计数到0时，TAIFG置位；<br>增/减计数模式：当定时器由CCR0减计数到0时，TAIFG置位。</p>
</blockquote>
<p><span><font color=#0000ff>2．<strong>TAR</strong> 16位计数器。</font></span></p>
<p>3．<strong>CCTLx</strong> 捕捉/比较控制寄存器，各位定义：</p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr bgColor=#0000ff>
            <td width=83>
            <p align=center>15 14</p>
            </td>
            <td vAlign=center align=middle width=71>13 12</td>
            <td vAlign=center align=middle width=71>11</td>
            <td vAlign=center align=middle width=71>10</td>
            <td vAlign=center align=middle width=30>9</td>
            <td width=71>
            <p align=center>8</p>
            </td>
            <td width=71>
            <p align=center>7 6 5</p>
            </td>
            <td width=71>
            <p align=center>4</p>
            </td>
            <td width=71>
            <p align=center>3</p>
            </td>
            <td width=71>
            <p align=center>2</p>
            </td>
            <td width=71>
            <p align=center>1</p>
            </td>
            <td width=71>
            <p align=center>0</p>
            </td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle width=83>
            <p align=center>CAPTMOD1~0</p>
            </td>
            <td vAlign=center align=middle width=71>CCIS1~0</td>
            <td vAlign=center align=middle width=71>SCS</td>
            <td vAlign=center align=middle width=71>SCCIx</td>
            <td vAlign=center align=middle width=30>&nbsp;</td>
            <td vAlign=center align=middle width=71>
            <p align=center>CAP</p>
            </td>
            <td vAlign=center align=middle width=71>
            <p align=center>OUTMODx</p>
            </td>
            <td vAlign=center align=middle width=71>
            <p align=center>CCIEx</p>
            </td>
            <td vAlign=center align=middle width=71>
            <p align=center>CCIx</p>
            </td>
            <td vAlign=center align=middle width=71>
            <p align=center>OUT</p>
            </td>
            <td vAlign=center align=middle width=71>
            <p align=center>COV</p>
            </td>
            <td vAlign=center align=middle width=71>
            <p align=center>CCIFGx</p>
            </td>
        </tr>
    </tbody>
</table>
<p>CAPTMOD1~0——选择捕获模式</p>
<blockquote>
<p>00：禁止捕获模式<br>01：上升沿捕获<br>10：下降沿捕获<br>11：上升沿与下降沿都捕获</p>
</blockquote>
<p>CCIS1~0——捕获事件输入源</p>
<blockquote>
<p>00：选择CCIxA<br>01：选择CCIxB<br>10：选择GND<br>11：选择Vcc</p>
</blockquote>
<p>SCS——选择捕获信号与定时器时钟同步、异步关系</p>
<blockquote>
<p>0：异步捕获<br>1：同步捕获（实际中经常使用同步模式，捕获总是有效的）</p>
</blockquote>
<p>SCCIx——比较相等信号EQUx将选中的捕获/比较输入信号CCIx（CCIxA，CCIxB，Vcc和GND）进行锁存，然后可由SCCIx读出。</p>
<p>CAP——选择捕获模式还是比较模式。</p>
<blockquote>
<p>0：比较模式<br>1：捕获模式</p>
</blockquote>
<p>OUTMODx——选择输出模式</p>
<blockquote>
<p>000：输出<br>001：置位<br>010：PWM翻转/复位<br>011：PWM置位/复位<br>100：翻转<br>101：复位<br>110：PWM翻转/置位<br>111：PWM复位/置位</p>
</blockquote>
<p>CCIEx——捕获/比较模块中断允许位</p>
<blockquote>
<p>0：禁止中断<br>1：允许中断</p>
</blockquote>
<p>CCIx——捕获/比较模块的输入信号</p>
<blockquote>
<p>捕获模式：由CCIS0和CCIS1选择的输入信号可通过该位读出<br>比较模式：CCIx复位</p>
</blockquote>
<p>OUT——输出信号（如果OUTMODx选择输出模式0，则该位对应于输入状态）</p>
<blockquote>
<p>0：输出低电平<br>1：输出高电平</p>
</blockquote>
<p>COV——捕获溢出标志</p>
<blockquote>
<p>0：没有捕获溢出<br>1：发生捕获溢出<br>当CAP=0时，选择比较模式。捕获信号发生复位。没有使COV置位的捕获事件<br>当CAP=1时，选择捕获模式。如果捕获寄存器的值被读出前再次发生捕获事件，则COV置位。程序检测COV来判断原值读出前是否又发生捕获事件。读捕获寄存器时不会使溢出标志复位，须用软件复位。</p>
</blockquote>
<p>CCIFGx——捕获比较中断标志</p>
<blockquote>
<p>捕获模式：寄存器CCRx捕获了定时器TAR值时置位<br>比较模式：定时器TAR值等于寄存器CCRx值时置位</p>
</blockquote>
<p><span><font color=#0000ff>4．<strong>CCRx</strong> 捕捉/比较寄存器：</font></span>可读可写</p>
<blockquote>
<p>在捕获模式，当满足捕获条件，硬件自动将计数器TAR数据写入该寄存器。<br>如果测量某窄脉冲（高电平）的脉冲长度，可定义上升沿和下降沿都捕获。在上升沿时，捕获一个定时器数据，这个数据在捕获寄存器中读出；再等待下降沿到来，在下降沿时又捕获一个定时器数据；那么两次捕获的定时器数据差就是窄脉冲的高电平宽度。<br>其中CCR0经常用作周期寄存器，其它CCRx相同。</p>
</blockquote>
<p><span><font color=#0000ff>5．<strong>TAIV</strong> 中断向量寄存器：</font></span></p>
<p>Timer_A模块使用两个中断向量。一个单独分配给捕获/比较寄存器CCR0；另一个作为共用中断向量用于定时器和其它的捕获/比较寄存器。</p>
<p>捕获/比较寄存器CCR0中断向量具有最高的优先级。因为CCR0能用于定义增计数和增/减计数模式的周期。因此，它需要最快速的服务。CCIFG0在被中断服务时能自动复位。</p>
<p>CCR1~CCRx和定时器共用另一个中断向量，属于多源中断，对应的中断标志CCIFG1~CCIFGx和TAIFG1在读中断向量字TAIV后，自动复位。如果不访问TAIV寄存器，则不能自动复位，须用软件清除。</p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr bgColor=#0000ff>
            <td width=71>
            <p align=center>15～5</p>
            </td>
            <td vAlign=center align=middle width=71>4～ 1</td>
            <td vAlign=center align=middle width=71>0</td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle width=71>
            <p align=center>0～0</p>
            </td>
            <td vAlign=center align=middle width=71>中断向量</td>
            <td vAlign=center align=middle width=71>0</td>
        </tr>
    </tbody>
</table>
<br>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr bgColor=#0000ff>
            <td width=71 bgColor=#666666>
            <p align=center>中断优先级</p>
            </td>
            <td width=100 bgColor=#666666>
            <p align=center>中断源</p>
            </td>
            <td width=71 bgColor=#666666>
            <p align=center>缩写</p>
            </td>
            <td width=80 bgColor=#666666>
            <p align=center>TAIV的内容</p>
            </td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=top align=middle bgColor=#ffffff>最高</td>
            <td vAlign=center align=middle width=100 bgColor=#ffffff>捕获/比较器1</td>
            <td vAlign=center align=middle bgColor=#ffffff>CCIFG1</td>
            <td vAlign=center align=middle width=80 bgColor=#ffffff>2</td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle width=100 bgColor=#ffffff>捕获/比较器2</td>
            <td vAlign=center align=middle bgColor=#ffffff>CCIFG2</td>
            <td vAlign=center align=middle width=80 bgColor=#ffffff>4</td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle width=100 bgColor=#ffffff>......</td>
            <td vAlign=center align=middle bgColor=#ffffff>&nbsp;</td>
            <td vAlign=center align=middle width=80 bgColor=#ffffff>&nbsp;</td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle width=100 bgColor=#ffffff>捕获/比较器x</td>
            <td vAlign=center align=middle bgColor=#ffffff>CCIFGx</td>
            <td vAlign=center align=middle width=80 bgColor=#ffffff>&nbsp;</td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=top align=middle bgColor=#ffffff>最低</td>
            <td vAlign=center align=middle width=100 bgColor=#ffffff>定时器溢出</td>
            <td vAlign=center align=middle bgColor=#ffffff>TAIFG1</td>
            <td vAlign=center align=middle width=80 bgColor=#ffffff>10</td>
        </tr>
        <tr bgColor=#66ccff>
            <td vAlign=center align=middle width=100 bgColor=#ffffff>没有中断将挂起</td>
            <td vAlign=center align=middle bgColor=#ffffff>&nbsp;</td>
        </tr>
    </tbody>
</table>
<img src ="http://www.cppblog.com/coloerful/aggbug/85409.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/coloerful/" target="_blank">小猪</a> 2009-05-22 16:17 <a href="http://www.cppblog.com/coloerful/articles/85409.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MSP430单片机低功耗控制与系统工作模式详解</title><link>http://www.cppblog.com/coloerful/articles/85407.html</link><dc:creator>小猪</dc:creator><author>小猪</author><pubDate>Fri, 22 May 2009 08:16:00 GMT</pubDate><guid>http://www.cppblog.com/coloerful/articles/85407.html</guid><wfw:comment>http://www.cppblog.com/coloerful/comments/85407.html</wfw:comment><comments>http://www.cppblog.com/coloerful/articles/85407.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/coloerful/comments/commentRss/85407.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/coloerful/services/trackbacks/85407.html</trackback:ping><description><![CDATA[CPU内状态寄存器SR中的<strong>SCG1、SCG2、OscOff</strong>和<strong>CPUOff</strong>位是重要的低功耗控制位。只要任意中断被响应，上述控制位就被压入堆栈保存，中断处理之后，又可以恢复先前的工作方式。在中断处理子程序执行期间，通过间接访问堆栈数据，可以操作这些位；这样允许程序在中断返回（RETI）后，以另一种功耗方式继续运行。各控制位作用如下：
<p>SCG1：当SCG1复位时，使能SMCLK；SCG1置位则禁止SMCLK。</p>
<p>SCG0：当SCG0复位时，直流发生器被激活，只有SCG0被置位且DCOCLK信号没有用于MCLK或SMCLK，直流发生器才能被禁止。</p>
<p>OscOff：当OscOff复位时，LFXT晶体振荡器激活，只有当OscOff被置位且不用于MCLK或SMCLK时，LFXT晶体振荡器才能被禁止。</p>
<p>CPUOff：当CPUOff复位时，用于CPU的时钟信号MCLK被激活，当CPUOff置位时，MCLK停止。</p>
<p>控制位<span><strong>SCG1、SCG2、OscOff</strong>和<strong>CPUOff</strong></span>可由软件配置成6种不同的工作模式：1种活动模式和5种低功耗模式。如下表所示：</p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr bgColor=#ff9900>
            <td width=114 height=20>
            <p align=center>工作模式</p>
            </td>
            <td width=144>
            <p align=center>控制位</p>
            </td>
            <td width=291>
            <p align=center>CPU状态、振荡器及时钟</p>
            </td>
        </tr>
        <tr bgColor=#ffffcc>
            <td vAlign=center align=middle width=114 height=18>
            <p align=center>活动模式<br>（AM）</p>
            </td>
            <td vAlign=center align=middle width=144>SCG1=0<br>SCG0=0<br>OscOff=0<br>CPUOff=0</td>
            <td width=291>CPU处于活动状态<br>MCLK活动<br>SMCLK活动<br>ACLK活动</td>
        </tr>
        <tr bgColor=#ffffcc>
            <td vAlign=center align=middle width=114 height=18>低功耗模式0<br>（LPM0）</td>
            <td vAlign=center align=middle width=144>SCG1=0<br>SCG0=0<br>OscOff=0<br>CPUOff=1</td>
            <td width=291><font color=#ff0000><span>CPU处于禁止状态<br>MCLK被禁止</span><br></font>SMCLK活动<br>ACLK活动</td>
        </tr>
        <tr bgColor=#ffffcc>
            <td vAlign=center align=middle width=114 height=18>低功耗模式1<br>（LPM1）</td>
            <td vAlign=center align=middle width=144>SCG1=0<br>SCG0=1<br>OscOff=0<br>CPUOff=1</td>
            <td width=291><font color=#ff0000><span>CPU处于禁止状态</span><br></font>如果DCO未用作MCLK或SMCKL，则直流发生器被禁止，否则仍保持活动<br><font color=#ff0000><span>MCLK被禁止</span><br></font>SMCLK活动<br>ACLK活动</td>
        </tr>
        <tr bgColor=#ffffcc>
            <td vAlign=center align=middle height=18>低功耗模式2<br>（LPM2）</td>
            <td vAlign=center align=middle>SCG1=1<br>SCG0=0<br>OscOff=0<br>CPUOff=1</td>
            <td width=291><font color=#ff0000><span>CPU处于禁止状态</span><br></font>如果DCO未用作MCLK或SMCKL，自动被禁止<br><font color=#ff0000><span>MCLK被禁止<br>SMCLK被禁止</span><br></font>ACLK活动</td>
        </tr>
        <tr bgColor=#ffffcc>
            <td vAlign=center align=middle height=18>低功耗模式3<br>（LPM3）</td>
            <td vAlign=center align=middle width=144>SCG1=1<br>SCG0=1<br>OscOff=0<br>CPUOff=1</td>
            <td width=291><font color=#ff0000><span>CPU处于禁止状态<br>DCO被禁止，直流发生器被禁止<br>MCLK被禁止<br>SMCLK被禁止</span><br></font>ACLK活动</td>
        </tr>
        <tr bgColor=#ffffcc>
            <td vAlign=center align=middle height=18>低功耗模式4<br>（LPM4）</td>
            <td vAlign=center align=middle>SCG1=X<br>SCG0=X<br>OscOff=1<br>CPUOff=1</td>
            <td width=291>
            <p>CPU处于禁止状态<br>DCO被禁止，直流发生器被禁止<br>所有振荡器停止工作<br>MCLK被禁止<br>SMCLK被禁止<br>ACLK被禁止</p>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.cppblog.com/coloerful/aggbug/85407.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/coloerful/" target="_blank">小猪</a> 2009-05-22 16:16 <a href="http://www.cppblog.com/coloerful/articles/85407.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MSP430功能模块详解系列之——系统时钟</title><link>http://www.cppblog.com/coloerful/articles/85406.html</link><dc:creator>小猪</dc:creator><author>小猪</author><pubDate>Fri, 22 May 2009 08:15:00 GMT</pubDate><guid>http://www.cppblog.com/coloerful/articles/85406.html</guid><wfw:comment>http://www.cppblog.com/coloerful/comments/85406.html</wfw:comment><comments>http://www.cppblog.com/coloerful/articles/85406.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/coloerful/comments/commentRss/85406.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/coloerful/services/trackbacks/85406.html</trackback:ping><description><![CDATA[<div style="FONT-SIZE: 14px; LINE-HEIGHT: 1.5em">
<p>一、时钟源种类</p>
<p><span><font color=#9900ff>LFXT1CLK低频时钟源</font></span>——MSP430每一种器件都有</p>
<p><span><font color=#9900ff>XT2CLK高频时钟源</font></span>——存在于X13X、X14X、X15X、X16X、X43X、X44X等</p>
<p>DCOCLK数字控制RC振荡器</p>
<p>二、时钟源说明</p>
<p><span><font color=#9900ff>ACLK辅助时钟</font></span>：ACLK是LFXT1CLK（低频时钟源）信号经过1、2、4、8分频得到的。ACLK可由软件选为各个外围模块的时钟信号，一般用于低速外设。</p>
<p><span><font color=#9900ff>MCLK系统主时钟</font></span>：MCLK可由软件选择来自LFXT1CLK（低频时钟源）、XT2CLK（高频时钟源）、DCOCLK（数字控制RC振荡器）三者之一，然后经过1、2、4、8分频得到。MCLK主要用于CPU和系统。</p>
<p><span><font color=#9900ff>SMCLK子系统时钟</font></span>：可由软件选择来自LFXT1CLK（低频时钟源）和DCOCLK（数字控制RC振荡器），或者、XT2CLK（高频时钟源）和DCOCLK（数字控制RC振荡器）具体由器件决定，，然后经过1、2、4、8分频得到。SMCLK主要用于高速外围模块。</p>
<p>三、系统时钟寄存器说明</p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr bgColor=#ff9900>
            <td width=114 height=20>
            <p align=center>寄存器</p>
            </td>
            <td width=214>
            <p align=center>寄存器说明</p>
            </td>
            <td width=114>
            <p align=center>类型</p>
            </td>
            <td width=114>
            <p align=center>地址</p>
            </td>
            <td width=114>
            <p align=center>初始状态</p>
            </td>
        </tr>
        <tr bgColor=#ffffcc>
            <td width=114 height=18>
            <p align=center>DCOCTL</p>
            </td>
            <td width=214>
            <p>DCO控制寄存器</p>
            </td>
            <td width=114>
            <p align=center>读写</p>
            </td>
            <td width=114>
            <p align=center>56H</p>
            </td>
            <td width=114>
            <p align=center>60H</p>
            </td>
        </tr>
        <tr bgColor=#ffffcc>
            <td width=114 height=18>
            <p align=center>BCSCTL1</p>
            </td>
            <td width=214>
            <p>基本时钟系统控制寄存器1</p>
            </td>
            <td width=114>
            <p align=center>读写</p>
            </td>
            <td width=114>
            <p align=center>57H</p>
            </td>
            <td width=114>
            <p align=center>84H</p>
            </td>
        </tr>
        <tr bgColor=#ffffcc>
            <td width=114 height=18>
            <p align=center>BCSCTL2</p>
            </td>
            <td width=214>
            <p>基本时钟系统控制寄存器2</p>
            </td>
            <td width=114>
            <p align=center>读写</p>
            </td>
            <td width=114>
            <p align=center>58H</p>
            </td>
            <td width=114>
            <p align=center>复位</p>
            </td>
        </tr>
    </tbody>
</table>
<p>1．DCOCTLDCO控制寄存器，各位定义：</p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr bgColor=#0000ff>
            <td width=71>
            <p align=center>7</p>
            </td>
            <td width=71>
            <p align=center>6</p>
            </td>
            <td width=71>
            <p align=center>5</p>
            </td>
            <td width=71>
            <p align=center>4</p>
            </td>
            <td width=71>
            <p align=center>3</p>
            </td>
            <td width=71>
            <p align=center>2</p>
            </td>
            <td width=71>
            <p align=center>1</p>
            </td>
            <td width=71>
            <p align=center>0</p>
            </td>
        </tr>
        <tr bgColor=#66ccff>
            <td width=71>
            <p align=center>DCO.2</p>
            </td>
            <td width=71>
            <p align=center>CCO.1</p>
            </td>
            <td width=71>
            <p align=center>DCO.0</p>
            </td>
            <td width=71>
            <p align=center>MOD.4</p>
            </td>
            <td width=71>
            <p align=center>MOD.3</p>
            </td>
            <td width=71>
            <p align=center>MOD.2</p>
            </td>
            <td width=71>
            <p align=center>MOD.1</p>
            </td>
            <td width=71>
            <p align=center>MOD.0</p>
            </td>
        </tr>
    </tbody>
</table>
<p>DCO.0——DCO.2定义8种频率之一，可分段调节DCOCLK频率，相邻两种频率相差10%。而频率由注入直流发生器的电流定义。</p>
<p>MOD.O——MOD.4定义在32个DCO周期中插入的fdco+l周期个数，而在余下的DCO周期中为fDco周期，控制切换DCO和DCO+1选择的两种频率。如果DCO常数为7，表示已经选择最高颂率，此时不能利用MOD.O-MOD.4进行频率调整。</p>
<p>2．BCSCTL1基本时钟系统控制寄存器1，各位定义：</p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr bgColor=#0000ff>
            <td width=71>
            <p align=center>7</p>
            </td>
            <td width=71>
            <p align=center>6</p>
            </td>
            <td width=71>
            <p align=center>5</p>
            </td>
            <td width=71>
            <p align=center>4</p>
            </td>
            <td width=71>
            <p align=center>3</p>
            </td>
            <td width=71>
            <p align=center>2</p>
            </td>
            <td width=71>
            <p align=center>1</p>
            </td>
            <td width=71>
            <p align=center>0</p>
            </td>
        </tr>
        <tr bgColor=#66ccff>
            <td width=71>
            <p align=center>XT2OFF</p>
            </td>
            <td width=71>
            <p align=center>XTS</p>
            </td>
            <td width=71>
            <p align=center>DIVA.1</p>
            </td>
            <td width=71>
            <p align=center>DIVA.0</p>
            </td>
            <td width=71>
            <p align=center>XT5V</p>
            </td>
            <td width=71>
            <p align=center>Rse1.2</p>
            </td>
            <td width=71>
            <p align=center>Rse1.1</p>
            </td>
            <td width=71>
            <p align=center>Rse1.0</p>
            </td>
        </tr>
    </tbody>
</table>
<p>XT2OFF控制 XT2 振荡器的开启与关闭。</p>
<p>XT2OFF=O，XT2振荡器开启；</p>
<p>XT2OFF=1，XT2振疡器关闭(默认XT2关闭)。</p>
<p>XTS控制 LFXTl 工作模武，选择需结合实际晶体振荡器连接情况。</p>
<p>XTS=O，LFXTl工作在低频模式 (默认低频模式)；</p>
<p>XTS=1，LFXTl工作在高频模式(必须连接有相应高频时钟源)。</p>
<p>DIVA.O，DIVA.l控制ACLK分频。</p>
<p>0不分频（默认不分频）；</p>
<p>12分频；</p>
<p>24分频；</p>
<p>38分频。</p>
<p>XT5V此位设置为0。</p>
<p>Rse1.O，Rsel.l，Rse1.2三位控制某个内部电阻以决定标称频率。</p>
<p>Rse1=0，选择最低的标称频率；</p>
<p>......</p>
<p>Rse1=7，选择最低的标称频率；</p>
<p>3．BCSCTL2基本时钟系统控制寄存器2，各位定义：</p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr bgColor=#0000ff>
            <td width=71>
            <p align=center>7</p>
            </td>
            <td width=71>
            <p align=center>6</p>
            </td>
            <td width=71>
            <p align=center>5</p>
            </td>
            <td width=71>
            <p align=center>4</p>
            </td>
            <td width=71>
            <p align=center>3</p>
            </td>
            <td width=71>
            <p align=center>2</p>
            </td>
            <td width=71>
            <p align=center>1</p>
            </td>
            <td width=71>
            <p align=center>0</p>
            </td>
        </tr>
        <tr bgColor=#66ccff>
            <td width=71>
            <p align=center>SELM.1</p>
            </td>
            <td width=71>
            <p align=center>SELM.0</p>
            </td>
            <td width=71>
            <p align=center>DIVM.1</p>
            </td>
            <td width=71>
            <p align=center>DIVM.0</p>
            </td>
            <td width=71>
            <p align=center>SELS</p>
            </td>
            <td width=71>
            <p align=center>DIVS.1</p>
            </td>
            <td width=71>
            <p align=center>DIVS.0</p>
            </td>
            <td width=71>
            <p align=center>DCOR</p>
            </td>
        </tr>
    </tbody>
</table>
<p>SELM.O，SELM.l选择 MCLK 时钟源。</p>
<p>0时钟源为 DCOLCK（默认时钟源）；</p>
<p>1时钟源为DCOCLK ;</p>
<p>2时钟源为LFXTlCLK(对于MSP430Fll/l2X)，</p>
<p>时钟源为XT2CLK(对于MSP430F13/14/15/16X)；</p>
<p>3时钟源为 LFXT1CLK 。</p>
<p>DIVM.O，DlVM.l选择 MCLK 分频。</p>
<p>01分频（默认MCLK=DCOCLK）；</p>
<p>12分频；</p>
<p>24分频；</p>
<p>38分频。</p>
<p>SELS选择 SMCLK 时钟源 。</p>
<p>0时钟源为 DCOCLK（默认肘钟源)；</p>
<p>1时钟源为 LFXTlCLK（对于MSP430Fll/l2X )，</p>
<p>时钟源为 XT2CLK(对于MSP430F13/14/15/16X)。</p>
<p>DIVS.O，DIVS.l选择 SMCLK 分频。</p>
<p>01分频（默认 SMCLK=MCLK)；</p>
<p>12分频；</p>
<p>24分频；</p>
<p>38分频。</p>
<p>DCOR选择 DCO 电阻。</p>
<p>0内部电阻；</p>
<p>1外部电阻。</p>
<p>Puc信号之后，DCOCLK被自动选作MCLK时钟信号，根据需要MCLK的时钟源可以另外设置为 LFXTl或者XT2。设置顺序如下：</p>
<p>（1）复位OscOff；</p>
<p>（2）清除OFIFG；</p>
<p>（3）延时等待至少50us；</p>
<p>（4）再次检查OFlFG，如果仍然置位，则重复（3）、（4）步骤，直到OFIFG=0止。</p>
</div>
<img src ="http://www.cppblog.com/coloerful/aggbug/85406.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/coloerful/" target="_blank">小猪</a> 2009-05-22 16:15 <a href="http://www.cppblog.com/coloerful/articles/85406.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>