文档库 最新最全的文档下载
当前位置:文档库 › MSP430单片机深入学习笔记

MSP430单片机深入学习笔记

MSP430单片机深入学习笔记
MSP430单片机深入学习笔记

复位

1.POR信号只在两种情况下产生:

微处理器上电。

RST/NMI管脚被设置为复位功能,在此管脚上产生低电平时系统复位。

2.PUC信号产生的条件为:

POR信号产生。

看门狗有效时,看门狗定时器溢出。

写看门狗定时器安全健值出现错误。

写FLASH存储器安全键值出现错误。

3.POR信号的出现会导致系统复位,并产生PUC信号。而PUC信号不会引起POR信号的产生。系统复位后(POR之后)的状态为:

RST/MIN管脚功能被设置为复位功能。

所有I/O管脚被设置为输入。

外围模块被初始化,其寄存器值为相关手册上注明的默认值。

状态寄存器(SR)复位。

看门狗激活,进入工作模式。

程序计数器(PC)载入0xFFFE(0xFFFE为复位中断向量)处的地址,微处理器从此地址开始执行程序。

4.典型的复位电路有以下3种:

(1)由于MSP430具有上电复位功能,

因此,上电后只要保持RST/NMI(设置

为复位功能)为高电平即可。通

常的做法为,在RST/NMI管脚接100k?

的上拉电阻,如图1-5(a)所示。

(2)除了在RST/NMI管脚接100k?的

上拉电阻外,还可以再接0.1μF的电

容,电容的另一端接地,可以使复位

更加可靠。如图1-5(b)所示。

(3)由于MSP430具有极低的功耗,如

果系统断电后立即上电,则系统中电

容所存储的电荷来不及释放,此时系

统电压不会下降到最低复位电压以下,

因而MSP430不会产生上电复位,同时

RST/NMI管脚上也没有足够低的电平

使MSP430复位。这样,系统断电后立

即上电,MSP430并没有被复位。为了

解决这个问题,可增加一个二极管,

这样断电后储存在复位电容中的电荷

就可以通过二极管释放,从而加速电

容的放电。二极管的型号可取1N4008。

如图1-5(c)所示。

系统时钟

振荡器:

1.DCO 数控RC振荡器,位于芯片内部。不用时可以关闭

2.LFXT1 可以接低频振荡器,典型的如32.768kHz的钟表振荡器,此时振荡器不需要接负载电容。也可以接450kHz~8MHz的标准晶体振荡器,此时振荡器需要接负载电容。

3.XT2 接450kHz~8MHz的标准晶体振荡器,此时振荡器要接负载电容,不用时可

以关闭。

通常低频振荡器用来降低能量消耗,例如使用电池的系统。高频振荡器用来对事件作出快速反应或者供CPU进行大量运算。DCO的振荡频率会受周围环境温度和MSP430工作电压的影响而产生变化,并且同一型号的芯片所产生的频率也不相同。DCO的调节功能可以改善它的性能。

DCO的调节分为以下3步:

(1)选择BCSCTL1.RSELx确定时钟的标称频率。

(2)选择DCOCTL.DCOx在标称频率基础上分段粗调。

(3)选择DCOCTL.MODx的值进行细调。

MSP430定义了3种时钟信号,分别为:

(1)MCLK 系统主时钟。除了CPU运算使用此时钟信号外,外围模块也可以使用。MCLK可以选择任何一个振荡器产生的时钟信号并进行1、2、4、8分频作为其信号源。

(2)SMCLK 系统子时钟。外围模块可以使用,并且在使用之前可以通过各模块的寄存

器实现分频。SMCLK可以选择任何一个振荡器产生的时钟信号并进行1、2、4、8分频作为其信号源。

(3)ACLK 辅助时钟。外围模块可以使用,并且在使用之前可以通过各模块的寄存器

实现分频。ACLK只能由LFXT1进行1、2、4、8分频作为其信号源。

PUC结束时,MCLK和SMCLK的信号源为DCO,DCO的振荡频率约为800kHz(详见

相关手册)。ACLK的信号源为LFXT1。

例3.4 设置MCLK 的时钟8 分频。下列4 条代码均可实现该功能。

BCSCTL2 |= 0x30; //人肉记忆+数脚趾头,原始社会才干的事!

BCSCTL2 |= BIT5+BIT4; //需记忆DIVMx在BSCTL中的位置,不推荐!BCSCTL2 |= DIVM1+DIVM0; //由两项组成,看起来不直观,凑合!

BCSCTL2 |= DIVM_3; //简洁明了,力荐!

在使用按位或操作符“|=”配置寄存器时,要注意宏定义之间的“叠加”效应。重新用宏定义配置寄存器前,一定要先清零。(此外,极少数寄存器上电复位后默认值不是0,要特别注意。)

例3.5 先设定MCLK 分频为2,一段时间后改为4 分频。

错误的代码:

BCSCTL2 |= DIVM_1; //这确实是2 分频

delay( );

BCSCTL2 |= DIVM_2; //因为|=赋值的原因,这实际上是8 分频,请自行面壁想清楚

正确的代码:

BCSCTL2 |= DIVM_1; // 2 分频

delay( );

BCSCTL2 &= ~( DIVM_0+ DIVM_1+ DIVM_2+ DIVM_3); // 预先把全部相关控制位置0 BCSCTL2 |= DIVM_2; //此时再用|=设置才不出错

相关控制位全置0 还可写成:

BCSCTL2 &= ~DIVM_3 或BCSCTL2 &=~(DIVM0+DIVM1)

低功耗模式

上电和外部复位信号产生POR信号,POR信号会引起PUC信号。看门狗激活时,定时器溢出和安全键值错误也会引起PUC信号。PUC信号结束后,MSP430进入AM状态。在AM 状态程序可以选择进入任何一种低功耗模式,然后在适当的时机,由外围模块的中断使CPU 退出低功耗模式。

LPM0(主力休眠,先头部队工作)和LPM3(主力和先头部队都休眠,仅留警戒哨兵)最常用,LPM4 则当关机使用。

中断

MSP430可以在没有事件发生时进入低功耗状态,事件发生时,通过中断唤醒CPU,事件处理完毕后,CPU再次进入低功耗状态。

MSP430的中断分为:系统复位、不可屏蔽中断、可屏蔽中断。系统复位前面已经作过介绍,其中断向量为0xFFFE。不可屏蔽中断向量为0xFFFC,产生不可屏蔽中断的原因如下:(1)RST/NMI管脚功能选择为NMI时,RST/NMI管脚上产生一个上升沿或者下降沿(具

体是上升沿还是下降沿由寄存器WDTCTL中的NMIES位决定)。NMI中断可以用WDTCTL

中的NMIIE位屏蔽。需要注意的是,当RST/NMI管脚功能选择为NMI时,不要让RST/NMI 管脚上的信号一直保持在低电平。原因是如果发生了PUC,则RST/NMI管脚的功能被初始化为复位功能,而此时它上面的信号一直保持低电平,使CPU一直处于复位状态,不能正常工作。

(2)振荡器失效中断允许时,振荡器失效。

(3)FLASH存储器的非法访问中断允许时,对FLASH存储器进行了非法访问。

不可屏蔽中断可由各自的中断允许位禁止或打开。当一个不可屏蔽中断请求被接受时,相应的中断允许位自动复位。退出中断程序时,如果希望中断继续有效,则必须用软件将相应中断允许位置位。

中断使用的步骤:

1)配置子模块中断相关的寄存器,比如外部中断的上升沿触发还是下降沿触发,定时

中断的计数方式和定时值。

2)依模板写中断服务子函数框架,添加中断后要干什么的代码(事件处理函数)。

3)使能子模块的中断,使能总中断。

4)一旦中断发生,CPU 停下主函数的活,并标记位置。进入中断服务子函数里干活,完事后回到主函数标记位置处继续干活。

我们来看MSP430 的中断子函数模板,加粗斜体部分是允许用户“创意”的地方,其他

则是固定格式。其中,PORT1_VECTOR 是中断向量表中的地址宏定义,直接决定了这个中

断子函数是响应哪个中断源。PORT1_ISR 是中断子函数名,这个最好按标准写法取名字,便

于理解。中断向量表和标准的中断子函数名可见头文件

在MSP430 单片机中,中断资源是比较“宝贵的”,很多中断都是共用一个“中断向量入口”。比如上面写的是P1 口的中断服务子函数,当P1 的8 个IO 口任何一个检测到中断

