实验指导书图文范文.doc_第1页
实验指导书图文范文.doc_第2页
实验指导书图文范文.doc_第3页
实验指导书图文范文.doc_第4页
实验指导书图文范文.doc_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

实验指导书图文范文 CHD1807-MSP430F149开发系统V1.0CHD1807-MSP430F149开发系统V1.0实验指导书实验指导书CHD1807-MSP430F149开发系统实验指导书第1页目录目录1.LED实验22.时钟实验73.看门狗实验144.定时器实验185.蜂鸣器实验226.数码管实验267.独立按键328.矩阵键盘379.中断实验4110.串口实验4611.PWM实验5312.12864显示实验5913.ADC实验6714.温度传感器实验7515.DAC实验8416.EEPROM实验8917.无线收发实验9618.红外遥控实验100CHD1807-MSP430F149开发系统实验指导书第2页实验一LED实验一实验目的1.了解寄存器,熟悉MSP430工作原理,达到举一反三的效果。 2.完成点亮LED实验了解GPIO设置方式。 二实验原理1.硬件介绍图1LED硬件连接图三程序设计大家已经迫不及待地想编写程序了,接下我们用C语言点亮一个LED。 这是第一个实验,看懂它,也就意味你已经踏入了单片机C语言编程的第一道门槛。 我们在这里多花些时间介绍。 大家在工程下面的C文件下输入下面程序。 先不管代码的含义,后面会讲。 #include/*时钟初始化*/void Clk_Init()unsigned chari;BCSCTL1&=XT2OFF;/打开XT振荡器BCSCTL2|=SELM_2+SELS;/MCLK8M andSMCLK8M doIFG1&=OFIFG;/清除振荡错误标志for(i=0;iopen“msp430x14x.h”。 就可以打开msp430x14x.h文件。 打开后如下所示。 大家看到这个文件时,不要吓到。 这个文件是厂家已经编写好的,我们只需要去了解,知道是什么,怎么去用。 如果不去了解这个头文件msp430x14x.h,你就没真正的去了解单片机的工作的最底层,最基本的原理。 那么你对单片机只是简单应用,肤浅层次的了解。 知识点#ifndef(/if notdefine的简写)#ifndef x/先测试x是否被宏定义过#define x程序段1/如果x没有被宏定义过,定义x,并编译程序段1#endif程序段2/如果x已经定义过了则编译程序段2的语句,“忽视”程序段1。 条件指示符#ifndef的最主要目的是防止头文件的重复包含和编译。 了解条件编译当然也可以用条件语句来实现。 但是用条件语句将会对整个源程序进行编译,生成的目标代码程序很长,而采用条件编译,则根据条件只编译其中的程序段1或程序段2,生成的目标程序较短。 如果条件选择的程序段很长,采用条件编译的方法是十分必要的。 备注#ifndef和#endif要一起使用,如果丢失#endif,可能会报错。 先配对,#ifdef和#endif、#ifndef和#endif,上述程序两层嵌套。 如果_IAR_SYSTEMS_ICC_定义了,那么直接跳过中间#ifndef和#endif;如果_IAR_SYSTEMS_ICC_没定义了,那么在执行中间#ifndef和#endif。 CHD1807-MSP430F149开发系统实验指导书第5页#define P1OUT_(0x0035)DEFC(P1OUT,P1OUT_)这里就是用了以上的可变参数宏。 DEFC(P1OUT,P1OUT_)就表示sfrb P6OUT=P6OUT_。 这里的0x0035就是指P1OUT这个寄存器的地址了。 我们在主程序里面只要给我们在主程序里面只要给P1OUT赋值,就可以改变I/O口的电平。 知识点 1、#define ME1_(0x0004)DEFC(ME1,ME1_)me1关联端口0x0004,DEFC的C是字节的意思,也就是me1就是地址0004处的一个字节即八位数据#define FCTL1_(0x0128)DEFW(FCTL1,FCTL1_)其功能是从指定地址0x0128开始,定义若干个16位数据。 到这里为止,头文件介绍完毕。 回归主函数。 这段程序后面章节讲时钟的时候会有详细的讲解,我在这里就不讲了。 这段函数的作用是配置系统的时钟,也就是设置运行速度。 DIR其实是direction,大家以后可以通过英文来记这些常用的寄存器。 四实验现象1.打开iar软件编写实验程序如上述。 2.编译产生txt文件,用BSL下载器下载。 3.从pc机拔掉下载线,打开电源开关,可以看到LED5被点亮。 CHD1807-MSP430F149开发系统实验指导书第6页五注意事项若要点亮LED 6、LED7,需要将跳线座P11用短路帽相连。 六思考题 (1)第一个发光管以间隔200ms闪烁。 (2)用8个发光管演示出8位二进制数累加过程。 (3)8个发光管间隔200ms由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms间隔全部闪烁5次。 重复此过程。 (4)间隔300ms第一次一个管亮流动一次,第二次两个管亮流动,依次到8个管亮,然后重复整个过程。 (5)间隔300ms先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8个全部闪烁3次;关闭发光管,程序停止。 CHD1807-MSP430F149开发系统实验指导书第7页实验二时钟实验一实验目的1.理解和熟悉msp430f149单片机时钟系统;2.感受时钟频率对系统运行速度的影响;3.学会配置单片机的时钟,为后续学习打好基础。 二实验原理msp30基本时钟模块由低速晶体振荡器、高速晶体振荡器、数字控制振荡器等构成,多种时钟有利于满足实时系统对可靠性、低功耗和快速响应外部事件的要求。 1.时钟源概述基本时钟模块包括3个时钟输入源 (1)低频时钟源LFXT1CLK默认工作在低频模式(32.768kHz)手表晶振,也可以通过外接450kHz8MHz的高速晶体振荡器或谐振器工作在高频模式。 (2)高频时钟源XT2CLK可选择的高频振荡器,可以通过标准的晶体振荡器、谐振器或外接450kHz8MHz的时钟源工作。 (3)数字控制RC振荡器DCOCLK2.时钟信号概述通过这些基本的时钟模块,我们可以得到3个有用的时钟信号 (1)辅助时钟ACLK ACLK是LFXT1CLK时钟源经 1、 2、 4、8分频后得到,可由软件选择作为各个外围模块的时钟信号,一般用于低速外设。 (2)主系统时钟MCLK MCLK可由软件选择LFXT1CLK、XT2CLK、DCOCLK三者之一,然后经 1、 2、 4、8分频得到,通常用于CPU运行,程序的执行和其他使用到高速时钟的模块。 (3)子系统时钟SMCLKSMCLK可由软件选择XT2CLK或DCOCLK,然后经 1、 2、 4、8分频得到,通常用于高速外围模块。 CHD1807-MSP430F149开发系统实验指导书第8页基本时钟系统结构原理图1所示图1基本时钟系统结构原理3.时钟源简介 (1)低速晶体振荡器(LFXT1)手表晶振(32.768kHz)经过XIN和XOUT引脚直接连接到单片机,不需要其他外部器件(内部有12pF的负载电容)。 此时LFXT1振荡器工作于低频模式(XTS=0)。 如果单片机外接高速晶体振荡器或谐振器时,OSCOFF=0可使LFXT1振荡器工作于高频模式(XTS=1)。 此时高速晶体振荡器或谐振器经过XIN和XOUT引脚连接,并且需要外接电容,电容的大小根据晶体振荡器或谐振器的特性来选择。 如果LFXT1CLK信号没有用作SMCLK或MCLK信号,可用软件将OSCOFF=1以禁止LFXT1工作,以减少单片机耗电。 (2)高速晶体振荡器(XT2)XT2振荡器产生XT2CLK时钟信号,它的工作特性与LFXT1振荡器工作在高频模式时类似。 如果XT2CLK没有用作MCLK和SMCLK时钟信号,可用控制位XT2OFF禁止XT2振荡器。 (3)数控振荡器(DCO)单片机的XT2振荡器产生的时钟信号可以经过 1、 2、 4、8分频后当作系统主时钟MCLK。 当振荡器失效时,DCO振荡器会被自动选为MCLK的时钟源。 DCO CHD1807-MSP430F149开发系统实验指导书第9页振荡器的频率可由软件对DCOx、MODx和RSELx位的设置来调整。 当DCOCLK信号没有用作SMCLK和MCLK时钟信号时,可以用控制位SCG0禁止直流发生器。 在PUC信号之后,DCOCLK被自动选作MCLK时钟信号,根据需要,MCLK的时钟源可以另外设置为LFXT1或者XT2。 设置顺序如下a.让OSCOFF=1b.让OFIFG=0c.延时等待至少50us d.再次检查OFIFG,如果OFIFG=1,重复 (3)、 (4)步骤,直到OFIFG0为止。 4.基本时钟系统寄存器MSP4630F149单片机的基本时钟系统寄存器 (1)DCOCTL DCO控制寄存器76543210DCOx MODx位域名描述7:5DCOx DCO频率选择,用来选择8种频率,可分段进行调节DCOCLK频率,相邻两种频率相差10%。 该频率是建立在RSELx选定的频段上。 4:0MODx DAC调制器设定,控制切换DCOx和DCOx+1选择的两种频率,来微调DCO的输出频率。 如果DCOx常数是7,表示已经选择最高频率,此时MODx失效,不能用来进行频率调整。 (2)BCSCTL1基本时钟系统控制寄存器176543210XT2OFF XTSDIVAx XT5V RSELx位域名描述7XT2OFF XT2高速晶振控制,此位用于控制XT2振荡器的开启与关闭0XT2高速晶振开1XT2高速晶振关6XTS LFXT1高速/低速模式选择0LFXT1工作在低速晶振模式(默认)1LFXT1工作在高速晶振模式5:4DIVAx ACLK分频选择0不分频12分频24分频38分频3XT5V不使用,通常此位复位XT5V=02:0RSELx DCO震荡器的频段选择,该3位控制某个内部电阻以决定标称频率0选择最低的标称频率.7选择最高的标称频率名称缩写类型地址初始状态DCO控制寄存器DCOCTL读/写56H60H基本时钟系统控制寄存器1BCSCTL1读/写57H84H基本时钟系统控制寄存器2BCSCTL2读/写58H复位CHD1807-MSP430F149开发系统实验指导书第10页DCO的频率的调节如图2(DCOx和RSELx决定DCO频率)图2DCO频率调节示意图 (3)BCSCTL2基本时钟系统控制寄存器276543210SELMx DIVMxSELS DIVSxDCOR位域名描述7:6SELMx选择MCLK时钟源0MCLK时钟源为DCOCLK(默认)1MCLK时钟源为DCOCLK2MCLK时钟源为XT2CLK3MCLK时钟源为LFXT1CLK5:4DIVMx选择MCLK分频0不分频(默认)12分频24分频38分频3SELS选择SMCLK时钟源0SMCLK时钟源为DCOCLK(默认)1SMCLK时钟源为XT2CLK2:1DIVSx选择SMCLK分频0不分频(默认)12分频24分频38分频0DCOR选择DCO震荡电阻0内部电阻1外部电阻5.硬件资源做本实验只需要用到开发板上的两个LED灯,连接如下图3LED连接图CHD1807-MSP430F149开发系统实验指导书第11页三程序设计1.基本时钟系统程序编写时钟对于单片机系统有至关重要的作用,通常在系统开始运行就配置时钟。 基本时钟系统程序的编写,其实就是初始化时钟合适的状态,所谓“合适”是指既能保证系统运行正常,要不造成浪费。 比如说对低速外设可以用低速时钟,就不用高速时钟,虽然使用高速时钟完全可以。 配置时钟系统的关键在于对上述三个寄存器(DCOCTL、BCSCTL1和BCSCTL2)的配置,因为这三个寄存器都有默认配置,我们在配置时钟是只需要配置我们关心的那个就可以了。 最一般的配置时钟的方法是逐个配置DCOCTL、BCSCLT 1、BCSCTL2,配置顺序为所谓,先配置哪个都可以,下面举例说明配置时钟的方法如要在XT2晶振=8MHz的情况下,配置ACLK=32.768/8Hz,MCLK=4MHz,SMCLK=2MHz时,我们需要配置BCSCLT1和BCSCLT2,可配置如下XT2OFF XTSDIVAx XT5V RSELxBCSCLT110110100B4H XT2关闭LF低频8分频-4SELMx DIVMxSELS DIVSxDCOR BCSCLT2100111009CH MCLKXT2MCLK2分频SMCLKXT2SMCLK4分频内阻对应C语言指令为BCSCLT1=0XB4;BCSCLT2=0X9C;其它配置情况类似,同学们可对照着自己编写。 2.程序代码分析 (1)时钟初始化函数通过参数x,可选择不同的时钟case0,选DCOCLK为主时钟源;case1,选XT2为主时钟源;case3选LFXT1CLK为主时钟源。 void Clk_Init(uchar x)unsigned chari;switch(x)case0:DCOCTL=0x60;/DCOx=3,选择RSELx频段上的第三段BCSCTL1=DIVA_0+0x00;/ACLK不分频,DCO震荡器的频段选择为最低标称频率BCSCTL2=SELM_1+DIVM_0+SELS+DIVS_0;/MCLK时钟源为DCOCLK,不分频break;case1:BCSCTL2=SELM_2+DIVM_0+SELS+DIVS_0;/MCLK时钟源为XT2CLK,不分频break;case2:BCSCTL2=SELM_3+DIVM_0+SELS+DIVS_0;/LFXT1工作在低速晶振模式(默认)/MCLK时钟源为LFXT1CLK,不分频break;default:break;/不进行时钟设置,采用系统默认时钟CHD1807-MSP430F149开发系统实验指导书第12页doIFG1&=OFIFG;/清除振荡错误标志for(i=0;i0xff;i+)_NOP();/延时等待while(IFG1&OFIFG)!=0);/如果标志为1继续循环等待IFG1&=OFIFG; (2)延时函数这个函数在不同的主时钟下延时的时间长短不同,可由此观察选择不同系统时钟的影响。 void Delay()for(int i=100;i;i-)for(int j=1000;j;j-); (3)主函数在主循环中,控制两个LED灯再隔一段时间后状态发生变化,由此可直观的看到选择不同时钟对程序运行速率的影响。 int main(void)WDTCTL=WDTPW+WDTHOLD;Clk_Init (2);/0:DCOCLK2:XT2CLK3:LFXT1CLK P5DIR|=BIT1;P5OUT|=BIT1;P5DIR|=BIT2;P5OUT|=BIT2;while (2)P5OUT=+BIT1+BIT2;/P5.1,P5.2输出取反Delay();3.实验步骤 (1)在程序里调用Clk_Init (0),下载程序,观察两个LED闪烁频率; (2)在程序里调用Clk_Init (1),下载程序,观察两个LED闪烁频率; (3)在程序里调用Clk_Init (2),下载程序,观察两个LED闪烁频率。 四实验现象选择不同的时钟,两个LED闪烁的频率不同,选择x=0时,LED不断闪烁频率;选择x=1时,LED闪烁频率大约每三秒闪烁一次;选择x=2时,LED很长时间才闪烁一次(大约十几秒)。 CHD1807-MSP430F149开发系统实验指导书第13页五注意事项1.思考题中,配置MCLK=8M,SMCLK=8M,在以后大多是是严重都会用到,一定要理解这个配置。 2.在不配置时钟的情况下,系统默认设置为主时钟源是DCO,800kHz。 六思考题将系统主时钟MCLK配置为8MHz、系统子时钟SMCLK配置为8MHz。 CHD1807-MSP430F149开发系统实验指导书第14页实验三看门狗实验一实验目的1.了解看门狗的原理及作用;2.掌握看门狗的三种工作模式(特别是前两种);3.可以熟练使用看门狗定时器做一些小的应用。 二实验原理1.看门狗简介看门狗定时器(WDT)是MSP430系列单片机中常用的一种部件。 在工业现场,往往会由于供电电源、空间电磁干扰或其他原因引起强烈的干扰噪声。 这些干扰作用于数字器件,极易使其产生误动作,引起MSP430发生“程序跑飞”事故。 若不进行有效处理,程序就不能回到正常工作状态,从而失去应有的控制功能。 看门狗定时器正是为了解决这类问题而产生的,尤其是在具有循环结构的程序任务中更为有效。 在正常器件,一次WDT定时时间到来,将产生一次器件复位。 如果通过编制程序使WDT定时时间稍大于程序执行一遍所用的时间,并且程序执行过程中有对看门狗定时器清零的指令,使计数器重新计数,则程序正常运行时,就会在WDT定时时间到之前对WDT清零,不会产生WDT溢出。 如果由于干扰使程序跑飞,则不会在WDT定时时间到来之前执行WDT清零程序,WDT就会产生溢出,从而产生系统复位,CUP需要重新运行用户程序,这样程序就可以又回到正常运行状态。 MSP430看门狗除了具有上述系统检测的特定用外,还可以作为内部定时器来使用,当选择的时间到达之后,和其他定时器一样产生一个定时中断。 此外WDT还可以被完全停止活动以支持超低功耗应用。 看门狗定时器的结构如下图1所述图1看门狗定时器的结构CHD1807-MSP430F149开发系统实验指导书第15页2.WDT寄存器及操作方式 (1)计数单元WDTT看门狗定时器的计数器WDTT是16位增计数器,由MSP430所选定的时钟电路产生的固定周期脉冲信号对计数器进行加法计数。 如果计数器事先被预置的初始状态不同,那么从开始计数到计数溢出为止所用的时间就不同。 计数器WDTT不能直接用软件访问。 WDTT的控制必须通过WDTCTL来控制。 (2)控制寄存器WDTCTL下图为WDT控制寄存器WDTCTL15141312111098Read as069h WDTPH.must bewritten as05Ah76543210WDTHOLD WDTNMIESWDTNMI WDTTMSELWDTTCL WDTSSELWDTIS1WDTIS0rw0rw0rw0rw0rw0rw0rw0rw0位0,1IS0,IS1位选择WDTT中4个输出之一。 设晶振频率=32768Hz,系统频率=1MHz,可以有以下定时时间SSEL IS0IS1定时(ms)0110.064Tsmclk*640100.51Tsmclk*5121111.95Taclk*640018.19Tsmclk*819211015.63Taclk*51200032.77Tsmclk*32768(PUC复位后的值)101250Taclk*81921001000Taclk*32768位2SSEL位选择WDTT的时钟源SSEL=0WDTT以系统频率为时钟SSEL=1WDTT以ACLK为时钟,即晶振频率(32768Hz)位3TCL位,在两种模式中,写入“1”使WDTT从00000h重启动,读出无定义。 位4TMSEL位选择工作模式看门狗或定时器TMSEL=0看门狗模式TMSEL=1定时器模式位5NMI位选择RST*/NMI引脚功能。 在PUC后它被复位。 NMI=0RST*/NMI输入作为复位输入只要RST*/NMI引脚保持低,内部PUC信号一直有效(电平触发)。 NMI=1RST*/NMI输入作为边沿敏感的非屏蔽中断输入。 位6如果选定NMI功能,NMIES选择RST*/NMI输入的有效触发沿,PUC后复位。 NMIES=0上升沿触发NMI中断。 NMIES=1下降沿触发NMI中断。 CHD1807-MSP430F149开发系统实验指导书第16页位7HOLD位停止看门狗定时器的全部工作,为了达到超低功耗这是必须的。 时钟多路切换禁止并且使计数停止增加,这一状态一直保持到HOLD复位,然后工作继续进行。 PUC后HOLD复位。 HOLD=0所有功能激活。 HOLD=1时钟和计数停止。 (3)访问WDTCTL看门狗定时器的控制寄存器读寄存器读WDTCTL不受口令限止。 简单地对字地址0120h访问可进行读操作。 它的低字节含有WDTCTL的值。 高字节始终是069h。 高位字节被选为069h,从而限止了指令对WDTCTL寄存器的改变。 写寄存器只有在高字节中写入正确的口令才能对WDTCL进行写操作。 对0120h写操作将改变WDTCTL寄存器。 低字节含写入WDTCTL的数据,高字节应是口令05Ah。 如果高位中写入除05Ah外的其他值将产生系统复位。 (4)看门狗定时器操作看门狗定时器模块可置成三种模式看门狗模式、间隔定时器模式和低功耗模式。 3.看门狗模式上电或系统复位后,看门狗定时器自动进入看门狗模式,此时在看门狗控制寄存器WDTCTL中各位和看门狗计数器WDTT中各位复位。 WDTCTL寄存器中的初始状态导致定时时间为32ms(在系统时钟为1MHz时)。 由于系统时钟发生器中的数字控制振荡器DCO置为以最低频率工作,软件有大约32600个周期去响应这一重要事件。 初始状态选为WDTT在系统频率下工作,允许应用程序开始运行在看门狗时间在定时时间的中间。 用作看门狗模式时,软件必须周期性地在WDTCTL的TCL位中写1来使WDTT复位以防止超过选定的定时时间。 如果因程序发生问题,计数器不再被复位而超过了定时时间,将产生复位,系统上电清除(PUC)激活。 系统从上电复位的地址重启动。 可通过检测SFR中的IFG1的0位来判断复位原因。 定时时间可以通过SSEL、IS0和IS1位来选定。 4.定时器模式WDTCTL的TMSEL位置位选择定时器模式。 这一模式提供选定时间周期性中断。 定时时间可以通过软件对WDTCTL寄存器的TCL位置位来开始。 注意看门狗定时器改变定时时间而不同时清除WDTT将导致不可预料的系统立即复位或中断。 定时时间改变应伴随计数器清除在一条指令中完成,例如MOV#05A0Ah,&WDTCTL。 如果先后分别进行清除和定时时间选择可能立即引起不可预料的系统复位或中断。 5.低功耗模式当系统不需要WDT做看门狗和定时器时,可关闭WDT以节省功耗。 控制位HOLD=1时关闭WDT,这时看门狗停止工作。 三程序设计该部分程序比较简单,主要需要配置的寄存器只有一个,需要注意的是MSP430默认看门狗是打开的,所以其他不需要用到看门狗的程序需要在开始的时候将看门狗关闭(通过WDTCTL=WDTPW+WDTHOLD;),而本实验是一CHD1807-MSP430F149开发系统实验指导书第17页个看门狗定时器的简单应用,主要是通过使用看门狗定时器实现一个LED灯的闪烁。 代码及介绍如下#includeint main(void)WDTCTL=WDT_ADLY_250;/设置看门狗定时器间隔为250ms IE1|=WDTIE;/使能WDT中断P5DIR|=BIT1;/设置P1.5为输出BIS_SR(LPM0_bits+GIE);/进入低功耗模式0并开启中断,也可直/_EINT();/接开启中断(即上一句屏蔽掉,打开下/一句)/看门狗定时器中断服务子程序#pragma vector=WDT_VECTOR_interrupt voidwatchdog_timer(void)P5OUT=BIT1;/P5.1取反四实验现象本实验程序下载进去后会出现LED2的周期性闪烁,周期大概为250ms。 五注意事项注意事项已在计数器操作部分做了说明,在此简要说明如下1.看门狗定时器改变定时时间必须同时清除WDTT,否则将导致不可预料的系统立即复位或中断。 定时时间改变应伴随计数器清除在一条指令中完成,例如MOV#05A0Ah,&WDTCTL。 如果先后分别进行清除和定时时间选择可能立即引起不可预料的系统复位或中断。 六思考题1改变看门狗定时器的周期,并用示波器观察。 2如何在不关闭看门狗的情况下正常运行程序?怎样进行喂狗操作?试编程实现。 CHD1807-MSP430F149开发系统实验指导书第18页实验四定时器实验一一.实验目的熟练掌握MSP430单片机定时器及定时中断的使用方法。 二二.实验原理定时器模块是MSP430应用系统中经常用到的重要部分,可用来实现定时控制、延迟、频率测量、脉宽测量、信号产生、信号检测等。 此外还可作为串行接口的可编程波特率发生器,在多任务的系统中作为中断信号实现程序的切换。 录入在MSP430实时控制和处理系统中,需要每隔一定时间就对处理对象进行采样,在对获得的数据进行处理,这就要用到定时信号。 1.定时方法简介一般来说,MSP430所需的定时信号可以使用软件和硬件两种方法来获得。 软件定时一般根据所需要的时间常数来设置一个延时子程序,延时子程序包含一定的指令,设计者要对这些指令的执行时间进行严密的计算或者精确的测量,以便确定延时时间是否符合要求。 当时间常数比较大时,常常将延迟子程序设计为一个循环程序,通过循环常数和循环体内的指令来确定延时时间。 这样,延迟子程序结束以后,可以直接转入下面的操作(比如采样),也可以用输出指令作为定时输出。 这种方法的优点是节省硬件,所需的时间可以灵活调整。 主要缺点是执行延迟程序期间,CPU一直被占用,降低了CPU的利用率,也不容易提供多作业环境。 另外,设计延迟子程序时,要用指令执行时间来拼凑延时时间,显得比较麻烦。 不过,这种方法在实际中还是经常使用的。 尤其实在已有系统上做软件开发时,以及延时时间较小而重复次数又有限时,常用软件方法实现定时。 硬件定时利用专门定时器作为主要实现器件,在简单地软件控制下,产生准确的时间延迟。 这种方法的主要思想是根据需要的定时时间,用指令对定时器设置定时常数,并用指令启动定时器,于是定时器开始计数,计数到确定值时,便自动产生一个定时输出。 在定时器开始工作后,CPU不必去管他,而可以去做别的工作。 这种方法最突出的优点是计数时不占用CPU的时间,并且,如果利用定时器产生中断请求,就可以建立多作业的环境,大大提高CPU的利用率。 而且计数器定时器本身的开销并不很大,因此,这种方法的到广泛应用。 2.单片机相关资源介绍MSP430系列有丰富的定时器资源,看门狗定时器(WDT)。 基本定时器(Basic Timer1)、定时器A(Timer_A)、和定时器B(Timer_B)、实时时钟(RTC)等。 器件因系列不同可能包含这些模块的部分或全部。 这些模块除了都有定时功能,各自还有一些特定用途。 在应用中应根据需求选择多种定时器模块。 本节我们主要介绍定时器A。 1.定时器A的特性TI所有MSP430系列的FLASH型单片机都含有定时器A(Timer_A),它是程序设计的核心,由一个16位定时器和多路比较/捕获通道组成,每路比较/捕获通道都以16为定时器功能为核心进行单独的控制。 MSP430系列单片机的CHD1807-MSP430F149开发系统实验指导书第19页2.Timer_A有以下特性输入时钟可以有多种选择慢时钟、快时钟、外部时钟;虽然没有自动重载时间常数功能,但产生定时脉冲或PWM(脉冲宽度调制)信号没有软件带来的误差;不仅能捕获外部事件发生的时间还可以锁定其发生时的高/低电平;可实现串行通信;完善的中断服务功能;4种计数功能选择;8种输出方式选择;支持多时序控制;DMA使能;3.定时器A的结构图1定时器A结构图。 如图1为Timer_A的结构,从图中可以看出,Timer_A由以下部分组成 (1)计数器部分输入的时钟源具有4种选择,所选定的时钟源又可以 1、 2、4或8分频作为计数频率,Timer_A可通过4种工作模式灵活地完成定时/计数功能。 (2)捕获/比较器用于捕获事件发生的时间或产生时间间隔,捕获比较功能的一如主要是为了提高IO端口处理事务的能力和速度。 不同的MSP430单片机,Timer_A模块中所含有的捕获/比较器数量不一样。 每个捕获/比较器的结构完全相同,输入和输出都决定于各自所带的控制寄存器的控制字,捕获/比较器互相之间的工作完全CHD1807-MSP430F149开发系统实验指导书第20页独立。 我们使用的MSP430F149单片机具有三个捕获/比较器,分别是捕获/比较器0,捕获/比较器1,捕获/比较器2。 (3)输出单元具有可选的8中输出模式,用于产生用户需要的输出信号并支持PWM。 我们首先来了解配置定时器的过程1.选择系统时钟源,我们一般选择8M晶振作为系统时钟源。 2.设置定时器计数时钟,本实验我们选择系统时钟8分频作为定时器的计数时钟。 3.设置定时器的工作方式,本实验我们把定时器配置为增计数模式。 4.编写中断服务函数,在中断服务函数中完成对中断标志位的复位。 当我们读取TAIV中的内容时,定时器溢出中断标志位自动复位,所以我们通过读取TAIV内容的方式来确定中断源并完成对中断标志位的复位,而不必编写额外语句清零。 5.编写Main函数,完成配置过程,最后开启定时器。 这里尤其要注意对于含有中断服务函数的程序,一定要在死循环前开启系统总中断,切记。 配置代码如下TACTL=TASSEL1+ID0+ID1+TACLR+TAIE;TACTL|=MC0;/增计数模式TACCR0=1000;/计数周期为1000_EINT();/开启总中断关于这段代码的具体含义,这里先不做解释,这里涉及到了定时器的寄存器配置。 请大家仔细阅读MSP43OF149手册的说明部分。 在了解了定时器的寄存器之后,相信大家能灵活地使用430单片机的定时器了。 接下来我们来完成我们的实验。 令LED2以2S为周期闪烁,亮1s,灭1s。 三.程序设计#includeint time=0;void init_clk()unsigned chari;WDTCTL=WDTPW+WDTHOLD;/关闭看门狗BCSCTL1&=XT2OFF;/打开XT振荡器BCSCTL2|=SELM_2+SELS;/MCLK8M andSMCLK8M doIFG1&=OFIFG;/清除振荡错误标志for(i=0;i=1000)P5OUT=0x02;/取反P5.1time=0;/计数值清零#pragma vector=TIMERA1_VECTOR_interrupt voidTimer_A(void)switch(TAIV)case2:break;case4:break;case10:time+;break;四.实验现象将程序下载进开发板后,可以看到LED2以2S为周期闪烁。 五.注意事项1.打开IAR软件,新建一个工程,编写程序。 2.将编译好的程序下载到开发板中,关闭电源并拔掉下载线。 再次打开电源查看实验现象。 六.思考题1.使用定时器的任一模式实现流水灯功能,闪烁频率自定。 2.使用定时器在数码管上完成秒表计时功能。 CHD1807-MSP430F149开发系统实验指导书第22页实验五蜂鸣器实验一实验目的1.了解有源蜂鸣器和无源蜂鸣器的区别;2.掌握74LS138译码器的功能;3.掌握蜂鸣器的驱动电路;4.掌握蜂鸣器的编程方法二实验原理1蜂鸣器蜂鸣器主要分为两种,有源和无源蜂鸣器。 简单说一下这两点的区别就是有源蜂鸣器有固定的频率,无源蜂鸣器频率可调。 下面介绍一下区别两种蜂鸣器的识别的方法,其实主要的区别在与蜂鸣器管脚的一面,有源蜂鸣器贴有黑胶(图1),无源蜂鸣器电路板裸露在外(图2)。 图1有源蜂鸣器图2无源蜂鸣器2驱动电路不知道大家有没有思索,为什么要驱动的电路?查阅MSP4320数据手册可以知道单片机输出在uA级别,而驱动蜂鸣器需要的电流在mA,如果长时间直接将管脚接在蜂鸣器上,非常容易造成单片机IO损坏。 因此就需要电流放大装置,而三极管电路正好可以放大电流,所以基于这一点,我们可以采用三极管电流放大装置。 在单片机设计过程中,我们仍然为了解决IO驱动能力不足的情况,我们常常采用上拉电阻才增大驱动能力。 比如EEPROM的SCL和SDA,我们就采用了上拉电阻。 除此之外,如果我们要驱动电机的更大功率的电机,电压和电流需要同步放大的时候可以采用专用驱动芯片,比如LM298N,比如BTN7971等,选择驱动芯片时需要格外注意两点,一是输出最大电流,另外一个就是开关速率。 374ls138译码器图374LS138译码器CHD1807-MSP430F149开发系统实验指导书第23页A2,A1,A0地址输入端。 3E,2E,E1选通端注意,上划线(-)是低电平有效。 也就是说(30E=20E=11E=)的时候138才能正常选通工作。 0YY7输出端(低电平有效)。 VCC电源正极,GND地使用规则A0A2对应Y0Y7;A2,A1,A0以二进制形式输入,然后转换成十进制,对应相应Y的序号输出低电平,其他均为高电平;例如(A2,A1,A0)=010,则Y2=0(低,有效),其余全部为1(高)。 再比如(A2,A1,A0)=111,则Y7=0(低,有效),其余全部为1(高)。 因此可以得到真值表如下所示表174LS138真值表4.原理图SEL1SpeakerVCC5Q1PNPGND1KR32图4蜂鸣器的驱动电路即对P5口的0,5,4赋值可以得到输出蜂鸣器的驱动电路如图4所示,选通端则接高低电平,当SEL1输出为低,三极管饱和导通;当SEL1输出为高时,三极管截止。 参照表174LS138的真值表,我们可以控制蜂鸣器的发声。 三程序设计#include#define CPU_F(double)8000000)#define delay_us(x)_delay_cycles(long)(CPU_F*(double)x/1000000.0)/时钟延迟定义注SEL_A-P5.4SEL_B-P5.5SEL_C-P5.0CHD1807-MSP430F149开发系统实验指导书第24页#define delay_ms(x)_delay_cycles(long)(CPU_F*(double)x/1000.0)#define ucharunsigned char#define uintunsigned int#define ulongunsigned longvoid LED_INIT(void);void LED_SEL(uint x);void Clk_Init(void);void Bell_On(void);void Bell_Off(void);int main(void)Clk_Init();LED_INIT();while (1)Bell_On();delay_ms (1000);delay_ms (1000);Bell_Off();delay_ms (1000);delay_ms (1000);/功能时钟初始化时钟设置为8M void Clk_Init()unsigned chari;WDTCTL=WDTPW+WDTHOLD;/关闭看门狗BCSCTL1&=XT2OFF;/打开XT振荡器BCSCTL2|=SELM_2+SELS;/MCLK8M andSMCLK8M doIFG1&=OFIFG;/清除振荡错误标志for(i=0;i0xff;i+)_NOP();/延时等待while(IFG1&OFIFG)!=0);/如果标志为1继续循环等待IFG1&=OFIFG;/功能蜂鸣器发声程序void Bell_On()LED_SEL (0);/LED_SEL (0);表示蜂鸣器发声/功能蜂鸣器关闭void Bell_Off()LED_SEL (7);/表示蜂鸣器关闭/功能配置74LS138void LED_SEL(uint x)switch(x)case0:P5OUT&

温馨提示

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

评论

0/150

提交评论