计硬基础实验报告3_第1页
计硬基础实验报告3_第2页
计硬基础实验报告3_第3页
计硬基础实验报告3_第4页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

1、计硬基础实验报告3 实验名称: 中断技术 、 基本时钟和低功耗模式 (实验 5 5 、实验 6 6 ) 姓名: 学号: 实验班号: 机器号:d d- - 100 实验目的 1. 了解中断原理,包括对中断源、中断向量、中断类型号、中断程序以及中断响应过程的理解; 2. 掌握单片机 c 语言中断程序设计方法。 3. 了解 msp430gxxx 基本时钟模块的工作原理,掌握其控制方法; 4. 掌握利用时钟信号和中断技术实现定时功能的方法; 5掌握低功耗模式控制方法。 实验 基本 任务 实验 5 中断技术 : 1 中断响应过程的理解 下面 c 语言中断程序l5_int.c(见后页),说明程序执行的流程

2、和实现功能。上机实践,回答下面问题,掌握用c 语言编写中断程序的方法。 注意: 1) 查看io430g2553.h 文件末尾处有关中断向量偏址的符号定义。 2)为便于了解程序执行流程,可在中断函数入口处设置一断点,然后连续运行程序(f5),观察操作按键和不操作按键两种情况下程序执行的现象有何不同。 程序见 lab_5 项目,程序 l5_int.c 如下: #include io430.h #include in430.h void delay( ) /延时函数 unsigned int j; for (j=0;j0xffff;j+); void blink( ) /led闪 p2out =bi

3、t3; delay(); p2out |= bit3; delay(); void buzz( ) /蜂鸣响 unsigned int i; for (i=0;i3;i+) p2out =bit4; delay(); p2out|= bit4; delay(); ; void main ( void ) wdtctl = wdtpw + wdthold; /关闭看门狗 /设置引脚p2.4、p2.3输出,p2.3连接led,p2.4连接蜂鸣器 p2sel =(bit3+bit4); p2sel2 =(bit3+bit4); p2out|=(bit3+bit4); p2dir|=(bit3+bit

4、4); /中断相关设置即设置端口p1.3允许中断 p1sel = bit3; p1sel2 = bit3; p1out |=bit3; p1ren |=bit3; p1dir =bit3; p1ies |= bit3; p1ifg =bit3; p1ie |= bit3; _eint(); /总中断允许 for (;) /主循环 blink(); ; #pragma vector=port1_vector _interrupt void port_isr( ) buzz(); p1ifg =bit3; 1) 从程序如何判断用的是哪个中断源?中断类型号是多少?将实验板上某一按键与该中断源对应的引

5、脚相连,运行程序,操作按键,观察现象。 答:程序是通过判断中断标志位来确定是哪个中断源,p1.3 为中断源,中断类型号是 2; 现象:运行程序时p2.3控制的led4灯不断闪烁,当p1.3控制的开关发出中断申请时即按下按键k4后闪烁暂停,控制p2.4连接的蜂鸣器响3声,然后继续led4灯闪烁。 2)main 函数中无调用函数port_isr 的语句,函数port_isr 如何能被执行?何时会被执行? 据此描述中断响应过程。 答:当 p1.3 发出中断申请时即当按下按键时,函数 port_isr 就会被执行,执行完毕后再返回 main 函数中继续执行 main 函数。 中断响应的过程:p1.3处

6、发出中断请求判断是否满足响应条件若满足,则cpu在执行完当前指令后,硬件自动完成保护现场的操作从中断向量表中取中断向量至pc转去执行中断服务子程序; 3) 如果函数port_isr 中不清分中断标志p1ifg 的后果是什么? 答:如果不清分中断标志p1ifg的话就会一直响应中断,然后port_isr函数就会一直被执行,蜂鸣器不断的响。 4) 如果l5_int.c 中的port1_vector 改为port2_vector, 其他不变,程序执行的后果是什么?为什么?(可在main 函数入口处加一断点,运行程序,看现象,分析原因) 答:port1_vector 改为 port2_vector,其他