事件(上升沿或下降沿),就会进入中断子函数。我们需要在子函数里,查询中断标志位

#pragma vector = PORT1_VECTOR

__interrupt void PORT1_ISR(void)

{

//中断后想干的事写这里;

}

LaunchPad 口袋实验平台—MSP-EXP430G2 篇

50

(特殊功能寄存器),判断一下到底是哪个IO 口“出事”了。

& 按位与, | 按位或, ^ 按位异或

AND (位与&) OR ( 位或| ) XOR ( 位异或^ )

1 & 1 = 1 1 | 1 = 1 1 ^ 1 = 0

1 & 0 = 0 1 | 0 = 1 1 ^ 0 = 1

0 & 1 = 0 0 | 1 = 1 0 ^ 1 = 1

0 & 0 = 0 0 | 0 = 0 0 ^ 0 = 0

C语言提供的位运算符列表:

运算符含义描述

& 按位与如果两个相应的二进制位都为1,则该位的结果值为1,否则为0

| 按位或两个相应的二进制位中只要有一个为1,该位的结果值为1

^ 按位异或若参加运算的两个二进制位值相同则为0,否则为1

~ 取反~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0

<< 左移用来将一个数的各二进制位全部左移N位,右补0

>> 右移将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0

写位操作:

在对某字节使用“=”进行写操作时,所有位的值都将被改变。如果先将原字节读出来,再使用“按位”操作符对原字节进行赋值,则可“等效”实现对单个位的写操作。

将P1.0 置1、P1.1 置0、P1.2 取反,不影响其他位。

P1OUT |= 0x01; P1OUT |= BIT0; //“按位或”,相当于置1

P1OUT &= ~0x02; P1OUT &= ~BIT1; //取反后再“按位与”,相当于置0 P1OUT ^= 0x04; P1OUT ^= BIT2;//“按位异或”,相当于取反

也可以用加号对多位同时操作。

将P1.0、P1.1、P1.2 均置1,不影响其他位。

P1OUT |= BIT0+BIT1+BIT2; //可用加法进行批量设置

读位操作:

读位操作主要是通过if 语句判断的方法得到的。同样,这种变通的办法不意味着

MSP430 单片机可以对位进行读取,这种方法同样需要对1 个字节的8 位都操作。

Eg:将P2.0 的输出设置成与P1.1 输入相反,读取P1.0 状态到变量Temp。unsigned char Temp=0;

if((P1IN&BIT1)==0) P2OUT |= BIT0; //读P1.1 写P2.0

else P2OUT &= ~BIT0;

if(P1IN&BIT0) Temp=1; //读P1.0 写Temp

else Temp=0;

寄存器配置小结

1)一般情况下,均使用宏定义去配置寄存器,这样做省事省力,可读性好。

2)深刻理解“|=”对寄存器赋值的效果,先清0 后赋值,避免误操作。

3)提前查阅头文件,尽量使用组合宏定义配置寄存器。

4)对于由变量决定的寄存器配置,应使用移位后的变量直接赋值。

文件管理

什么是文件管理?就是不要在main.c 中写下所有的代码,而应该将大的程序划分为小的

c 文件。

1) 1 个main.c 写下全部代码是最容易导致“亲妈都认不出来”的情况。

2)我们从一个初学者开始,陆陆续续会调试各种片内和片外的设备,会积累各种各样

的代码。不管是敝帚自珍还是独孤求败,重复写同样的代码总是令人身心疲惫的事

情。

3)初学者最容易想到的是事后用复制粘贴的方法利用原代码,这是非常效率低下而且

容易出错的。

4)正确的做法是,当我们写代码的时候,先就考虑这段代码有没有可能在别的地方能

用到,然后分开独立写c 文件,这样就可以有效准确利用原有代码。

如何有效进行文件管理呢?

1)按功能模块划分c 文件,比如片内的时钟、定时器、UART 收发器、Flash 控制器、ADC 模数转换器、片外的12864 液晶、矩阵键盘,可以分别设为System_clock.c、

Timer_A.c、UART.c、Flash.c、ADC10.c、LCD.c、Key.c。

2)将隶属于各模块的代码函数都放进各自的c 文件中。

3)建立与c 文件同名的h 头文件,在h 文件中声明可能被调用到的函数。

4)在main.c 中包含h 头文件,就可以使用外部c 文件中的函数了。

例3.8 建一个Motor.c 文件,在里面编写一个启动电机函数Motor_ON( )和一个停止电机

函数Motor_OFF( ),并编写头文件。

Motor.c 文件

void Motor_ON( )

{

P1OUT |=BIT0;

}

void Motor_OFF ()

{

P1OUT &=~BIT0;

}

Motor.h 文件

extern Motor_ON( );

extern Motor_OFF ( );

有些编译器支持直接在h 头文件中写程序代码。无论编译器是否支持,都不建议这样

做,分开写c 文件和h 头文件可以让复杂程序的代码更易读,我们后面会再谈这个问题。

系统时钟

void BCSplus_init(void)

{

BCSCTL2 = SELM_0 + DIVM_0 + DIVS_0; // 复位默认值,此行代码可省略

if (CALBC1_1MHZ != 0xFF) {

DCOCTL = 0x00;

BCSCTL1 = CALBC1_1MHZ; /* Set DCO to 1MHz */

DCOCTL = CALDCO_1MHZ;

}

BCSCTL1 |= XT2OFF + DIVA_0; // 复位默认值,此行代码可省略

BCSCTL3 = XT2S_0 + LFXT1S_2 + XCAP_1; // 设为内部低频振荡器

}

直接配置System Clock

前面我们学习了如何用Grace 配置时钟,其实对MSPG2553 单片机来说,MCLK 和SMCLK 基本就是使用DCO(没外部高频晶振可用)。有32.768kHz 手表晶振,则ACLK 选32.768Hz,没有就选12kHz 的VLO。所以,直接代码配置时钟也很方便,直接调用DCO 出厂校验参数即可。

例 4.1 将MSP430G2553 的时钟设置为MCLK 和SMCLK 均为8MHz,ACLK 设为32.768kHz

DCOCTL = CALDCO_8MHZ; // 调取出厂校准后存储在Flash中的参数BCSCTL1 = CALBC1_8MHZ; // BCSCTL3参数默认不用设

例4.2 将MSP430G2553 的时钟设置为MCLK 和SMCLK 均为16MHz,ACLK 设为内部低频

振荡器。

DCOCTL = CALDCO_16MHZ; // 调取出厂校准后存储在Flash中的参数

BCSCTL1 = CALBC1_16MHZ;

BCSCTL3 |= LFXT1S1; // 设为内部低频振荡器

例4.3 将MSP430G2553 的时钟设置为MCLK 和SMCLK 均为16MHz,ACLK 设为使用32.768kHz 晶振且4 分频。

DCOCTL = CALDCO_16MHZ; // 调取出厂校准后存储在Flash中的参数BCSCTL1 = CALBC1_16MHZ;

BCSCTL1 |= DIVA_2; // 补充修改BCSCTL 的DIVAx 位,4 分频

例4.4 将MSP430G2553 的时钟设置为MCLK4MHz,SMCLK 为2MHz,ACLK 设为使用32.768kHz 晶振。

DCOCTL = CALDCO_8MHZ; // 先设为8MHz

BCSCTL1 = CALBC1_8MHZ;

BCSCTL2 |= DIVM_1+DIVS_2; // 再对MCLK2 分频,SMCLK4 分频

中断服务函数

PORT1_ISR()属于中断服务子函数,由“vector = PORT1_VECTOR”中断向量调用,而与函数名“PORT1_ISR ”本身无关。虽然无论取什么函数名称都行,但是建议按照MSP430G2553.h 头文件中定义的中断服务子函数名称来命名,可在头文件中,查看“Interrupt Vectors (offset from 0xFFE0) ”部分。

程序进入中断服务子函数并不是万事大吉,一般需要考虑以下几件事情:

1)由于中断向量远比中断源少得多,所以大部分中断事件都是“共用”中断服务子函数。往往具体中断事件还需查询中断标志位来进一步确认。

2)有些时候,不仅要查询标志位,而且还要复杂的运算和判断才能确认中断事件,这就需要使用专门的“事件检测函数”来完成。

3)使用“事件检测函数”可以将代码“移出”中断服务子函数“集中放置”便于阅读,因为中断服务子函数内编写大段代码是编程“大忌”,非常容易造成“连亲妈都

