cc2530的第三次实验,按键中断控制流水灯
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的第三次实验,按键中断控制流水灯的更多相关文章
- cc2530的第二次实验,用按键控制流水灯
按键控制流水灯 具体想要实现按一下按键,然后单片机的三个灯会以流水灯的形式都亮一遍 实验相关寄存器 实验相关电路 宏定义 #define uint unsigned int #define uchar ...
- AT89S52汇编实现l通过按键中断切换led灯的四种闪烁模式(单灯左移,单灯右移,双灯左移,双灯右移)
;通过P1口控制8路LED的四种闪烁模式,单独LED灯左移,单独LED灯右移,相邻两个灯左移,相邻两个灯右移;通过一个外部中断0来检测按键的跳变沿来切换闪烁模式,第一次按键按下弹起,灯的闪烁状态由单独 ...
- (三)开关检测来控制LED灯的亮灭
开关检测案例一: 具体电路图如下: K1--K4闭合,控制 D1—D4 亮灭 产生的问题: 1.关于 R8 R9 R7 R10 的阻值选择问题,倘若太大的话, 比如10K 不管开关断开还是闭合,好像 ...
- ARM实验5 —— 按键中断实验
key_int按键中断实验 实验内容: 通过开发板上的按键中断控制led灯进行跑马灯并打印信息. 通过简单事例说明猎户座4412处理器的GIC中断处理的应用,设置key2按键连接的引脚为中断模式,当识 ...
- S3C2440—12.按键中断
文章目录 一. 总体 二. CPSR设置 三. 中断源设置 四. 中断控制器设置 五. C中断处理函数 六. 汇编IRQ异常处理程序 七. 源码 一. 总体 要驱动按键中断控制LED亮灭,程序要进行如 ...
- cc2530单片机的第一次实验,流水灯
第一个实验:控制流水灯 P1_0,P1_1,P0_4都连接在发光二极管的负极,所以,当这三个引脚为低电平,也就是0的时候,相应的发光二极管才会亮. 其实这里可以稍微的关注一下寄存器的地址,然后,编程的 ...
- 痞子衡嵌入式:嵌入式MCU中通用的三重中断控制设计
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是嵌入式MCU中通用的三重中断控制设计. 我们知道在 MCU 裸机中程序代码之所以能完成多任务并行实时处理功能,其实主要是靠中断来调度的, ...
- CC2530学习路线-基础实验-GPIO 按键控制LED灯亮灭(2)
目录 1.前期预备知识 1.1 新大陆Zigbee模块按键电路图 1.2 CC2530相关寄存器 1.3 CC2530中断走向图 1.4 使用C语言为51单片机编写中断程序 1.5 *函数指针 2. ...
- 2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系统驱动层和应用层不一样~
本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 ...
随机推荐
- docker-composer 简单教程
原文地址:https://blog.51cto.com/9291927/2310444 Docker快速入门——Docker-Compose 一.Docker-Compose简介 1.Docker-C ...
- kafka的安装和初步使用
简介 最近开发的项目中,kafka用的比较多,为了方便梳理,从今天起准备记录一些关于kafka的文章,首先,当然是如何安装kafka了. Apache Kafka是分布式发布-订阅消息系统. Apac ...
- JOSH是中国的“MicroEJ”~
很多人不了解JOSH,我们推荐大家去看看MicroEJ,我们是中国版的MICROEJ,下面的文章翻译自MICROEJ的官网,让大家直观的了解~ MICROEJ被定位为可连接对象的ANDROID™的小兄 ...
- vue样式绑定、事件监听、表单输入绑定、响应接口
1.样式绑定 操作元素的 class 列表和内联样式是数据绑定的一个常见需求.因为它们都是属性,所以我们可以用 v-bind 处理它们:只需要通过表达式计算出字符串结果即可.不过,字符串拼接麻烦且易错 ...
- ListView 实现进度条显示
代码参考互联网,本人在Win10 + Delphi 10.3.2 社区版中测试通过,现将测试通过的代码分享如下: unit Unit1; interface uses Winapi.Windows, ...
- dedecms5.7执行PHP代码的用法
dedecms5.7执行PHP代码的用法 {dede:php} echo 'test'; {/dede:php}
- 2019-11-29-WPF-如何在绑定失败异常
原文:2019-11-29-WPF-如何在绑定失败异常 title author date CreateTime categories WPF 如何在绑定失败异常 lindexi 2019-11-29 ...
- 线程安全---Day23
最近忙着备考大学四年最后的两科,昨天刚考完大学所有的考试,但是大学专业是机械,但是自己热衷于IT行业,想往IT行业走,希望毕业后能成功进入到IT行业,只希望毕业能找到一份Java开发工程师的工作,这样 ...
- 2019-09-16 PHP CURL CURLOPT参数说明(curl_setopt)
CURLOPT_RETURNTRANSFER 选项: curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 如果成功只将结果返回,不自动输出任何内容. 如果失败返回F ...
- Object.freeze
Object.freeze() 方法可以冻结一个对象.一个被冻结的对象再也不能被修改:冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性.可配置性.可写性, ...