STC89C52的四个 外部中断 基本使用方法

这篇具有很好参考价值的文章主要介绍了STC89C52的四个 外部中断 基本使用方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. STC89C52中断系统

中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的。STC89C52系列单片机提供了8个中断请求源,它们分别是:

  • 外部中断0(NT0); 对应I/O :P32
  • 定时器0中断;
  • 外部中断1(INT1); 对应I/O :P33
  • 定时器1中断;
  • 串口(UART)中断;
  • 定时器2中断;
  • 外部中断2(INT2); 对应I/O :P43
  • 外部中断3(INT3) 。 对应I/O:P42

所有的中断都具有4个中断优先级。用户可以用关总中断允许位(EAE.7)或相应中断的允许位来屏蔽所有的中断请求,也可以用打开相应的中断允许位来使CPU响应相应的中断申请:每一个中断源可以用软件独立地控制为开中断或关中断状态:每一个中断的优先级别均可用软件设置。高优先级的中断请求可以打断低优先级的中断,反之,低优先级的中断请求不可以打断高优先级及同优先级的中断。当两个相同优先级的中断同时产生时,将由查询次序来决定系统先响应哪个中断。STC89C52系列单片机的各个中断查询次序如下表所示:STC89C52的四个 外部中断 基本使用方法
相同优先级内的查询次数也就是我们在使用时的中断号: 函数名() interrupt 中断号

2. 示例程序

主函数:

#include "STC.h"//选择对应型号头文件,这里由于重定义不再选择 “reg52.h”
#include "delay.h" 
//#include "uart.h"
#include "ex_interrupt.h"

void main()
{	
	P1=0xff;
	P46 = 1;
	// 初始化外部中断
	Ex0_Init(Mode_1);  //初始化外部中断为模式1,下降沿触发
	Ex1_Init(Mode_0);  //初始化外部中断为模式0,低电平触发
	Ex2_Init(Mode_1);
	Ex3_Init(Mode_0);
	
	while(1)
	{	
		P46=!P46;
		delay_ms(500);	
	}
}

ex_interrupt.h文件:

#ifndef _EX_INTERRUPT_H
#define _EX_INTERRUPT_H
#include "STC.h"
//外部中断子函数声明
void Ex0_Init(uint8 ExMode);
void Ex1_Init(uint8 ExMode);
void Ex2_Init(uint8 ExMode);
void Ex3_Init(uint8 ExMode);

extern uint8 Mode_0;
extern uint8 Mode_1;

//void MCU_PowerDown(); //STC MCU掉电唤醒

/*	STC89C系列 外部中断2,3 定义		*/
/*	如果使用reg52.h或STC89C52的头文件未定义,请取消如下注释	*/

//sfr P4 = 0xe8; 

//sbit INT2 = P4^3;  //中断输入引脚
//sbit INT3 = P4^2:

//sfr XICON = 0xc0;

//sbit PX3 = XICON^7;
//sbit EX3 = XICON^6;
//sbit IE3 = XICON^5;
//sbit IT3 = XICON^4;
//sbit PX2 = XICON^3;
//sbit EX2 = XICON^2;
//sbit IE2 = XICON^1;
//sbit IT2 = XICON^0;
#endif

在 ex_interrupt.c文件中简单配置一下,我这里采用模块化程序,在main()函数中调用初始化函数,并传入触发方式参数。

#include "ex_interrupt.h"

/*****************************************************
 * 函数名: void Ex0_Init()
 * 功	能 : 外部中断INT0 初始化函数
 * 入参数: 中断模式设置(1:下降沿触发, 0:低电平触发)
 * 返回值: 无
 *****************************************************/
void Ex0_Init(uint8 ExMode)
{
	if(ExMode==Mode_0)
	{
		IT0 = 0;
	}	IT0 = 1;				//中断模式设置(1:下降沿触发, 0:低电平触发
		EX0 = 1;				//使能外部中断0
		EA = 1; 				//开总中断
}


/*****************************************************
 * 函数名: void Ex1_Init()
 * 功	能 : 外部中断INT1 初始化函数
 * 入参数: 中断模式设置(1:下降沿触发, 0:低电平触发)
 * 返回值: 无
 *****************************************************/