认不出来”。此外“事件检测函数”也增强了代码的可移植性,因为事件检测的判

据往往可以重复使用。

4)一旦中断事件被“确认”,事件应对代码宜专门编写“事件处理函数”,而不应在

中断子函数中直接写代码。“事件处理函数”可以在“事件检测函数”中调用。

5)最后,弄清楚是否需要手动清除中断标志位。很多中断标志位必须手动清除,否则程序将会出现各种“无名肿痛”。

/******************************************************************************

* 名称:PORT1_ISR()

* 功能:响应P1口的外部中断服务

* 入口参数:无

* 出口参数:无

* 说明:P1.0~P1.8共用了PORT1中断,所以在PORT1_ISR()中必须查询标志位P1IFG才能知道具体是哪个IO引发了外部中断。P1IFG必须手动清除,否则将持续引发PORT1中断。* 范例:无

******************************************************************************/ #pragma vector = PORT1_VECTOR

__interrupt void PORT1_ISR(void)

{

//-----启用Port1事件检测函数-----

P1_IODect(); //检测通过,则会调用事件处理函数

P1IFG=0; //退出中断前必须手动清除IO口中断标志

}

事件检测函数

P1_IODect()就是上文提到的“中断事件检测函数”,专门用于判断是PORT1 的哪个IO 发生了中断(按键被按下)。这里我们同样先不去考虑具体代码原理是什么,总之这个函数正确实现了按键IO 的判断,并且调用了相应按键的“事件处理函数”。

/****************************************************************************** * 名称:P1_IODect()

* 功能:判断具体引发中断的IO,并调用相应IO的中断事件处理函数

* 入口参数:无

* 出口参数:无

* 说明:该函数兼容所有8个IO的检测,请根据实际输入IO激活“检测代码”。

* 本例中,仅有P1.3被用作输入IO,所以其他7个IO的“检测代码”没有被“激活”。* 范例:无

******************************************************************************/ void P1_IODect()

{

unsigned int Push_Key=0;

//-----排除输出IO的干扰后,锁定唯一被触发的中断标志位-----

Push_Key=P1IFG&(~P1DIR);

//-----延时一段时间,避开机械抖动区域-----

__delay_cycles(10000); //消抖延时

//----判断按键状态是否与延时前一致-

----if((P1IN&Push_Key)==0) //如果该次按键确实有效

{

//----判断具体哪个IO被按下,调用该IO的事件处理函数-----

switch(Push_Key)

{

// case BIT0: P10_Onclick(); break;

// case BIT1: P11_Onclick(); break;

// case BIT2: P12_Onclick(); break;

case BIT3: P13_Onclick(); break;

// cas e BIT4: P14_Onclick(); break;

// case BIT5: P15_Onclick(); break;

// case BIT6: P16_Onclick(); break;

// case BIT7: P17_Onclick(); break;

default: break; //任何情况下均加上default

}

}

}

事件处理函数

“事件处理函数”对于读懂程序代码非常重要,这意味着我们知道了一旦发生了某某事件,将要干什么。所有的“事件处理函数”加上main()函数,基本上就能读出程序的意图和思想了。在程序移植中,“事件处理函数”的内容往往是需要改变的。例如,P1.3 按键的“事件检测函数”可能无需改变,检测的判据方法是一样的。

神奇的GPIO

内部电阻在IO 处于输出状态是无法固定为上拉的(输出高电平时为上拉,输出低电平时为下拉)。

使用捕获模块的一般步骤:

1)把主定时器设为连续计数模式,这样就有最长的“刻度尺”可用。当“尺子”长度还不够的时候,可以设定尺子每溢出1 次,中断服务给全局变量Count+1,这样就能测量任意时间长度了。

2)把CCRx 模块对应的寄存器CAP 设为1,捕获模式。

3)选择CCRx 模块的捕获源寄存器CCISx,也就是具体单片机哪个管脚作为捕获输入口CCIx。

4)设定CMx 寄存器,决定是上升沿捕获还是下降沿,还是上升下降都捕获。

5)设定SCS 寄存器,决定是同步捕获还是异步捕获。咋一看起来,异步捕获响应要快,但是捕获后的有效数据是来自定时器的计数值,响应再快也超不过时钟的分辨率。所以一般均设为同步捕获,这样可以减小电路毛刺,避免竞争冒险。

6)标志位COV 为1 代表上次TACCRx 的数据没被取走,而又新来数据覆盖了TACCRx 的异常情况。前面提到的“爱什么时候读什么时候去读TACCRx”说的有些夸张,不能等下次捕获来临还不读取上次的捕获数据。

模式0:通过CCRx 模块各自的OUT 控制位控制TAx 输出,像操作普通IO 口那样。

一般用于程序预设定TAx 的电平。

模式 1 和模式5:用于生成单稳态脉冲。

模式 3 和模式7:用于产生PWM 信号。PWM 的频率由CCR0 的TACCR0 决定,PWM 的占空比由TACCRx 与TACCR0 的比值决定。

模式 2 和模式6:用于产生带死区时间控制的互补PWM。

定时器A使用要点:

1. 时钟源及变化方式例TACTL = TASSEL_2 + MC_2其TASSEL定义了时钟源MC_x定义了CCR 计数器样变化(连续、循环等)

注:仅此句会让定时器A开始计数同时刻观察下TAR看看否变化

2.否允许断方式

CCTL0 = CCIE; (定时器A断允许)

CCR0 =+50000;(从当前CCR0时刻+50000下次断挂号时刻)

MSP430的中断优先级、打开关闭、中断嵌套

优先级顺序从高到低为:

PORT2_VECTOR (1 * 2u)

PORT1_VECTOR (4 * 2u)

TIMERA1_VECTOR (5 * 2u)

TIMERA0_VECTOR (6 * 2u)

ADC_VECTOR (7 * 2u)

USART0TX_VECTOR (8 * 2u)

USART0RX_VECTOR (9 * 2u)

WDT_VECTOR (10 * 2u)

COMPARATORA_VECTOR (11 * 2u)

TIMERB1_VECTOR (12 * 2u)

TIMERB0_VECTOR (13 * 2u)

NMI_VECTOR (14 * 2u)

RESET_VECTOR (15 * 2u)

当同时有多个中断来的时候才有优先级的考虑(优先级顺序可查看向量表)

有中断响应以后自动关闭总中断,这个时候即使来更高优先级的中断都不会响应

要中断嵌套的话,就必须在中断中打开总中断

msp430的指令中,DINT和EINT分别指关和开所有中断,也就是包涵P1IE、P2IE、WDTIE、TAIE、TBIE、ADC12IE、串口中断允许的所有中断允许位为“0”和为“1”。

实现中断嵌套需要注意以下几点:

1)430默认的是关闭中断嵌套的,除非你在一个中断程序中再次开总中断EINT;

2)当进入中断程序时,只要不在中断中再次开中断,则总中断是关闭的,此时来中断不管是比当前中断的优先级高还是低都不执行;

3)若在中断A中开了总中断,则可以响应后来的中断B(不管B的优先级比A高还是低),B执行完再继续执行A。注意:进入中断B后总中断同样也会关闭,如果B中断程序执行时需响应中断C,则此时也要开总中断,若不需响应中断,则不用开中断,B执行完后跳出中断程序进入A程序时,总中断会自动打开;

4)若在中断中开了总中断,后来的中断同时有多个,则会按优先级来执行,即中断优先级只有在多个中断同时到来时才起做用!中断服务不执行抢先原则。

5)对于单源中断,只要响应中断,系统硬件自动清中断标志位,对于TA/TB定时器的比较/捕获中断,只要访问TAIV/TBIV,标志位倍被自动清除;

对于多源中断要手动清标志位,比如P1/P2口中断,要手工清除相应的标志,如果在这种中断用"EINT();"开中断,而在打开中断前没有清标志,就会有相同的中断不断嵌入,而导致堆栈溢出引起复位,所以在这类中断中必须先清标志再打开中断开关.

MSP430单片机题目答案整理(大部分)