7、不变,程序将会无法进入中断。因为程序中的中断属于 p1 引脚的中断,中断向量与 p2 引脚的中断向量不同,所进行的改动则是把中断程序写入到了 p2 引脚的中断向量对应的地址中,而 p1 引脚的中断向量对应的地址上没有程序,因此无法执行原先的中断子程。 当在主程序入口处加一断点时可以发现,由于已经设置了中断的端口,因此当有中断信号发出时,程序仍然会去执行中断子程,但由于中断向量没有正确设置,pc指针会跑飞,然后机器会自动复位,重新执行程序。 5)如果中断源采用的是p2.5, 按键用k6,请设计连线,修改l5_int.c 程序完成以中断方式响 应k6 的操作。 答:将 p2.5 引脚连线与 k6

8、相连,其他连线不变,连线图如下: 修改后见 程序见 lab_5 项目,程序 l5_int-1.c 如下: #include io430.h #include in430.h void delay( ) /延时函数 unsigned int j; for (j=0;j0xffff;j+); void blink( ) /led 闪 p2out =bit3; delay(); p2out |= bit3; delay(); void buzz( ) /蜂鸣响 unsigned int i; for (i=0;i3;i+) p2out =bit4; delay(); p2out|= bit4; de

9、lay(); ; void main ( void ) wdtctl = wdtpw + wdthold; /关闭看门狗 /设置引脚 p2.4、p2.3 输出,p2.3 连接 led,p2.4 连接蜂鸣器 p2sel =(bit3+bit4); p2sel2 =(bit3+bit4); p2out|=(bit3+bit4); p2dir|=(bit3+bit4); /设置端口 p2.5 允许中断 p2sel = bit5; p2sel2 = bit5; p2out |=bit5; p2ren |=bit5; p2dir =bit5; p2ies |= bit5; p2ifg =bit5; p2

10、ie |= bit5; _eint(); /总中断允许 for (;) /主循环 blink(); ; #pragma vector=port2_vector _interrupt void port_isr( ) buzz(); p2ifg =bit5; 2. 中断程序编程练习 在实验板上用跳线将按键 k2、k7 分别与单片机的p1.2 和p1.7 相连,编程以中断方式响应按键k2 和k7 的请求:当按下一次k2 键,实验板上的蜂鸣器发出一警报声;当按下一次k7 键,实验板上的发光二极管l2 闪2 次。主循环中控制l5 循环闪亮。 : 答:用跳线将按键 k2、k7 分别与单片机的 p1.2

11、和 p1.7 相连,p2.1、p2.4 分别连接 l2和 l5,p2.3 连接蜂鸣器, 接线图如下: : 修改后见 程序见 lab_5 项目,程序 l5_int-2.c 如下: #include io430.h #include in430.h void delay( ) /延时函数 unsigned int j; for (j=0;j0xffff;j+); void l2blink( ) /l2 闪 2 次 unsigned int i; for (i=0;i2;i+) p2out =bit1; delay(); p2out|= bit1; delay(); ; void l5blink(

12、) /l5 闪 p2out =bit4; delay(); p2out |= bit4; delay(); void buzz( ) /蜂鸣响 p2out =bit3; delay(); p2out|= bit3; delay(); void main ( void ) wdtctl = wdtpw + wdthold; /关闭看门狗 /设置引脚 p2.1、p2.3 、p2.4 输出,p2.1、p2.4 分别连接 l2 和 l5,p2.3 连接蜂鸣器 p2sel =(bit1+bit3+bit4); p2sel2 =(bit1+bit3+bit4); p2out|=(bit1+bit3+bit

13、4); p2dir|=(bit1+bit3+bit4); /设置端口 p1.2、p1.7 允许中断 k2、k7 分别与单 p1.2 和 p1.7 相连 p1sel = (bit2+bit7); p1sel2 = (bit2+bit7); p1out |=(bit2+bit7); p1ren |=(bit2+bit7); p1dir =(bit2+bit7); p1ies |= (bit2+bit7); p1ifg =(bit2+bit7); p1ie |= (bit2+bit7); _eint(); /总中断允许 for (;) /主循环 l5blink(); ; #pragma vector

