嵌入式学习——51单片机——(按键、中断)day17

  1. 按键程序

1.1 主函数

cpp 复制代码
#include <reg51.h>
#include "digit.h"
#include "key.h"

void delay(int n)
{
	while (n--);
}

int main(void)
{
	int cnt = 0;

	init_digit();
	init_key();

	while (1)
	{	
	  	if (2 == key_pressed())
		{
			cnt++;
			delay(0x5fff);
		}
		show_number(cnt);
	}
	
	return 0;
}

1.2 头文件

cpp 复制代码
#ifndef _KEY_H_
#define _KEY_H_

extern void init_key(void);
extern int key_pressed(void);

#endif 

1.3 源文件

cpp 复制代码
#include <reg51.h>
#include "digit.h"
#include "key.h"

void init_key(void)
{
	P1 |= ((1 << 4) | (1 << 5) | (1 << 6) | (1 << 7));
	P3 |= (1 << 5);
}

int key_pressed(void)
{
	int ret = 0;

	if (0 == (P1 & (1 << 4)))
	{
		ret = 1;
	}
	else if (0 == (P1 & (1 << 5)))
	{
		ret = 2;
	}
	else if (0 == (P1 & (1 << 6)))
	{
		ret = 3;
	}
	else if (0 == (P1 & (1 << 7)))
	{
		ret = 4;
	}
	else if (0 == (P3 & (1 << 5)))
	{
		ret = 5;
	}
	
	return ret;	
}
  1. 中断

2.1 中断的定义

当CPU正在处理某件事情的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完后,再回到原来中断的地方继续原来的工作。

2.2 中断源的定义

可以引发中断是事件、条件或者硬件模块

常见的中断源

  1. 外部中断源

  2. 定时器、计数器中断源

  3. 串口中断源

  4. ADC中断源

  5. 比较器中断源

  6. 看门狗定时器中断源

2.3 中断执行流程

  1. 中断源发出中断请求

  2. CPU查询中断是否被运行、以及中断是否被屏蔽

  3. CPU考察中断优先级

  4. CPU保护现场

  5. 执行中断服务函数

  6. 恢复现场

2.4 外部中断的初始化函数

cpp 复制代码
void init_eint(void)   
{
	P3 |= ((1 << 2) | (1 << 3) );
	IE |= ((1 << 7) | (1 << 2) | (1 << 0));
	TCON |= ((1 << 0) | (1 << 2));

}

2.5 外部中断的的作用函数

cpp 复制代码
void eint0_handeler(void) interrupt 0
{
	delay(0x1fff);
	cnt++;
}

void eint1_handeler(void) interrupt 2
{
	delay(0xfff);
	cnt--;
}

3.定时器

相关推荐
魔力女仆7 小时前
分享一个 JS 鼠标跟随贪吃蛇背景库
开发语言·javascript·计算机外设
2401_894915538 小时前
GEO 搜索优化完整源码从零部署:环境配置、集群搭建全流程
开发语言·python·tcp/ip·算法·unity
MartinYeung58 小时前
[论文学习]自主性如何重塑个性化对LLM智能体隐私关切与信任的影响
人工智能·学习
麻瓜老宋8 小时前
AI开发C语言应用按步走,表达式计算器calc的第二十二步,分号赋值链式修复、TOKEN_ASSIGN
c语言·开发语言·atomcode
FellAveal9 小时前
【Go语言入门学习笔记】Part18.工作池与WaitGroup(也即协程池)
笔记·学习·golang
xqqxqxxq9 小时前
Java Socket 多人聊天室(私聊+群聊)技术笔记(V4版本)
java·网络·笔记
菜鸟‍9 小时前
【论文学习】MICCAI 2024 || SGSeg:通过自引导机制实现胸部X光片语言引导分割的无文本推理
人工智能·深度学习·学习
龙仔7259 小时前
人大金仓OS_Core数据库自动备份实施笔记(银河麒麟Linux)
linux·数据库·笔记·备份·人大金仓
lazy H9 小时前
Git clone 怎么用?克隆项目及常见问题完整教程
大数据·git·后端·学习·搜索引擎·github
菜鸟‍10 小时前
【论文学习】arxiv 2024 || RoSIS:基于鲁棒框架重新审视文本提示式手术器械分割
人工智能·学习·计算机视觉