第一章 1. MCU(微控制器单元)与MPU(微处理器单元)的区别 MCU集成了片上外围器件,而MPU不带外围器件,是高度集成的通用结构的处理器。是去除了集成外设的MCU。 2. MSC430单片机的不同系列的差别 MSP430系列单片机具有超低功耗、处理能力强大、片内外设丰富、系统工作稳定、开发环境便捷等显着优势,和其他类型单片机相比具有更好的使用效果、更广泛的应用前景。 3. MSC430单片机主要特点 1.超低功耗 2. 强大的处理能力 3. 高性能模拟技术及丰富的片上外围模块 4. 系统工作稳定 5. 方便高效的开发环境 4. MSC430单片机选型依据 选择最容易实现设计目标且性能价格比高的机型。 在研制任务重,时间紧的情况下,首先选择熟悉的机型。 欲选的机型在市场上要有稳定充足的货源。 第二章 1. 从计算机存储器体系结构上看,MSP430单片机属于什么结构 冯·诺依曼结构,是一种程序存储器和数据存储器合并在一起的存储器体系结构。 2. RISC与CISC体系结构的主要特征是什么MSP430单片机属于哪种结构 CISC----是复杂指令系统计算机Complex Instruction Set Computer的缩写,MCS-51单片机属于CISC。具有8位数据总线、7种寻址模式,111条指令。 RISC----是精简指令系统计算机Reduced Instruction Set Computer的缩写,MSP430单片机属于RISC。具有16位数据总线、7种寻址模式,27条指令。 3. 对MSP430单片机的内存访问时,可以有哪几种方式读写字数据有什么具体要求 字,字节,常字。字访问地址必须是偶数地址单元。 4. MSP430单片机的中断向量表位于什么位置其中存放的是什么内容 中断向量表:存放中断向量的存储空间。430单片机中断向量表地址空间:32字节,映射到存储器空间的最高端区域 5. MSP430单片机的指令系统物理指令和仿真指令各有多少条。 27种物理指令-内核指令和24种仿真指令 6. MSP430单片机的指令系统有哪些寻址方式各举一例说明。 有7种寻址方式:寄存器寻址,变址寻址,符号寻址,绝对寻址, 间接寻址,间接增量寻址,立即数寻址 7. MSP430单片机的CPU中有多少个寄存器其中专用寄存器有哪几个 4个专用寄存器(R0、R1、R2、R3)和12个通用寄存器(R4~R15) R0:程序计数器(PC) R1:堆栈指针(SP)—总是指向当前栈顶 R2:状态寄存器(SR)只用到16位中的低9位 R2/R3:常数发生器(CG1/CG2) 8. 按要求写出指令或指令序列。 9. 写出给定指令或指令序列的执行结果。 10.汇编语言程序的分析与理解。

MSP430f5438初学者笔记

一、简介 1.1CPU: 16-bit RISC 除program-flow指令外所有指令都在寄存器和7种源操作数寻址方式及4种目的操作数合作下执行 16个寄存器,register-to-register指令执行时间是一个CPU时钟 R0 程序计数器寄存器20-bit R1 堆栈指针20-bit R2 状态寄存器16-bit R3 不变的产生器 R4~R15 通用寄存器 1.2指令集: 51指令3格式7中寻址方式附加指令 1.3操作模式 6个可软件设置的LOW-POWER模式一个中断事件可以唤醒5个模式中的任何一个,响应请求,并从中断程序中返回原模式 Mode ACTIVE DISABLED Active mode (AM) 所有时钟ACTIVE Low-power mode 0 (LPM0) ACLK SMCLK FLL CPU MCLK LPM1 ACLK SMCLK CPU FLL MCLK LPM2 DCO发生器ACLK CPU MCLK FLL DCOCLK LPM3 ACLK CPU MCLK FLL DCOCLK DC发生器LPM4 晶振关闭完整数据保留 LPM5 内部调节器关闭无数据保留通过RST和IO唤醒 1.4中断矢量 地址:FFFF~FF80H 1.5 SFR 处于最低地址空间可以进行字访问和字节访问 1.6存储 256K闪存空间64K程序存储器16KRAM 512BBSL程序装载器用于编程存储器串连接口 1.7外围 时钟:支持统一的时钟系统UCS包括: 32K手表晶振(XT1 低频模式) 内部低频振荡器VLO 内部平衡低频振荡器REFO 内部集成数字控制器DCO 高频晶振(XT1高频模式or XT2) FLL锁频环连同一个数字调节器使得DCO构成一个多倍可编程的手表晶振 时钟信号:ACLK 32K手表晶振、高频晶振、VLO、REFO、DCO MCLK CPU用,来源同ACLK

51单片机学习笔记(六)_串口中断通信+定时器2串口中断

51单片机学习笔记(六)_串口中断通信+定时器2串口中 断 51 单片机默认使用定时器1 作为串口通信的波特率发生器、定时器1 中断 通信,串口与定时器1 冲突,在遇到定时器不够用的时候可以用定时器2 #include void DelayMs(unsigned int i);void SerialInit();void SendByte(unsigned char sbyte);void SendString(unsigned char *pstr);void main(void){SerialInit();while(1); //注:必需要无限循环}/*//单片机时钟周期: 11.0592MHz 以时钟1 作为波特率发生器void SerialInit(){TMOD=0x20; // 设置T1 工作方式为方式2TH1=0xfd; //给定时器高位装初值TL1=0xfd; //给定时 器低位装初值TR1=1; //开定时器//以上是设置波特率SM0=0; //设置串口通 讯方式为方式1SM1=1; REN=1; //串口是否接收数据的开关EA=1; //总中断 打开,采用查询法时不用打开中断ES=1; //串口中断开关,采用查询法时不用打开 中断}*///单片机时钟周期:11.0592MHz 以时钟T2 作为波特率发生器void SerialInit(){PCON &= 0x7F; //波特率不倍速SMOD=0SCON = 0x50; //方式1,8 位数据,可变波特率,接收允许T2CON = 0x34; RCAP2H = 0xFF; RCAP2L = 0xDC; TH2 = 0xFF; TL2 = 0xDC;EA=1; //总中断打开,采 用查询法时不用打开中断ES = 1; //串口中断开关,采用查询法时不用 打开中断}//串口中断函数:void SerialPortInte(void) interrupt 4 //采用串口中断法 收发数据{unsigned char rbyte;if(RI){ //RI=1,判定为串口接收到了数据,RI 要清零,RI=0;rbyte=SBUF; if(rbyte==0x0A){ SendString(“换行”);}else if(rbyte==0x0D){SendString(“回车”);}else{SendByte(rbyte);}}}//串口发送一个字节:void SendByte(unsigned char sbyte){ SBUF=sbyte; //发送数据while(!TI); //等待发送完成TI=0; //清零发送标志位}//串口发送一个字符串:void

IAR for msp430 学习笔记

IAR for MSP430软件安装使用详解 1、下载安装包,注册机 2、运行安装包,进入安装页面,一直Next,直到出现提示输入注册码的页面; 3、若是Win7系统,以管理员身份运行注册机,选择For MSP430 v5.50 然后Get ID

4、将License number粘贴至安装程序的License#一栏,;

5、将注册机中的License key 粘贴至 Next 6、选择安装全部功能;

7、选择安装路径; 8、等待软件自动安装完成,点击Finish 完成安装; 附录A 关于驱动的安装 下载的IAR for MSP430 软件自带的有针对各种操作系统的驱动程序,都存在安装文件中,只需要找到和自己使用操作系统对应的驱动进行安装就行了。 以本机为例,为Win7 64位操作系统,进入软件安装目录 选择图中阴影文件夹,打开看到驱动程序,双击运行即可自动安装。

附录B 从下面几个方面介绍EW430 的基本使用: 一、创建一个工程,并在工程目录下创建C 语言项目 二、设置项目属性 三、编写源程序 四、编译和连接程序 五、下载程序到目标MCU 中 六、运行程序 一、第一次使用EW430时按如下步骤创建工程。 1.在E盘创建工程文件夹(不要用中文); 2.启动IAR Embedded Workbench; 3.创建一个C语言项目; 1>点击菜单栏中Project/Create New Project,创建一个新的项目

2>在弹出的对话框中选择C语言环境,点击前面的+号,选择main,如图; 3>在出现的“另存为”对话框中找到之前在E盘建立的工程文件夹;在其目录下新建一个项目文件夹Day00;双击进入项目文件夹Day00,将新建的项目命名为Day00.ewp保存;如图 4>进入到IAR 提供的集成工作环境下,其中编辑界面下出现的程序main.c 是EW430 提供的C 语言程序模板;

如何学习并使用MSP430单片机(入门)

