第一范文网 - 专业文章范例文档资料分享平台

MSP430第六讲实验报告

来源:用户分享 时间:2025/10/30 3:00:16 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

一、实验内容:

1. MSP430单片机的复位中断和低功耗模式 2. 中断方式的按键控制实现

3. Lab8 按键中断方式控制led灯的亮灭

4. Lab9 动动手,P4.1中断方式控制P4.6的LED

二、实验步骤:

Lab8 按键中断方式控制led灯的亮灭

设置端口4.0为输入上拉电阻方式获取按键信号,端口4.5为输出方式,按键按下时开启一次中断,中断开启后修改4.5输出对应的LED灯状态,从而实现按键中断方式控制led灯的亮灭。

实现代码:

#include int main(void) {

WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P4DIR |= BIT5; // Set P4.5 to output direction P4REN |= BIT0; // Enable P2.6 internal resistance P4OUT |= BIT0; // Set P2.6 as pull‐Up resistance

P4IES |= BIT0; // P4.0 Hi/Lo edge P4IFG &= ~BIT0; // P4.0 IFG cleared P4IE |= BIT0; // P P4.0 interrupt enabled __bis_SR_register(LPM4_bits + GIE); // Enter LPM4 w/interrupt __no_operation(); // For debugger }

#pragma vector=PORT4_VECTOR __interrupt void Port_4(void) {

P4OUT ^= BIT5; P4IFG &= ~BIT0; }

// P4.5 = toggle // P4.0 IFG cleared

思考题:

1、 Lab8和Lab2的执行结果有何不同?为什么?

答:Lab2的结果是按下按键则灯灭,松开按键灯亮;Lab8是按下按键灯亮\\灭,抬起按键不改变状态。

原因:本实验采用的是中断实现灯的暗灭,按下按钮之后,由于设置的中断条件为下降沿触发,此时中断标志置为1,执行中断程序,改变灯的状态,并清除中断标志,此时抬起按钮,为上升沿,并不会改变中断标志,灯维持之前的状态。Lab2中,按键的状态每转变一次,灯的状态随之改变,因此按下按键灯灭,抬起按键灯亮。

2、 在中断服务程序中,如果把下面的语句注释掉,程序是什么执行结果?为什么? P4IFG &= ~BIT0; // P4.0 IFG cleared

答:按下一次按键后再次按下按键,并不会改变灯的状态。

原因:执行中断程序之后没有清除中断标志,将不会再次执行中断程序。

Lab9 动动手,P4.1中断方式控制P4.6的LED

实现代码:

#include int main(void) {

WDTCTL = WDTPW + WDTHOLD; P4DIR |= BIT5; P4REN |= BIT1; P4OUT |= BIT1; P4IES |= BIT1; P4IFG &= ~BIT1; P4IE |= BIT1; __bis_SR_register(LPM4_bits + GIE); __no_operation(); }

#pragma vector=PORT4_VECTOR __interrupt void Port_4(void) {

P4OUT ^= BIT6; P4IFG &= ~BIT1; }

// Stop watchdog timer

// Set P4.5 to output direction // Enable P2.6 internal resistance // Set P2.6 as pull‐Up resistance // P4.1 Hi/Lo edge // P4.1 IFG cleared

// P4.1 interrupt enabled // Enter LPM4 w/interrupt // For debugger

// P4.6 = toggle // P4.1 IFG cleared

实验改进:

在实验过程中发现,按键时偶尔会产生灯闪烁的情况。因此在程序中增加消抖程序,从而消除按键抖动对实验结果造成的影响。

程序如下:

#include int main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P4DIR |= BIT6; // Set P4.5 to output direction P4REN |= BIT1; // Enable P2.6 internal resistance

P4OUT |= BIT1; P4IES |= BIT1; P4IFG &= ~BIT1; P4IE |= BIT1; __bis_SR_register(LPM4_bits + GIE); __no_operation(); }

#pragma vector=PORT4_VECTOR __interrupt void Port_4(void) { int temp=P4IN&BIT1; __delay_cycles(10000); if(P4IN&BIT1==temp)

{ P4OUT ^= BIT6; P4IFG &= ~BIT1; }

// Set P2.6 as pull‐Up resistance // P4.0 Hi/Lo edge // P4.0 IFG cleared

// P4.0 interrupt enabled // Enter LPM4 w/interrupt // For debugger

//消抖

// P4.5 = toggle // P4.0 IFG cleared

搜索更多关于: MSP430第六讲实验报告 的文档
MSP430第六讲实验报告.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c0nytg77cy94ncj23rqix_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top