14、=port1_vector _interrupt void port_isr( ) if (p1ifgbit2)!=0) buzz(); p1ifg =bit2; ; if (p1ifgbit7)!=0) l2blink(); p1ifg=bit7; 思考: 1) 如果按键 k2、k7 分别连接在p2.1 和p2.6 上,如何修改程序以实现任务2 功能? 答: : p2.0、p2.4 分别连接 l2 和 l5,p2.3 连接蜂鸣器,p2.1、p2.6 分别连接按键 k2、k7,接线图如下: 修改后见 程序见 lab_5 项目,程序 l5_int-3.c 如下: #include io430.h

15、 #include in430.h void delay( ) /延时函数 unsigned int j; for (j=0;j0xffff;j+); void l2blink( ) /l2 闪 2 次 unsigned int i; for (i=0;i2;i+) p2out =bit0; delay(); p2out|= bit0; delay(); ; void l5blink( ) /l5 闪 p2out =bit4; delay(); p2out |= bit4; delay(); void buzz( ) /蜂鸣响 p2out =bit3; delay(); p2out|= bit

16、3; delay(); void main ( void ) wdtctl = wdtpw + wdthold; /关闭看门狗 /设置引脚 p2.0、p2.3 、p2.4 输出,p2.0、p2.4 分别连接 l2 和 l5,p2.3 连接蜂鸣器 p2sel =(bit0+bit3+bit4); p2sel2 =(bit0+bit3+bit4); p2out|=(bit0+bit3+bit4); p2dir|=(bit0+bit3+bit4); /设置端口 p2.1、p2.6 允许中断,p2.1、p2.6 分别连接按键 k2、k7 p2sel = (bit1+bit6); p2sel2 = (b

17、it1+bit6); p2out |=(bit1+bit6); p2ren |=(bit1+bit6); p2dir =(bit1+bit6); p2ies |= (bit1+bit6); p2ifg =(bit1+bit6); p2ie |= (bit1+bit6); _eint(); /总中断允许 for (;) /主循环 l5blink(); ; #pragma vector=port2_vector _interrupt void port_isr( ) if (p2ifgbit1)!=0) buzz(); p2ifg =bit1; ; if (p2ifgbit6)!=0) l2bli

18、nk(); p2ifg=bit6; 2) 如果按键 k2、k7 分别连接在 p1.0 和 p2.4 上,如何修改程序以实现任务 2 功能? 答: : p2.1、p2.5 分别连接 l2 和 l5,p2.3 连接蜂鸣器,p1.0、p2.4 分别连接按键 k2、k7,接线图如下: 修改后见 程序见 lab_5 项目,程序 l5_int-4.c 如下: #include io430.h #include in430.h void delay( ) /延时函数 unsigned int j; for (j=0;j0xffff;j+); void l2blink( ) /l2 闪 2 次 unsigne

19、d int i; for (i=0;i2;i+) p2out =bit1; delay(); p2out|= bit1; delay(); ; void l5blink( ) /l5 闪 p2out =bit5; delay(); p2out |= bit5; delay(); void buzz( ) /蜂鸣响 p2out =bit3; delay(); p2out|= bit3; delay(); void main ( void ) wdtctl = wdtpw + wdthold; /关闭看门狗 /设置引脚 p2.1、p2.3 、p2.5 输出,p2.1、p2.5 分别连接 l2 和

20、l5,p2.3 连接蜂鸣器 p2sel =(bit1+bit3+bit5); p2sel2 =(bit1+bit3+bit5); p2out|=(bit1+bit3+bit5); p2dir|=(bit1+bit3+bit5); /设置端口 p1.0、p2.4 允许中断,p1.0、p2.4 分别连接按键 k2、k7 p1sel = bit0; p1sel2 = bit0; p1out |=bit0; p1ren |=bit0; p1dir =bit0; p1ies |= bit0; p1ifg =bit0; p1ie |= bit0; p2sel = bit4; p2sel2 = bit4;