如何学习MSP430单片机 如何学习MSP430单片机 。 下面以MSP430系列单片机为例,解释一下学习单片机的过程。 (1)获取资料 购买有关书籍,并到杭州利尔达公司网站和TI网站获取资料,例如,在网上可以找到FET使用指导、MSP430 F1xx系列、F4xx系列的使用说明和具体单片机芯片的数据说明,可以找到仿真器FET的电路图、实验板电路图、芯片封装知识等大量的实际应用参考电路,当然有些资料是英文的,看懂英文资料是个挑战,学会4、6级英语就是为看资料的。英语难学,但是看资料容易,只要下决心,看完一本资料,就可以看懂所有的相关资料。 (2)购买仿真器FET和实验电路板 如果经济条件不错,可以直接购买。 (3)自制仿真器FET和实验电路板 自制仿真器FET,首先要到网上找到FET电路图,然后就可以使用画电路板软件画电路图和电路板图,这又是个挑战。FET电路非常简单,但要把它制作出来还是需要下一番工夫的,找一本有关书,然后练习画原理图,画完原理图后,就学习认识元件封装,再购买元件,这时就可以画电路板图了,一旦画好,将形成的PCB文件交给电路板制作公司,10天后,就可以得到电路板,焊上元件和电缆,等实验电路板做好后,就可以与实验电路板一起调试了。 自制实验电路板,需要单片机芯片内部工作原理的知识、封装知识,清楚的知道每一个引脚的功能,还需要数码管、按钮、排电阻、三端稳压器、二极管、散热器、电解电容、普通电容、电阻、钮子开关等元件的知识,对于初学者,可以做一个只有3个数码管、8个按钮、8个发光二极管的简单实验板,这样的实验板,虽然简单,但足可以帮助初学者入门单片机。自制实验电路板与自制FET 一样,首先画电路图,然后买元件,再画电路板。由于MSP430系列芯片是扁平封装,焊接起来有一定难度,这好象是个挑战,但实际上很简单,方法如下:

双机间的串口双向通信2.0

单片机应用课程设计任务书

单片机应用课程设计说明书 学院名称:计算机与信息工程学院 班级名称:网工124 学生姓名:卞可虎 学号:2012211369 题目:双机间的串口双向通信设计指导教师:于红利 起止日期:2014.12.29至2015.1.4

目录 一、绪论 (1) 二、相关知识 (6) 2.1 双机通信介绍 (6) 2.2单片机AT89C51介绍 (6) 2.3 串行通信简介 (8) 2.3.1串行通信的特点 (8) 2.3.2串行通信技术标准 (9) 三、总体设计 (10) 3.1 设计需求 (10) 四、硬件设计 (10) 4.1 系统硬件电路设计 (10) 4.1.1整体电路设计 (10) 4.1.2 控制电路设计 (11) 4.1.3 复位电路 (11) 4.1.4 显示电路 (12) 五、软件设计 (12) 5.1发送端程序流程 (12) 5.2接收端程序流程 (13) 5.3按键程序 (14) 5.4串口通信程序 (15) 5.5数码管显示程序 (16)

六、Proteus软件仿真 (16) 七、结束语 (19) 参考文献 (20) 指导教师评语 (21) 成绩评定 (21) 附录:源程序 (22) 一、绪论 电子技术的飞速发展,单片机也步如一个新的时代,越来越多的功能各异的单片机为我们的设计提供了许多新的方法与思路。单片机之间的通信可以分为两大类:并行通信和串行通信。串行通信传输线少,长距离传输时成本低,且可以利用数据采集方便灵活,成本低廉等优点,在通信中发挥着越来越重要的作用。所以本系统采用串行通信来实现单片机之间可靠的,有效的数据交换。 对于一些类似复杂的后台运算及通信与高实时性前台控制系统、软件资源消耗大的系统、功能强大的低消耗系统、加密系统等等。如果合理使用多种不同类型的单片机组合设计,可以得到极高灵活性与性能价格比,因此,多种异型单片机系统设计渐渐成为一种新的思路,单片机技术作为计算机技术的一个重要分支,由于单片机体积小,系统运行可靠,数据采集方便灵活,成本低廉等优点,在通信中发挥着越来越重要的作用。但在一些相对复杂的单片机应用系统中,仅仅一个单片机资源是不够的,往往需要两个或多个单片机系统协同工作。这就对单片机通

MSP430G2553学习笔记(数据手册)

MSP430G2553学习笔记(数据手册)

MSP430G2553性能参数(DIP-20) 工作电压范围:1.8~3.6V。 5种低功耗模式。 16位的RISC结构,62.5ns指令周期。 超低功耗: 运行模式-230μA; 待机模式-0.5μA; 关闭模式-0.1μA; 可以在不到1μs的时间里超快速地从待机模式唤醒。 基本时钟模块配置: 具有四种校准频率并高达16MHz的内部频率; 内部超低功耗LF振荡器; 32.768KHz晶体; 外部数字时钟源。 两个16 位Timer_A,分别具有三个捕获/比较寄存器。 用于模拟信号比较功能或者斜率模数(A/D)转换的片载比较器。 带内部基准、采样与保持以及自动扫描功能的10位200-ksps 模数(A/D)转换器。 16KB闪存,512B的RAM。 16个I/O口。

注意:MSP430G2553无P3口!

MSP430G2553的时钟 基本时钟系统的寄存器 DCOCTL-DCO控制寄存器 DCOx DCO频率选择控制1 MODx DCO频率校正选择,通常令MODx=0

注意:在MSP430G2553上电复位后,默认RSEL=7,DCO=3,通过数据手册查得DCO频率大概在0.8~1.5MHz之间。 BCSCTL1-基本时钟控制寄存器1 XT2OFF 不用管,因为MSP430G2553内部没有XT2提供的HF时钟 XTS 不用管,默认复位后的0值即可 DIV Ax 设置ACLK的分频数 00 /1 01 /2 10 /4 11 /8 RSELx DCO频率选择控制2 BCSCTL2-基本时钟控制寄存器2

第3课 HJ-2G AVR单片机学习笔记 程序编写编译环境

第3课ICC程序编写编译环境 基于HJ-2G AVR学习板 学习AVR单片机必需要安装的第二个软件:程序编写编译环境ICC AVR 1、下面说一说安装方法,在配套资料(网上下载)找到ICC AVR直接点击按装,装好后输入正版注册码,这样就可以正常使用ICCAVR软件编写编译。 2、在桌面上打开ICCAVR软件,出现如下图片:请点开工程,并新建一个工程。 3、下图为新建一个工程,请保存在C盘目录下,输入工程名称(只能是中文),点击保存。

4、新建立一个C文件,在下图空白处输入你的C源码,输完后请保存C文件。 5、加入刚才建好的C文件到工程当中,方法如下图。

6、设置一下编译器,如下图。 7、芯片用ATmega16

8、最后一步了,只要你按上面的一步一步做,最后点一下编译键,就可以正常编译成功,如果不成功,请查一查你的C源码是否正确,还有工程是不是在中文目录下。 9、总结:本课主要学习了程序编写编译环境ICC AVR的安装,设置,还有编译方法,开始学单片机时,新手不会写C源码,可以复制慧净写好的C源码到项目中,练习多次,ICCAVR 软件你就会使用了,以后学习中,每一课都会用到本软件,只要你认真跟着《慧净1天入门AVR单片机学习笔记》学习,多多练习,相信你很快速学会AVR单片机。 慧净AVR单片机免费共享学习笔记目录(配有视频教程,请在慧净空间下载) 第一部1天入门AVR单片机学习笔记 第1课:AVR单片机学习基本流程 第2课:AVR单片机程序烧写方法 第3课:程序编写编译环境 第4课:简单C语言基础知识 第二部10天学会AVR单片机学习笔记 第1课:IO端口操作 第2课:流水灯 第3课:单个数码管显示 第4课:多个数码管同时显示 第5课:独立按键 第6课:定时器 第7课:外部中断

单片机读书笔记

单片机的分类 单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统。 众多的单片机可以从不同角度进行分类。 Ⅰ按生产厂家分 1.INTEL公司的单片机(MCS-48系列单片机:MCS-48单片机是美国INTEL公司于1976年推出,它是现代单片机的雏形,包含了数字处理的全部功能,外接一定的附加外围芯片即构成完整的微型计算机;MCS-51系列:MCS-51单片机是美国INTE公司于1980年推出的产品,与MCS-48单片机相比,它的结构更先进,功能更强,在原来的基础上增加了更多的电路单元和指令,指令数达111条,MCS-51单片机可以算是相当成功的产品,一直到现在,MCS-51系列或其兼容的单片机仍是应用的主流产品) 2.ATMEL公司的单片机(AT89系列单片机:AT89系列单片机是ATMEL 公司的8位Flash单片机系列。这个系列单片机的最大特点是在片内含有Flash存储器。因此,在应用中有着十分广泛的前途特别是在便携式、省电及特殊信息保存的仪器和系统中显得更为有用;A VR单片机:A VR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(Reduced Instruction Set CPU) 精简指令集高速8位单片

机。A VR的单片机可以广泛应用于计算机外部设备、工业实时控制、仪器仪表、通讯设备、家用电器等各个领域。) 3.Motorola公司的单片机(MC68300系列单片机:MC68300系列微控制器采用模块化设计,可以根据用户的要求,选择不同的模块,以适应不同的应用场合) 4. MicroChip单片机的单片机(PIC12CXXX系列单片机、PIC16CXXX系列单片机) 5.PHILIPS公司的单片机(通用型单片机:PHILIPS公司的P80C31基于80C51内核采用高密度CMOS技术设计制造,包含中央处理单元、128字节内部数据存储器RAM、32个双向输入/输出(I/O)口、3个16位定时/计数器和6个中断源,4层优先级中断嵌套结构,可用于多机通信的串行I/O口,I/O扩展或全双工UART,片内时钟振荡电路;Flash 单片机、低功耗OTP单片机) 6.TI公司的单片机(TI单片机MSP430:德州仪器(TI)超低功率16位RISC混合信号处理器的MSP430产品系列为电池供电测量应用提供了最终解决方案。德州仪器作为混合信号和数字技术的领导者,TI 创新生产的MSP430,使系统设计人员能够在保持独一无二的低功率的同时同步连接至模拟信号、传感器和数字组件。) 7.其他公司的单片机(美国SST公司的SST89系列、美国CYGNAL公司的C8051FXXX系列单片机、东芝TLCS-870系列单片机) Ⅱ按单片机数据总线的位数,可将单片机分为4位、8位、16位、32位

单片机学习日志

msp430学习笔记 默认分类2009-10-06 16:18:36 阅读5 评论0 字号:大中小 这只是我在学习TI公司生产的16位超的功耗单片机MSP430的随笔,希望能对其他朋友有所借鉴,不对 之处还请多指教。 下面,开始430之旅。 讲解430的书现在也有很多了,不过大多数都是详细说明底层硬件结构的,看了不免有些空洞和枯燥,我认为了解一个MCU的操作首先要对其基础特性有所了解,然后再仔细研究各模块的功能。 1.首先你要知道msp430的存储器结构。典型微处理器的结构有两种:冯。诺依曼结构——程序存储器和数据存储器统一编码;哈佛结构——程序存储器和数据存储器;msp430系列单片机属于前者,而常用的 mcs51系列属于后者。 0-0xf特殊功能寄存器;0x10-0x1ff外围模块寄存器;0x200-?根据不同型号地址从低向高扩展;0x1000-0x107f seg_b0x1080_0x10ff seg_a 供flash信息存储 剩下的从0xffff开始向下扩展,根据不同容量,例如149为60KB,0xffff-0x1100 2.复位信号是MCU工作的起点,430的复位型号有两种:上电复位信号POR和上电清楚信号PUC。POR 信号只在上电和RST/NMI复位管脚被设置为复位功能,且低电平时系统复位。而PUC信号是POR信号产生,以及其他如看门狗定时溢出、安全键值出现错误是产生。但是,无论那种信号触发的复位,都会使msp430在地址0xffff处读取复位中断向量,然后程序从中断向量所指的地址开始执行。复位后的状态不写 了,详见参考书,嘿嘿。 3.系统时钟是一个程序运行的指挥官,时序和中断也是整个程序的核心和中轴线。430最多有三个振荡器,DCO内部振荡器;LFXT1外接低频振荡器,常见的32768HZ,不用外接负载电容;也可接高频450KHZ -8M,需接负载电容;XT2接高频450KHZ-8M,加外接电容。 430有三种时钟信号:MCLK系统主时钟,可分频1 2 4 8,供cpu使用,其他外围模块在有选择情况下也可使用;SMCLK系统子时钟,供外围模块使用,可选则不同振荡器产生的时钟信号;ACLK辅助时钟,只 能由LFXT1产生,供外围模块。 4.中断是430处理器的一大特色,因为几乎每个外围模块都能产生,430可以在没有任务时进入低功耗状 态,有事件时中断唤醒cpu,处理完毕再次进入低功耗状态。 整个中断的响应过程是这样的,当有中断请求时,如果cpu处于活动状态,先完成当前命令;如果处于低功耗,先退出,将下一条指令的pc值压入堆栈;如果有多个中断请求,先响应优先级高的;执行完后,等待中断请求标志位复位,要注意,单中断源的中断请求标志位自动复位,而多中断的标志位需要软件复位; 然后系统总中断允许位SR.GIE复位,相应的中断向量值装入pc,程序从这个地址继续执行。 这里要注意,中断允许位SR.GIE和中断嵌套问题。如果当你执行中断程序过程中,希望可以响应更高级

S.D.Lu的MSP430入门学习笔记(4):时钟选择(2)VLO、LFXT1和XT2

S.D.Lu的MSP430入门学习笔记(4): 时钟选择(2)VLO、LFXT1和XT2 MSP430最多可提供4种时钟源:DCO、VLO、LFXT1和XT2,有些器件不包含XT2或LFXT1。 VLO是一个内部超低功耗、低频率振荡器,上图中的时钟源1,其频率为12KHz。其使用方法请参考TI官方例程“msp430g2xx2_1_vlo.c”,在此不作赘述。 LFXT1是外部时钟源,它有LF和HF两种模式,分别支持外部低频和高频时钟。 XT2是外部高频时钟源,支持0.4~16MHz高频时钟。 (注:G2xx2系列没有XT2,G2xx2系列LFXT1不支持HF模式。) MSP430的主时钟、子时钟和辅助时钟,可以分别通过相应的寄存器控制位选择4种时钟源中的一种作为其来源。之后还可以通过分频器分频,得到想要的时钟频率。 主时钟是CPU运行的时钟源,子时钟和辅助时钟是各个片内外设的时钟源。在MSP430系统中,有时为了降低功耗会关闭CPU和一些外设,同时要求一些外设继续工作。

和时钟模块相关的寄存器只有6个,时钟配置的过程就是设置这些寄存器。具体各寄存器的各个位的功能请查看《MSP430x2xx系列用户指南》(中文版)第五章。 时钟的切换 一次PUC之后,基本时钟模块将DCOCLK用于MCLK。如果需要将MCLK时钟源改为LFXT1或XT2。 把MCLK的源从DCO时钟转换成晶振时钟(LFXT1CLK 或XT2CLK)的顺序是: 1. 打开晶体振荡器并选择合适的模式 2. 清零OFIFG标志 3. 等待至少50uS 4. 测试OFIFG,并重复2至4的步骤,直到OFIFG保持被清零。 作者:S.D.Lu 深圳 2014-3-25

史上最通俗易懂的单片机自学有笔记1

单片机关键知识点一览: 系列一 1:单片机简叙 2:单片机引脚介绍 3:单片机存储器结构 4:第一个单片机小程序 5:单片机延时程序分析 6:单片机并行口结构 7:单片机的特殊功能寄存器 系列二 8:单片机寻址方式与指令系统 9:单片机数据传递类指令 10:单片机数据传送类指令 11:单片机算术运算指令 12:单片机逻辑运算类指令 13:单片机逻辑与或异或指令祥解 14:单片机条件转移指令 系列三 15:单片机位操作指令 16:单片机定时器与计数器 17:单片机定时器/计数器的方式

18:单片机的中断系统 19:单片机定时器、中断试验 20:单片机定时/计数器实验 21:单片机串行口介绍 系列四 22:单片机串行口通信程序设计 23:LED数码管静态显示接口与编 24:动态扫描显示接口电路及程序 25:单片机键盘接口程序设计 26:单片机矩阵式键盘接口技术及 27:关于单片机的一些基本概念 28:实际案例实践——单片机音乐程序设计 1:单片机简叙 什么是单片机一台能够工作的计算机要有这样几个部份构成:CPU(进行运算、控制)、RAM(数据存储)、ROM(程序存储)、输入/输出设备(例如:串行口、并行输出口等)。在个人计算机上这些部份被分成若干块芯片,安装一个称之为主板的印刷线路板上。而在单片机中,这些部份,全部被做到一块集成电路芯片中了,所以就称为单片(单芯片)机,而且有一些单片机中除了上述部份外,还集成了其它部份如A/D,D/A等。 单片机是一种控制芯片,一个微型的计算机,而加上晶振,存储器,地址锁存器,逻辑门,七段译码器(显示器),按钮(类似键盘),扩展芯片,接口等那是单片机系统。 2:单片机引脚介绍