void Ex1_Init(uint8 ExMode)
{
	if(ExMode==Mode_0)
	{
		IT1 = 0;
	}	IT1 = 1;				//中断模式设置(1:下降沿触发, 0:低电平触发)
		EX1 = 1;				//使能外部中断1
		EA = 1; 				//开总中断
}

/*****************************************************
 * 函数名: void Ex2_Init()
 * 功	能 : 外部中断INT2 初始化函数
 * 入参数: 中断模式设置(1:下降沿触发, 0:低电平触发)
 * 返回值: 无
 *****************************************************/
void Ex2_Init(uint8 ExMode)
{
	if(ExMode==Mode_0)
	{
		IT2 = 0;
	}   IT2 = 1;				//中断模式设置(1:下降沿触发, 0:低电平触发)
		EX2 = 1;				//使能外部中断2
		EA = 1; 				//开总中断
}

/*****************************************************
 * 函数名: void Ex3_Init()
 * 功	能 : 外部中断INT3 初始化函数
 * 入参数: 中断模式设置(1:下降沿触发, 0:低电平触发)
 * 返回值: 无
 *****************************************************/
void Ex3_Init(uint8 ExMode)
{
	if(ExMode==Mode_0)
	{
		IT3 = 0;
	}	IT3 = 1;				//中断模式设置(1:下降沿触发, 0:低电平触发)
		EX3 = 1;				//使能外部中断3
		EA = 1; 				//开总中断
}

// ====================================================

/****************************************************
 * 函数名:void ExInt0_ISR() interrupt 0
 * 功	能 :外部中断INT0 服务函数 引脚 P32
 * 返回值:无
 ****************************************************/
void ExInt0_ISR() interrupt 0
{
/* 用户中断服务任务	*/
	P10 = !P10;		//状态取反
}


/****************************************************
 * 函数名:void ExInt1_ISR() interrupt 2
 * 功	能 :外部中断INT1 服务函数 引脚P33
 * 返回值:无
 ****************************************************/
void ExInt1_ISR() interrupt 2
{
/* 用户中断服务任务	*/
	P11 = !P11;		//状态取反
}

/****************************************************
 * 函数名:void ExInt2_ISR() interrupt 6
 * 功	能 :外部中断INT2 服务函数引脚P43
 * 注	意 :在使用外部中断2时需要定义 P43 和 XICON寄存器,见.h文件
 * 返回值:无
 ****************************************************/
void ExInt2_ISR() interrupt 6
{
/* 用户中断服务任务	*/
	P12 = !P12;		//状态取反
}


/****************************************************
 * 函数名:void ExInt3_ISR() interrupt 7
 * 功	能 :外部中断INT3 服务函数   引脚P42
 * 注	意 :在使用外部中断3时需要定义 P42 和 XICON寄存器,见.h文件
 * 返回值:无
 ****************************************************/
void ExInt3_ISR() interrupt 7
{
/* 用户中断服务任务	*/
	P13 = !P13;		//状态取反
}


/***************************************************
* 函数名: void MCU_PowerDown()
* 功 能 : STC89C52系列单片机外部中断0(下降沿)唤醒掉电模式
		任何方式均可设置 掉电模式 并非只有外部中断
* 返回值: 无
* 使用说明:若使用请 将该函数放在主循环中
****************************************************/
void MCU_PowerDown()
{
	INT0=1;					//ready read INTO port
	while(!INT0);		// check INTO
	_nop_();				//空语句 延时
	_nop_();
	PCON = 0x02;		//MCU power down 唤醒掉电模式
	_nop_();
	_nop_();
	P1++;
}

3. 总结

经过对STC89C52四个外部中断的简单配置 使用,可见其和传统51单片机具有相似性,继承了传统控制方式,又添加了新的可用外设。但其中需要注意,对于STC89C52RC的P4端口的使用,在官方的头文件和keil 环境中的reg52.h中是没有定义的,外部中断INT2和INT3的控制寄存器,各位也没有定义。所以用户若要使用这两个额外中断,需要更具官方手册自行定义。但也要注意,区分不同系列,比如STC89C52RC的XICON寄存器首地址为:0xc0; P4端口的首地址为:0xe8;而在12系列中则不是这个对应关系了。文章来源地址https://www.toymoban.com/news/detail-443663.html