21、p2out |=bit4; p2ren |=bit4; p2dir =bit4; p2ies |= bit4; p2ifg =bit4; p2ie |= bit4; _eint(); /总中断允许 for (;) /主循环 l5blink(); ; #pragma vector=port1_vector #pragma vector=port2_vector _interrupt void port_isr( ) if (p1ifgbit0)!=0) buzz(); p2ifg =bit3; ; if (p2ifgbit4)!=0) l2blink(); p2ifg=bit4; 3. 采用事件

22、标志处理中断 程序 l5_inta.c 和l5_intb.c(见后页),描述其实现功能。在实验板上将p1.4 与一个按键的控制端相连, p1.6 与蜂鸣器的控制端相连。 比较l5_inta.c 和l5_intb.c 二者在编程实现上有何不同。注意各自中断函数执行时间的长短。 用l5_intb.c 的方法,改写任务2 的编程。 答: 程序见lab_5 项目下程序l5_inta.c与 程序见lab_5 项目下程序l5_intb.c在实验板上进行比较情况如下: 程序a和程序b实现的功能相同:用p1.4作为中断源,当p1.4接收到中断信号时,控制蜂鸣器响一声。不同的是程序a把控制蜂鸣器鸣叫的过程放在中

23、断程序中,而程序b仅仅在中断程序中设置了一个事件标志,而把控制蜂鸣器鸣叫放在了while循环中,这样每当事件标志被响应时,蜂鸣器就会鸣一声。因此程序a的中断子程执行时间长于程序b。 用 用 l5_intb.c 的方法 任务 2 2 修改编程:用跳线将按键 k2、k7 分别与单片机的 p1.2 和 p1.7 相连,p2.1、p2.4 分别连接 l2 和 l5,p2.3 连接蜂鸣器, 接线图如下: : 修改后见 程序见 lab_5 项目,程序 l5_intb- -1 1c .c 如下: #include io430.h #include in430.h int flag=0; void delay

24、( ) /延时函数 unsigned int j; for (j=0;j0xffff;j+); void l2blink( ) /l2 闪 2 次 unsigned int i; for (i=0;i2;i+) p2out =bit1; delay(); p2out|= bit1; delay(); ; void l5blink( ) /l5 闪 p2out =bit4; delay(); p2out |= bit4; delay(); void buzz( ) /蜂鸣响连 p2.3 p2out =bit3; delay(); p2out|= bit3; delay(); void main

25、( void ) wdtctl = wdtpw + wdthold; /关闭看门狗 /设置引脚 p2.1、p2.3 、p2.4 输出,p2.1、p2.4 分别连接 l2 和 l5,p2.3 连接蜂鸣器 p2sel =(bit1+bit3+bit4); p2sel2 =(bit1+bit3+bit4); p2out|=(bit1+bit3+bit4); p2dir|=(bit1+bit3+bit4); /设置端口 p1.2 连 k2、p1.7 连 k7 允许中断 p1sel = (bit2+bit7); p1sel2 = (bit2+bit7); p1out |=(bit2+bit7); p1r

26、en |=(bit2+bit7); p1dir =(bit2+bit7); p1ies |= (bit2+bit7); p1ifg =(bit2+bit7); p1ie |= (bit2+bit7); _eint(); /总中断允许 for (;) /主循环 l5blink(); if (flag=1) buzz(); flag=0; if (flag=2) l2blink(); flag=0; #pragma vector=port1_vector _interrupt void port_isr( ) if (p1ifgbit2)!=0) flag=1; p1ifg =bit2; ; if

27、 (p1ifgbit7)!=0) flag=2; p1ifg=bit7; 4 (提高)按键抖动处理 程序 l5_key.c 见后页, 其功能是用中断方式相应与 p1.2 连接的按键,计数按键的次数,并将所计的次数用8 个发光二极管显示出来。运行该程序,并操作按键,观察实际操作的次数与显示值之间的关系。编程改进l5_key.c 程序,用软件方式去除按键抖动的影响。 说明: 通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合(按下)及断开(释放)的瞬间均伴随有一连串的抖动,产生电压毛刺,见图