MSP430初学者教程(最详细)

如何学习 学习就是迎接挑战、解决困难的过程,没有挑战,就没有人生的乐趣。 下面以系列为例,解释一下学习的过程。 (1)获取资料 购买有关书籍,并到杭州利尔达公司网站和TI网站获取资料,例如,在网上可以找到FET 使用指导、F1xx系列、F4xx系列的使用说明和具体芯片的数据说明,可以找到FET的、实验板、知识等大量的实际应用参考电路,当然有些资料是英文的,看懂英文资料是个挑战,学会4、6级英语就是为看资料的。英语难学,但是看资料容易,只要下决心,看完一本资料,就可以看懂所有的相关资料。 (2)购买FET和实验电路板 如果经济条件不错,可以直接购买。 (3)自制FET和实验电路板 自制仿真器FET,首先要到网上找到FET,然后就可以使用画电路板软件画电路图和电路板图,这又是个挑战。FET电常简单,但要把它制作出来还是需要下一番工夫的,找一本有关书,然后练习画,画完后,就学习认识,再购买元件,这时就可以画电路板图了,一旦画好,将形成的PCB文件交给公司,10天后,就可以得到电路板,焊上元件和电缆,等实验电路板做好后,就可以与实验电路板一起调试了。 自制实验电路板,需要单片机芯片内部工作原理的知识、封装知识,清楚的知道每一个的功能,还需要、按钮、、三端、、散热器、、普通电容、电阻、等元件的知识,对于初学者,可以做一个只有3个、8个按钮、8个的简单实验板,这样的实验板,虽然简单,但足可以帮助初学者入门单片机。自制实验电路板与自制FET一样,首先画电路图,然后买元件,再画电路板。由于系列芯片是扁平封装,焊接起来有一定难度,这好象是个挑战,但实际上很简单,方法如下:首先在焊盘上涂上,在未干的情况下,将芯片放在焊盘上,注意芯片第一的位置,并使与焊盘对齐,将擦干净的(不能有任何)接触引脚,引脚只要一热,焊盘上的就自动将引脚焊住了,千万注意上不能有,焊接时最好配备一个。焊接电路板时,每一个元件都要核对参数,可以用万用表测量的元件一定要测量。 (4)从网上获得IA 到利尔达公司或的网站下载IA,并安装到计算机上。 (5)调试FET和实验板

单片机学习笔记

MC51单片机学习笔记 一准备知识: 1.内部结构:4K Rom 程序存储器(硬件)128节Ram随机存储器(软件) 8位cpu,4个8位并口,1个全双串行口,2个16位定时器/计数器; 寻址范围64k 布尔处理器 CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器; RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据; ROM:用以存放程序、一些原始数据和表格; I/O口:四个8位并行I/O口,既可用作输入,也可用作输出; T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式 五个中断源的中断控制系统; 一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信; 片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最高振荡频率取决于单片机型号及性能。 2.分类:arm(快)凌阳(处理声音较好) 3.型号说明:STC (公司名) 89(系列)C(CMOS;CAD:自带

AD转换;S:串行下载无需专门的编程器;lv:工作电压为3v)51(1*4=4K) RC 40(晶振最高频率) C(商业级:温度0--85,I工业级温度-40--125)----PDIP (双列直插式)0721(07年第21周)......... 4.电平:TTL:高:+5v--低0v; RS232:计算机串口:+12v--低-12v,故计算机和单片机通信需要电平转换芯片 5.二进制与十六进制之间的转换:每4位转变一次 6.二进制转换逻辑符号:&与,//或,---非,异或 7. P3第二功能各引脚功能定义: P3.0:RXD串行口输入 P3.1:TXD串行口输出 P3.2:INT0外部中断0输入 P3.3:INT1外部中断1输入 P3.4:T0定时器0外部输入 P3.5:T1定时器1外部输入 P3.6:WR外部写控制(计数) P3.7:RD外部读控制 RST :复位管脚,高电平有效,时间大于两个机器周期 VPD:备用电源 注:机器周期和指令周期 (1)振荡周期: 也称时钟周期, 是指为单片机提供时钟脉

MSP430单片机深入学习笔记

复位 1.POR信号只在两种情况下产生: 微处理器上电。 RST/NMI管脚被设置为复位功能,在此管脚上产生低电平时系统复位。 2.PUC信号产生的条件为: POR信号产生。 看门狗有效时,看门狗定时器溢出。 写看门狗定时器安全健值出现错误。 写FLASH存储器安全键值出现错误。 3.POR信号的出现会导致系统复位,并产生PUC信号。而PUC信号不会引起POR信号的产生。系统复位后(POR之后)的状态为: RST/MIN管脚功能被设置为复位功能。 所有I/O管脚被设置为输入。 外围模块被初始化,其寄存器值为相关手册上注明的默认值。 状态寄存器(SR)复位。 看门狗激活,进入工作模式。 程序计数器(PC)载入0xFFFE(0xFFFE为复位中断向量)处的地址,微处理器从此地址开始执行程序。 4.典型的复位电路有以下3种: (1)由于MSP430具有上电复位功能, 因此,上电后只要保持RST/NMI(设置 为复位功能)为高电平即可。通 常的做法为,在RST/NMI管脚接100k? 的上拉电阻,如图1-5(a)所示。 (2)除了在RST/NMI管脚接100k?的 上拉电阻外,还可以再接0.1μF的电 容,电容的另一端接地,可以使复位 更加可靠。如图1-5(b)所示。 (3)由于MSP430具有极低的功耗,如 果系统断电后立即上电,则系统中电 容所存储的电荷来不及释放,此时系 统电压不会下降到最低复位电压以下, 因而MSP430不会产生上电复位,同时 RST/NMI管脚上也没有足够低的电平 使MSP430复位。这样,系统断电后立 即上电,MSP430并没有被复位。为了 解决这个问题,可增加一个二极管, 这样断电后储存在复位电容中的电荷 就可以通过二极管释放,从而加速电 容的放电。二极管的型号可取1N4008。 如图1-5(c)所示。

MSP430时钟配置及ad模块等学习笔记

MSP430收集资料笔记 问: 个刚从51转到msp430这块的学生,我想知道,分频其实到底可以干什么,具体什么时候才会需要我们去分频? 能举些详细的例子告诉我分频什么时候改用,什么时候不该用吗?不需要代码,例子就好 答: 51也要分频啊,一个系统CPU(中央处理单元)的频率最高的,其他的外设都是低速的,都要通过主时钟分频产生低速的时钟来工作;比如8Mhz的单片机是说CPU的时钟是工作在8mhz,但gpio、串口,定时器等它们的工作频率很低的,这个时钟就需要分频来产生;当你想要改变一个外设的工作频率时就需要重新设置分频系数,比如串口波特率,定时时间,IIC时钟,spi时钟等等; 问: MSP430单片机的定时器,看门狗等东西的时钟来源于于各个时钟 (SMCLK,ACLK,MCLK,DCO等)有什么区别呢?还有这些问什么要分频呢,不分频好像程序也可以写啊! 有这三种时钟我也知道,我只是想知道。我是想知道这些时钟给外设使用的时候到底到底选择哪个,为什么要选择这个? 答: 不知道楼主用的是那个型号!我用的149,就用这个给你说吧!msp430F149 不分频具体的根据系统需要决定,楼主应该是初学吧!有些问题你不必深究,慢慢的在学习和使用中你就明白了,刚开始你知道怎么用就可以了! CTRL_C+CTRL_V,就算是抄别人的,也自己敲一遍,加深理解,加深印象!

