cc2530的第三次实验:按键中断控制流水灯

效果为按一次按键,流水灯亮一次

实验相关电路图:

实验相关寄存器:

初始化函数

//初始化LED灯
//设置P1SEL,通用为0,外设为1 11111100
P1SEL &=~0x03; //设置P0SEL, 11101111
P0SEL &= ~0x10; //设置P1DIR,输出为1,输入为0 00000011
P1DIR |= 0x03; //设置P0DIR 00010000
P0DIR |= 0x10; //初始化按钮和中断
//初始化按钮
//初始化P0SEL,通用为0 11111101
P0SEL&=~0x02;
//初始化P0DIR,输入为0 11111101
P0DIR&=~0x02; //初始化中断
//设置引脚中断 1为中断使能 00000010
P0IEN |= 0x02;
//设置端口中断
IEN1=1;
//设置端口中断触发方式 1为中断使能
IEN1|=0x20;
//设置总中断
EA=1;
//清空标志位
P0IFG=0;

中断服务函数


//中断服务函数
#pragma vector = P0INT_VECTOR //这一行的P0INT_VECTOR是中断源的名称吗?
__interrupt void P0ISR(void)
{
//清除端口中断标志位
P0IFG=0; //LED灯流水亮一遍
BLink(); //清除端口中断标志位
P0IF=0; }

上面的代码一定要注意P0IFG一定要在P0IF之前清除,话说P0IF与P0IFG到底是干啥用的?他们之间什么关系,端口的标志寄存器?(记得查一下)

P0IFG是端口0中断状态标志,P0IF是cpu内中断标志寄存器,什么鬼,没弄明白啊,问一下老师吧!

全部代码