28、5-1机械按键的电压变化图。 在一次按键过程中,因为电压毛刺的产生,会有若干次下降沿和上升沿。采用下降沿判断时,只有第一次下降沿是真正的按键事件,其它是由于按键抖动带来的毛刺,不是按键事件。去除这些毛刺带来的影响,称为按键消抖或去抖。软件编程处理比较简单的方法是,在响应了第一次下降沿后,在中断函数中加入一定的延时,躲过其它电压毛刺的产生时间。 答: 通过在实验板测试见 程序见 lab_5 项目 下程序 l5_key.c ,显示按键次数大于实际数。 改进在按键中断程序增加延时函数,调整延时长短,使实际按键数与显示数值大致相等。 修改后见 程序见 lab_5 项 项 目,程序 l5_key- -1

29、 1c .c 如下: #include io430.h #include in430.h unsigned int number=0; /记录响应按键次数 void delay( ) /延时函数 unsigned int j; for (j=0; j0xffff; j+); int main( void ) wdtctl = wdtpw + wdthold; /关闭看门狗 _disable_interrupt(); /_dint(); 禁止总中断 p2sel=0; /置 p2 为基本 i/o 功能 p2sel2=0; p2out=0xff; /置 p2 输出的初值 p2dir=0xff; /置

30、 p2 为输出方向 p1sel = bit2; /置 p1.2 允许中断连 k3 p1sel2 = bit2; p1out |=bit2; p1ren |=bit2; p1dir =bit2; p1ies |= bit2; p1ifg =bit2; p1ie |= bit2; _enable_interrupt(); /_eint(); 总中断运行 while(1) ; #pragma vector=port1_vector _interrupt void port_int(void) if( (p1ifgbit2)!=0 ) delay(); /增加延时函数,避开毛刺 if ( (p1ifg

31、bit2)!=0 ) number+; p2out=number; p1ifg =bit2; 思考: : 1.延时函数加在按键中断程序的什么位置? 为什么? 答:延时函数在按键中断程序接收到信号之前,根据分析,需要在响应了第一次下降沿后,加入一定的延时,躲过其它电压毛刺的产生时间。 2.延时函数的延时长短如何控制? 答:通过实验观察可以发现,改进之前,二进制显示的数值明显大于实际按键数,而改进之后,两者数值大致相等以此来调整延时长短。 3.除延时方法去抖外,有没有其他的方法可去抖?可上网查找相关资料了解。 答:在键数较少时可用硬件方法消除键抖动,如:rs 触发器为常用的硬件去抖。 实验 6 基

32、本时钟和低功耗模式: 1. 数字示波器的使用 1)将信号源的波形在示波器上显示出来,掌握测量周期、频率、峰峰值的方法; 答:用示波器测得信号源的周期 t=20us、频率 f=1.000khz、峰峰值 v=3.18v。 2)用导线将实验板的地信号与示波器的地信号相连,测量实验板上的 vcc 电源信号是否正常。 答: : 测得实验板上 vcc 信号正常,vccmax=3.76v,vccmin=3.52v,vccavg=3.66v。 2. 测试上电复位系统的 aclk 、和 smclk 时钟频率 新创建的一个msp430g2553 项目,在给出的main.c 基础上,编程输出单片机上电复位后的acl

33、k、和smclk 时钟,用示波器测量其频率值,记录下来。 答:程序需要置引脚 p1.0、p1.4 分别输出 aclk、smclk,需要确认外部晶振连上,输出的 aclk 频率为 f(aclk)=32.7khz,smclk 的频率为 f(smclk)=1.031mhz。接线如下: 见 程序见 lab_6 项目,程序 l6_pin.c 如下: #include io430.h int main( void ) /关闭看门狗 wdtctl = wdtpw + wdthold; /设置 p2.6、p2.7 连接外部晶振 p2sel|=(bit6+bit7); p2sel2=(bit6+bit7); p

34、2dir=bit6; p2dir|=bit7; /设置 p1.0、p1.4 输出 aclk、smclk p1sel|=bit0; p1sel2=bit0; p1dir|=bit0; p1sel|=bit4; p1sel2=bit4; p1dir|=bit4; while(1); 思考 : 1) 实验板上jp8 中间的两个插针接到32.768kh 晶振侧和接到p2.6/p2.7 侧,测得aclk 的结果有何不同? 为什么? 答:是由 32.768khz 低频振荡器控制的,因此比较精确,示波器测量的精确值和理论值相差不大,接到 p2.6/p2.7 侧是由片内低功耗低频振荡器控制的,受环境温度和工作

35、电压影响较大,因此测量值和理论值相差较大。 2) 在debug 下如图6-1,通过view/register 更改system clock 模块控制寄存器值,分别置diva1、diva0=01、11;divs1、divs0=10、11;置lfxt1s0、lfxt1s0=00、10,记录示波器测量得到的aclk(p1.0 输出)和smclk(p1.4 输出)的频率值,填写在表6-1、6-2、6-3 中,掌握时钟模块各控制寄存器相关位的作用。 表 6-1 divaxx 与 aclk 关系 diva1 diva0 aclk 频率值 作用 0 1 1 1 表 6-2 divsxx 与 smclk 关系

36、 divs1 divs0 smclk 频率值 作用 1 0 1 1 表 6-3 lfxt1sxx 与 aclk 关系 lfxt1s1 lfxt1s0 aclk 频率值 时钟来源 0 0 1 0 3) 上电复位后,cpu 工作的时钟信号 mclk 频率值是多少? 答:上电复位后,通过查看基本时钟模块相关寄存器,发现 bcsctl2 寄存器上 selm 位为00,sels 位为则 0,可知 mclk 的时钟源为 dco,smclk 的时钟源也为 dco,因此通过测量上面复位后的 smclk 频率可知 mclk 的频率,由上述可知 f(mclk)=1.031mhz。 3. 掌握基本时钟模块的编程控制

37、 参看附录a 实验板原理图,用跳线将jp8 中的插针信号接到晶振32.768khz 侧,使晶振与单片机的p2.6 和p2.7 相连。编程控制基本时钟模块,设置aclk 分别为下面时钟频率,并通过p1.0输出aclk,用示波器观察: 1) aclk=16.384khz;(时钟源外部晶振二分频,即32768hz/2) 答:p2.6、p2.7 连接外部晶振引脚,通过 p1.0 输出 aclk,观察的 f(aclk)=16.3khz。接线如下图: 见 程序见 lab_6 项目,程序 l6_pin - 1.c 如下: #include io430.h int main( void ) / stop wa

38、tchdog timer to prevent time out reset wdtctl = wdtpw + wdthold; p1sel|=bit0; /设置 p1.0 输出 aclk p1sel2=bit0; p1dir|=bit0; p2sel|=bit6; /设置 p2.6、p2.7 连接外部晶振引脚 p2sel2=bit6; p2dir=bit6; /p2.6 xin 输入 p2sel|=bit7; p2sel2=bit7; p2dir|=bit7; /p2.7 xou 输出 bcsctl1|=diva_1; /设置 aclk 为 2 分频 while(1); 2) aclk=1.

39、5khz;(时钟源vloclk 八分频,即12khz/8) 答:通过 p1.0 输出 aclk,观察的 f(aclk)=1.4khz。 见 程序见 lab_6 项目,程序 l6_pin - 2.c 如下: #include io430.h int main( void ) / stop watchdog timer to prevent time out reset wdtctl = wdtpw + wdthold; p1sel|=bit0; /设置 p1.0 输出 aclk p1sel2=bit0; p1dir|=bit0; bcsctl1|=diva_3; /设置 aclk 时钟源为 vl

40、oclk,并为 8 分频 bcsctl3|=lfxt1s_2; while(1); 思考 :可否通过对时钟模块编程在引脚 p2.4 上输出 aclk? 为什么? 答:不可以,因为根据说明指导书 msp430g2553 的辅助时钟 aclk 是由 p1.0 输出的,内部硬件电路设计结构决定了不能用 p2.4 输出 aclk。 4. dco 出厂校验值的频率检测 1)利用出厂校验值,编程使dco 分别为1mhz、16mhz,通过p1.4 输出,并用示波器测量实际值。 答: : 出厂校验值为 1mhz 时,f 实际=0.991mhz,出厂校验值为 16mhz 时,f 实际=16.17mhz。 以上测