话有说回来,学编程本来就是这么个过程,一看二抄三写四调试!我就是这么过来的,网上资源很多,多看看别人是怎么学的,怎么做的! || || 信号源---分频输出---------》时钟----------------》输出信号源----------外围模块|| (DCO)//************不设置即被MCLK默认***********************// || (LFXTI)→MCLK==→信号源分频输出=→信号源供给外围模块,CPU || (LFXT2) 1)MCLK系统主时钟。除了CPU运算使用此时钟以外,外围模块也可以使用。MCLK可以选择任何一个振荡器所产生的时钟信号并进行1、2、4、8分频作为其信号源。 (2)SMCLK系统子时钟。供外围模块使用。并在使用前可以通过各模块的寄存器实现分频。SMCLK可以选择任何一个振荡器所产生的时钟信号并进行1、2、4、8分频作为其信号源。 ||(DCO)//************不设置即被MCLK默认***********************// ||(LFXTI)→信号源分频输出=→SMCLK==→信号源供给外围模块 ||(LFXT2) (3)ACLK辅助时钟。供外围模块使用。并在使用前可以通过各模块的寄存器实现分频。但ACLK只能由LFXT1进行1、2、4、8分频作为信号源。 PUC复位后,MCLK和SMCLK的信号源为DCO,DCO的振荡频率默认为800KHZ。ACLK的信号源为LFXT1。 || ||LFXI1=→信号源分频====》ACLK========→外围模块 MCLK,SMCLK ||PUC复位===|=======》 DCO=800KHZ |ACLK | |LFXTI

MSP430学习总结

MSP430学习总结 前言 这次主要看的资料是MSP430F425型号的,与MSP430F169有点区别,但由于MSP430单片机采用模块化结构,在不同型号的单片机中,同一种模块的使用方法和寄存器都是相同的。下面会对它们的功能和区别加以说明。 一、MSP430单片机的特点 1、我觉得MSP430最大的特点就是超低功耗,430之所以能够在 低功耗的条件下运行,主要是由于引入了“时钟系统”的概念,和采用模块化结构。让CPU可以间歇性的工作,节省功耗。 在MSP430单片机中,通过时钟配置可以产生3种时钟: MCLK:主时钟,MCLK是专门为CPU运行提供的时钟,MCLK配置的越高,CPU执行的速度就越快。一旦关闭MCLKE,CPU 就停止工作,所以在超低功耗中通过间接开启MCLK的方式降低功耗。 SMCLK:子系统时钟,为单片机内部某些高速设备提供时钟,并且SMCLK是独立于MCLK的,关闭MCLK让CPU停止工作,子系统SMCLK开启,仍然可以使外设继续工作。 ACLK:活动时钟;ACLK一般是由32.768KHz晶

振直接产生的低频时钟,在单片机运行时一般不关闭,和定时器使用间接唤醒CPU。时钟系统对于3种时钟不同程度的关闭,就可以进入不同的低功耗模式(低功耗在下面讨论)。 2、MSP430单片机采用模块化结构,每一种模块都具有独立 而完整的结构,这样就可以单独开启或者关闭某些模块,只需要激活某些使用的模块,以节省电力。 3、MSP430单片机的内核是16位RISC处理器,其运算能力和速度都具有一定的优势。 MSP430还有其它的一些优势在这里就不一一列举了。 二、MSP430单片机的内部资源 1、I/O口寄存器 PxIN: Px口输入寄存器 PxOUT: Px口输出寄存器 PxDIR : Px口方向寄存器 0=输入 1=输出 PxSET: Px口第二功能选择寄存器 0=普通I/O 1=第二功能 使用总结:以上的4个寄存器是所有I/O都具有的,在使用I/O 口之前首先要设置PxDIR,对于要使用第二功能的还要设置PxSET 下面介绍的是430中P1,P2口引发中断需要设置的寄存器

单片机学习笔记--KILL软件应用

单片机学习笔记1 建立工程、添加文件、生成烧写文件之学习一、建立一个空的工程文件: 打开KILL软件——project——New Project——保存目录(选一个合适目录保存我们的工程实例:E、D、F盘自定,若在该文件夹下放多个项目,可在此在建一个子文件夹)——双击进入该文件夹或该子文件夹——(进入后我们在这里建文件)命名为你为这个工程所起的名字(当然也可以随便起)——点保存——选择你所用芯片的公司,并在该公司目录下选择你所用的芯片——确定——在弹出对话框中选否(用C语言编程)OR是(用汇编编程)。 下面用图讲解: 1、打开KILL软件——project——New Project

2、保存目录(选一个合适目录保存我们的工程实例:E、D、F盘自定,若在该文件夹下放多个项目,可在此在建一个子文件夹) 选择要保存的地方(那个盘下): 保存在该磁盘下自己新建的文件夹下:

建立子文件夹(若要在上面确定的文件夹下建立不只一个工程时,建立子文件夹来分别存放不同的工程实例) 3、双击进入该文件夹或该子文件夹——(进入后我们在这里建文件)命名为你为这个工程所起的名字(当然也可以随便起)——点保存 4、选择你所用芯片的公司,并在该公司目录下选择你所用的芯片——确定

这里AT89S52的FLASH Memory是8K的,其算法是最后一个数字2乘以4得出的,又如AT89S51的FLASH Memory是4K 5、在弹出对话框中选否(用C语言编程)OR是(用汇编编程)。

二、向空的工程文件里添加一个程序文件: 新建一个空的程序文件:File——New File——保存一下(File——Save 或直接点击保存图标)——填写文件名:程序文件名.C 或文件名.ASM——保存。 把程序文件添加到工程文件里: 方法一,在Source Group1上点击右键——Add Files to Group ’Source Group1’——选中要添加的那个程序文件——Add——Close。 方法二,直接双击Source Group1进行添加。 下面用图进行讲解: 1、File——New File 2、保存一下(File——Save或直接点击保存图标) 3、填写文件名:程序文件名.C 或文件名.ASM——保存。 创建为C语言程序文件:

MSP430单片机原理解读

第 2 章MSP430 单片机原理与 C 语言基础MSP430系列超低功耗单片机有200多种型号,TI公司用3~ 4位数字表示其型号。其中第一位数字表示大系列,如MSP430F1xx系列、MSP430F2xx系列、MSP430F4xx系列、MSP430F5xx系列等。在每个大系列中,又分若干子系列,单片机型号中的第二位数字表示子系列号,一般子系列越大,所包含的功能模块越多。最后1~2 位数字表示存储容量,数字越大表示RAM 和ROM 容量越大。430 家族中还有针对热门应用而设计的一系列专用单片机。如SP430FW4xx 系列水表专用单片机、MSP430FG4xx 系列医疗仪器专用单片机、MSP430FE4xx 系列电能计量专用单片机等。这些专用单片机都是在同型号的通用单片机上增加专用模块而构成的。最新的MSP430型号列表可以通过TI公司网站下载。 在开发单片机应用系统时,第一步就是单片机的选型,选择合适的单片机型号往往就能事半功倍。单片机选型基本方法是选择功能模块最接近项目需求的系列,然后根据程序复杂程度估算存储器和RAM 空间,并留有适当的余量,最终决定选用的单片机型号。 本章节以MSP430F249单片机为学习目标,介绍单片机的基本结构和工作原理,读者可以举一反三、触类旁通,而不必每种型号都去学习却无法深入掌握。 2.1 MSP430F249单片机基本结构与原理 2.1.1MSP430F249的主要结构特点 供电电压范围1.8V~3.6V 。 超低功耗:活动状态270uA(1MHz,2.2V);待机模式0.3uA;关机模式0.1uA。 16位RISC精简指令集处理器。 时钟系统:多种时钟源,可灵活使用。时钟频率达到16MHz ;具有内部振荡器;可外接32kHz 低频晶振;外接时钟输入。 12位A/D转换器,内部参考电压,采用保持电路。 16位定时器A,3个捕获/比较寄存器。 16 位定时器B,7 个捕获/比较寄存器。 4个通用串口:USCI_A0 和USCI_A1、USCI_B0 和USCI_B1(I2C、SPI)。 60kB+256B的flash程序存储器,2kB的RAM数据存储器。 64引脚QFP封装。 MSP430F249单片机的芯片封装形式如图2.1所示,各引脚的功能描述如表2-1 所列。 2.1.2 MSP430F249单片机的基本结构 MSP430F24x系列单片机功能结构示意图如图2.2所示。 (1)CPU简介 MSP430单片机的CPU为16位RISC精简指令集的处理器,只有27条正交汇编指令和7 种寻址方式。RISC 处理器基本上是为高级语言所设计的,编译程序对正交指令系统很容易做到最优化,利于产生高效紧凑的代码。MSP430CPU 中集成了16个16位通用寄存器 R0~R15,其中R0~R3分别复用为程序指针PC、堆栈指针SP、状态寄存器SR和常数发生器CG1/CG2。这些寄存器之间的操作只需要一个CPU 周期。

相关文档