#include <ioCC2530.h> typedef unsigned int uint;
typedef unsigned char uchar;
#define LED1 P1_0
#define LED2 P1_1
#define LED3 P0_4
#define BUTTON1 P0_1 uint time=300; //延迟函数
void Delay(uint time)
{
for(uint i=0;i<time;i++)
for(uint j=0;j<1070;j++);
} //初始化函数
void Init(void)
{
//初始化LED灯
//设置P1SEL,通用为0,外设为1 11111100
P1SEL &=~0x03; //设置P0SEL, 11101111
P0SEL &= ~0x10; //设置P1DIR,输出为1,输入为0 00000011
P1DIR |= 0x03; //设置P0DIR 00010000
P0DIR |= 0x10; //初始化按钮和中断
//初始化按钮
//初始化P0SEL,通用为0 11111101
P0SEL&=~0x02;
//初始化P0DIR,输入为0 11111101
P0DIR&=~0x02; //初始化中断
//设置引脚中断 1为中断使能 00000010
P0IEN |= 0x02;
//设置端口中断
IEN1|=0x20;
//设置端口中断触发方式 1为下降沿触发
PICTL|=0x01;
//设置总中断
EA=1;
//清空标志位
P0IFG=0; } void BLink()
{
Delay(time);
LED1=0;
LED2=1;
LED3=1;
Delay(time);
LED1=0;
LED2=0;
LED3=1;
Delay(time);
LED1=0;
LED2=0;
LED3=0;
Delay(time);
LED1=1;
LED2=1;
LED3=1; } //中断服务函数
#pragma vector = P0INT_VECTOR //这一行的P0INT_VECTOR是中断源的名称吗?
__interrupt void P0ISR(void)
{
//清除端口中断标志位
P0IFG=0; //LED灯流水亮一遍
BLink(); //清除端口中断标志位
P0IF=0; } //主函数
void main()
{ Init();
LED3=0;
while(1)
{
//LED3=0;
} //return ; }

这个实验的难点以及重点主要是在初始化中断这个过程,

初始化引脚的寄存器P0IEN|=0x02;

设置端口中断的寄存器IEN1|=0x20;

设置端口中断触发方式PICTL|=0x01;

设置总中断EA=1

清空标志位:P0IFG=0;

cc2530的第三次实验,按键中断控制流水灯的更多相关文章

  1. cc2530的第二次实验,用按键控制流水灯

    按键控制流水灯 具体想要实现按一下按键,然后单片机的三个灯会以流水灯的形式都亮一遍 实验相关寄存器 实验相关电路 宏定义 #define uint unsigned int #define uchar ...

  2. AT89S52汇编实现l通过按键中断切换led灯的四种闪烁模式(单灯左移,单灯右移,双灯左移,双灯右移)

    ;通过P1口控制8路LED的四种闪烁模式,单独LED灯左移,单独LED灯右移,相邻两个灯左移,相邻两个灯右移;通过一个外部中断0来检测按键的跳变沿来切换闪烁模式,第一次按键按下弹起,灯的闪烁状态由单独 ...

  3. (三)开关检测来控制LED灯的亮灭

    开关检测案例一: 具体电路图如下: K1--K4闭合,控制 D1—D4 亮灭 产生的问题: 1.关于 R8 R9 R7 R10 的阻值选择问题,倘若太大的话,  比如10K 不管开关断开还是闭合,好像 ...

  4. ARM实验5 —— 按键中断实验

    key_int按键中断实验 实验内容: 通过开发板上的按键中断控制led灯进行跑马灯并打印信息. 通过简单事例说明猎户座4412处理器的GIC中断处理的应用,设置key2按键连接的引脚为中断模式,当识 ...

  5. S3C2440—12.按键中断

    文章目录 一. 总体 二. CPSR设置 三. 中断源设置 四. 中断控制器设置 五. C中断处理函数 六. 汇编IRQ异常处理程序 七. 源码 一. 总体 要驱动按键中断控制LED亮灭,程序要进行如 ...

  6. cc2530单片机的第一次实验,流水灯

    第一个实验:控制流水灯 P1_0,P1_1,P0_4都连接在发光二极管的负极,所以,当这三个引脚为低电平,也就是0的时候,相应的发光二极管才会亮. 其实这里可以稍微的关注一下寄存器的地址,然后,编程的 ...

  7. 痞子衡嵌入式:嵌入式MCU中通用的三重中断控制设计

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是嵌入式MCU中通用的三重中断控制设计. 我们知道在 MCU 裸机中程序代码之所以能完成多任务并行实时处理功能,其实主要是靠中断来调度的, ...

  8. CC2530学习路线-基础实验-GPIO 按键控制LED灯亮灭(2)

    目录 1.前期预备知识 1.1 新大陆Zigbee模块按键电路图 1.2 CC2530相关寄存器 1.3 CC2530中断走向图 1.4 使用C语言为51单片机编写中断程序 1.5 *函数指针 2. ...

  9. 2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系统驱动层和应用层不一样~

    本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 ...

随机推荐

  1. Linux查看系统基本信息,版本信息(最全版)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qq_31278903/article/d ...

  2. 《Interest Rate Risk Modeling》阅读笔记——第四章:M-absolute 和 M-square 风险度量

    目录 第四章:M-absolute 和 M-square 风险度量 思维导图 两个重要不等式的推导 关于 \(M^A\) 的不等式 关于 \(M^2\) 的不等式 凸性效应(CE)和风险效应(RE)的 ...

  3. c++小学期大作业攻略(三)用户系统

    Update at 2019/07/22 14:16 发现一个大坑,我们后期是打算用QSS统一堆样式进行美化的,于是我把之前对QLabel进行的setAlignment全部去掉了,打算统一丢进Qss里 ...

  4. sql server取日期各个组成部分的datename()函数

    SQL Server中的日期类型datetime的默认格式是yyyy-mm-dd hh:mi:ss:mmm,很多时候我们可能会需要获取日期中的某个组成部分,因此SQL Server提供了一个daten ...

  5. Prometheus 告警收敛

    Prometheus 告警收敛 告警面临最大问题,是警报太多,相当于狼来了的形式.收件人很容易麻木,不再继续理会.关键的告警常常被淹没.在一问题中,alertmanger在一定程度上得到很好解决. P ...

  6. python调用MySQL数据库

    在Python中访问mysql数据库中的数据需要三步骤: 1,建立连接 2,操作数据库 3,连接关闭

  7. 【08】Jenkins:关于发布

    写在前面的话 Jenkins 对于我们用户而言,可能中间会有不同的需求,比如自动构建,接口测试,代码质量检测.但其实我们的最终目的还是打包上线.当然,各个公司的项目开发语言会不一样,但是总体而言发布方 ...

  8. FileChannel(API详解)

    1.两种获取通道的方法FileChannel.open()的方式 FileChannel channell = FileChannel.open(Paths.get("a.txt" ...

  9. istio流量管理

    目录 1 准备工作 1.1 在k8s部署istio 1.2 istio自动注入 1.3 应用部署要求 2 负载均衡 3 流量迁移:金丝雀发布 3.1 发布应用 3.2 创建目标规则:Destinati ...

  10. PHP之面向对象(下)

    1,类的创建 class 2,对象的创建 new关键字 3,成员的添加 修饰符 添加成员需要三个修饰符 public 公开的 定义公共的属性和方法,类的外部,内部,子类都可以使用 protected ...