41、试数据说明:dcoclk 是由片内数字可控 rc 振荡器控制的,受环境温度和工作电压的影响较大,因此出厂校验值和实际测量值也存在不小的误差。 见 程序见 lab_6 项目,程序 l6_pin - 3.c 如下: #include io430.h int main( void ) / stop watchdog timer to prevent time out reset wdtctl = wdtpw + wdthold; /关闭看门狗 p1sel|=bit4; /设置 p1.4 输出 smclk p1sel2=bit4; p1dir|=bit4; bcsctl1=calbc1_1mhz; /

42、利用出厂校验值设置 dco 的振荡频率为 1mhz, /其他情况改变 1mhz 就可以了 dcoctl=caldco_1mhz; while(1); 2)(提高)在实验1 例程test_2553.c 基础上,分别编程使主系统时钟工作在(1) mclk = 复位频率/8 约100khz;(2) mclk=dco=16mhz; 两种不同mclk 频率下,观察灯的亮灭速度有何不同,掌握主系统时钟的变化对程序执行速度的影响。 答: : 经实验观察可知,mclk 设置为 100khz 时 led1 灯的闪烁频率比设置为 16mhz 慢了非常多,由此可知主系统时钟是主要提供给 cpu 工作的时钟,mclk

43、 频率越高,cpu 工作速度越快。 (1) mclk = 复位频率/8 约 100khz,程 程见 序见 lab_6 项目,程序 l6_pin - 4.c 如下: #include io430.h void delay( ) /延时函数 unsigned int j; for (j=0;j0xffff;j+); int main( void ) / stop watchdog timer to prevent time out reset wdtctl = wdtpw + wdthold; p2sel=bit0; /设置 p2.0 连接 l1 控制 led1 闪烁 p2sel2=bit0; p

44、2dir|=bit0; bcsctl2|=divm_3; /设置 mclk=复位频率/8 约 100khz; unsigned int i; while(1) for (i=0;i5;i+) p2out =bit0; delay(); p2out|=bit0; delay(); (2) mclk=dco=16mhz,程 程见 序见 lab_6 项目,程序 l6_pin - 5.c 如下: #include io430.h void delay( ) /延时函数 unsigned int j; for (j=0;j0xffff;j+); int main( void ) / stop watch

45、dog timer to prevent time out reset wdtctl = wdtpw + wdthold; p2sel=bit0; /设置 p2.0 连接 l1 控制 led1 闪烁 p2sel2=bit0; p2dir|=bit0; bcsctl1=calbc1_16mhz; /利用出厂校验值设置 dco 的振荡频率为 16mhz dcoctl=caldco_16mhz; unsigned int i; while(1) for (i=0;i5;i+) p2out = bit0; delay(); p2out |=bit0; delay(); 5. 低功耗模式学习 程序 l6

46、_lpm.c 见下,用跳线将p2.3 与l4 短接,将p2.4 用长杜邦线与buzz 短接,p1.1 与 k2短接,并用示波器分别观察p1.0、p1.4 输出的aclk 和smclk,了解低功耗模式的进入和退出。 答:接线如下图: 程 序见lab_6 项目,程序l6_lpm.c 清单(提供电子版): #include io430.h #include in430.h void delay( ) /延时函数 unsigned int j; for (j=0;j0xffff;j+); void blink( ) /led闪 unsigned int i; for (i=0;i5;i+) p2out = bit3; delay(); p2out |=bit3; delay(); ; void buzz( ) /蜂鸣响 unsigned int i; for (i=0;i3;i+) p2out = bit4; delay(); p2out |=bit4; delay(); ; int main ( void ) wdtctl = wdtpw + wdthold; /关闭看门狗 /设置端口p2.3输出,控制led,p2.4输出,控制蜂鸣器 p2s

温馨提示

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

最新文档

评论

0/150

提交评论