到了这里,关于STC89C52的四个 外部中断 基本使用方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STC89C52RC最小系统板

    Author:Once Day “漫漫长路,有人对你微笑过嘛…” Solemnly declare:知识产权、正确性等皆未明确,因此仅且只能供学习交流之用,切莫他用!!!本文章所有者不对任何人因使用本文章内容引发的任何直接或间接损失承担责任,不论因何种原因导致或者基于何种法律理论,即

    2023年04月19日
    浏览(31)
  • 什么是STC89C52单片机

    STC89C52是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In-system programmable)的可反复擦写10000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构[1],芯片内集成了通用8位中央处理器和ISP Flash存储单元,功

    2024年02月13日
    浏览(27)
  • 你知道什么是STC89C52RC吗?

    目录 一、什么是STC89C52RC 二、STC89C52RC由什么构成 三、STC89C52RC各部分如何使用 四、STC89C52RC如何进行编程 五、怎么使用STC89C52RC 六、为何使用STC89C52RC STC89C52RC是一种基于8051架构的单片机芯片,由中国的STC公司生产。它包含52KB的闪存程序存储器,1KB的RAM数据存储器,以及一系列

    2024年02月04日
    浏览(38)
  • 第七章、stc89c52中的串行口通信

    串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信。 STC89C52系列单片机内部集成有一个功能很强的全双工串行通信口 UART (Universal Asynchronous Receiver Transmitter,通用异步收发器),与传统8051单片机的串口完全兼容。设有

    2024年02月07日
    浏览(25)
  • 【mcuclub】STC89C52单片机最小系统讲解

        3.1、主芯片 STC89C52是STC公司生产的一种低功耗、高性能8位微控制器 器件参数: 1、增强型8051单片机,指令代码完全兼容传统8051 2、工作电压:5.5V~3.3V 3、工作频率范围:0~40MHz,实际工作频率可达48MHz 4、用户应用程序空间为8K字节(程序空间) 5、片上集成512 字节RAM(

    2024年02月03日
    浏览(62)
  • STC89C52RC单片机原理图详解

    目录 1、单片机整体模块 2、 LED模块 3、独立按键模块 4、数码管模块 5、LCD1602模块 6、矩阵按键模块​编辑 7、串口通信模块 8、LED点阵屏模块 单片机使用的是TTL电平(一种电平的规范),规定为0V为低电平,5V为高电平; 字母上有一横,意为低电平有效。 单片机上电时,所有

    2024年02月05日
    浏览(34)
  • STC89C52RC的定时器/计数器

    目录 一、STC89C52RC的定时器/计数器 二、定时器/计数器的工作方式如何选择 三、使用Timer0实现1秒定时 四、使用Timer1实现计数器功能 STC89C52RC芯片内置了2个定时器/计数器(Timer0和Timer1),这两个模块可以用于实现定时和计数功能。 这两个定时器/计数器模块的主要特性如下:

    2024年02月07日
    浏览(33)
  • 51单片机(二)8051内核及STC89C52介绍

    我们现在经常使用的STC89C52RC单片机就是基于8051内核的,它是深圳宏晶科技生产的一款单片机,它与MCS-51兼容,下面开始介绍STC89C52RC单片机。 1. STC89C52RC的兼容型号         STC89C52RC兼容 STC89C51RC,STCLE51RC,STC89C53RC,STC89LE52RC等。 以下是完整型号列表: 我们平时用的stc89c52已经能

    2024年02月06日
    浏览(35)
  • 基于STC89C52RC设计的心形流水灯设计

    基于STC89C52RC设计的心形流水灯设计 一·硬件设计分析 1.1 主控电路 主控单片机选择为STC89C52RC的 LQFP-44(10x10)封装 注意: 使用51单片机需要注意,如果需要使用的单片机的P0口,则需要在P0的IO口上接上一个4.7K-10K左右的上拉电阻。   上拉电阻的作用: 给单片机的I/O口拉高电平

    2024年02月08日
    浏览(33)
  • STC89C52驱动W25Q32测试笔记

    STC89C52是经典的C51单片机,该芯片不自带硬件SPI接口,正好有手上一块W25Q32的存储模块(某宝上买的2.2元),试着使用89C52模拟SPI接口驱动W25Q32,在驱动的过程中遇到了几个问题,首先的问题是电平不匹配,其次是对芯片datasheet资料的解读,关于W25Qx的资料基本上是全英文的资

    2024年02月11日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包