S1按键中断控制LED灯

2020-06-30来源: eefocus关键字:S1按键  中断控制  LED灯

学习MSP430F5529单片机的第一个正式的程序(是CCSV5里面的例程,自己改了一点),所以注释有点弱智,大神请路过~


代码如下:


#include  

int main(void) {

    WDTCTL = WDTPW | WDTHOLD;      

          /*

            关闭看门狗计时器,因为看门狗寄存器会不定时重置程序,即重新开始运行;

            而且关闭看门狗定时器可以省去一些设置定时计数值处理的代码

          */

P1DIR|=BIT0;                     //将P1.0设置为输出,即LED1

      /*

        BITx的值等于第x位为1,其余位为0的二进制数的值(二进制数最低位为第0位)

        PxDIR为方向寄存器,用来切换IO口的两套电路(即输入和输出电路,所谓输入输出就是说改接口是用于接

        收电信号还是输出电信号);

      */

P2DIR&=~BIT1;                    //将P2.1设置为输入,即S1

P2REN|=BIT1;                     //启用上/下拉电阻功能

P2OUT|=BIT1;                     //与P2REN|=BIT1;共同完成I/O口上拉电阻功能

          /*

            以上两行代码实现I/O口上拉电阻功能;PxREN为IO口的上下拉寄存器,用于控制IO口是否启用上下拉电阻

            在REN寄存器为1时,OUT寄存器控制具体使用上拉电阻还是下拉电阻;当该口为输出时将自动根据OUT的

            值选择上/下拉电阻,当该口为输入时,0代表下拉电阻,1是上拉电阻。

          */


P2IES|=BIT1;                     //选择下降沿触发中断,即当P2.1口电平出现下降时触发中断标志

      //只知道IES为中断边沿选择寄存器,具体什么作用还没搞清楚。。

P2IFG &= ~BIT1;                  //清除P1.1口的中断标志位

      //IFG是中断标志位寄存器,值为1时表示该口处于中断状态,执行中断操作

P2IE|=BIT1;                      //打开P1.1口的中断功能

      //PxIE为中断使能寄存器,值为1时表示允许接收该口中断

__bis_SR_register(LPM4_bits+GIE);      //进入低功耗模式4,同时打开全局中断

      //(这句还没弄明白)

// __no_operation();    //(没明白+1)

return 0;

}

#pragma vector=PORT2_VECTOR          //宏定义中断口的中断服务地址

          //只知道P1中断地址是 PORT1_VECTOR ,P2口是 PORT2_VECTOR ;也不知道为什么要宏定义

__interrupt void port_1 (void)       //定义中断函数,即中断服务程序

          //好像是说中断时会进入这个函数,但是不明白为什么为什么会进入函数,上面明明没有进入函数的语句

{

P1OUT ^= BIT0;                   //进入中断服务程序后改变P1.0口即LED1的状态

      //异或 能改变P1输出口的电平状态,即改变灯的状态

P2IFG &= ~BIT1;                  //清除P2.1口即S1的中断标志位

      //将P2.1即S1的中断标志位清0,以便退出中断状态(不清0的话程序会一直认为处于中断状态)

}

关键字:S1按键  中断控制  LED灯 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic501633.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:msp430g2553按键控制LED亮灭
下一篇:MSP430F5438学习笔记 TA1溢出中断加比较匹配中断

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

AVR PS/2 硬件中断控制程序
/*********************************************************************目    的:   建立操作PC键盘的示例程序(硬件中断读取PS/2接收到的数据)目标系统:   基于AVR单片机                          
发表于 2020-06-27
AT89C51外部中断实验实现8盏灯的同时亮灭(用外部开关控制
,导入.hex文件即可!点击ok,按下运行键!开关在这里!!!!手势键哦!按下后8个灯的状态会发生明显变化哦!就是这么神奇!从图片中可以看到,开关闭合灯亮,抓拍的,拍了好几张才成功!希望大家支持!!!大家也可以将控制端由INT0改为INT1口!电路图只需小小的改动,将原来接INT0转换接到INT1。代码改为:#include<reg51.h>sbit K=P3^3;/*void delays(){  unsigned i,j,k;  for(i=20;i>0;i--)    for(j=20;j>0;j--)   for(k=248;k>0;k
发表于 2020-06-21
AT89C51外部<font color='red'>中断</font>实验实现8盏灯的同时亮灭(用外部开关<font color='red'>控制</font>)
中断响应流水灯控制程序
#include<reg51.h>void delay(unsigned int i);int main(void) using 0{ int i=1; EA=1; EX0=1; IT0=1; P0=~0; while(1) { for(;i<=128;i*=2) { P0&=~i; delay(500); P0|=i; } i=1; } while(1);}void delay(unsigned int i){ unsigned int j; for(;i>0;i--)    for(j=0;j<333;j++);}void int0()interr
发表于 2020-06-20
<font color='red'>中断</font>响应流水灯<font color='red'>控制</font>程序
定时器0,中断控制LED闪烁
#include <reg52.h>                #include <stdio.h>     #define uchar unsigned char #define uint unsigned int sbit LED = P2^2;void timer_init(){    TMOD |= 0x01;      TH0 = 0x4C;    TL0 = 0x00;&nbs
发表于 2020-06-20
用定时器T0的中断控制8位LED闪烁
#include<reg52.h>#define uchar unsigned char#define uint unsigned intuint i;void main(){ i=0; EA=1;                                 //打开总中断 TMOD=0x01;                     
发表于 2020-06-19
mini2440裸机程序--LED灯(C语言)
看了mini2440配套光盘里面的例子,C语言的点亮LED程序略显复杂。当时打开工程,看到这么多文件,顿时傻了眼。还好自己能够有良好的心态,慢慢弄。    对于点亮LED灯的C语言程序,相对于汇编程序,除了MDK系统自动添加的启动代码S3C2440.S ,其余的也就和汇编程序的步骤一样了。现在就把程序附在下面:#define  rGPBCON  (*(volatile unsigned long *)0x56000010)#define  rGPBDAT  (*(volatile unsigned long *)0x56000014)#define 
发表于 2020-05-16
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved