51单片机的中断系统结构
中断允许控制
CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。
EX0(IE.0),外部中断0允许位;
ET0(IE.1),定时/计数器T0中断允许位;
EX1(IE.2),外部中断0允许位;
ET1(IE.3),定时/计数器T1中断允许位;
ES(IE.4),串行口中断允许位;
EA (IE.7), CPU中断允许(总允许)位。
中断请求标志
1、TCON的中断标志
IT0(TCON.0),外部中断0触发方式控制位。
当IT0=0时,为电平触发方式。
当IT0=1时,为边沿触发方式(下降沿有效)。
IE0(TCON.1),外部中断0中断请求标志位。
IT1(TCON.2),外部中断1触发方式控制位。
IE1(TCON.3),外部中断1中断请求标志位。
TF0(TCON.5),定时/计数器T0溢出中断请求标志位。
TF1(TCON.7),定时/计数器T1溢出中断请求标志位。
中断源
中断响应条件
中断源有中断请求;
n此中断源的中断允许位为1;
CPU开中断(即EA=1)。
以上三条同时满足时,CPU才有可能响应中断。
#include "reg51.h"
#include "intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit k1=P3^3;
sbit led=P2^0;
void delay(u16 i)
{
while (i--);
}
//外部中断0条件
void Int0Init()
{
IT0 = 1; //设置外部中断的触发方式为下降沿触发。
EX0 = 1; //开启外部中断0
EA = 1; //中断总开关
}
//外部中断1条件
void Int1Init()
{
IT1 = 1; //设置外部中断1的触发方式为下降沿触发。
EX1 = 1; //开启外部中断1
EA = 1; //中断总开关
}
void main()
{
Int1Init();
while(1);
}
void Int0() interrupt 0
{
delay(1000);
if(k1 == 0)
{
led= ~led;
}
}
void Int1() interrupt 2
{
delay(1000);
if(k1 == 0)
{
led= ~led;
}
}
proteus 8 电路原理图,k3接p32,k4接p33。p32默认高电平,按下k3后,电平拉低,产生下降沿,触发中断0。同样k4按下,触发为中断1。
#include "reg51.h"
#include "intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit k3=P3^2;
sbit k4=P3^3;
sbit led=P2^0;
void delay(u16 i)
{
while (i--);
}
//外部中断0条件
void Int0Init()
{
IT0 = 1; //设置外部中断的触发方式为下降沿触发。
EX0 = 1; //开启外部中断0
EA = 1; //中断总开关
}
//外部中断1条件
void Int1Init()
{
IT1 = 1; //设置外部中断1的触发方式为下降沿触发。
EX1 = 1; //开启外部中断1
EA = 1; //中断总开关
}
void main()
{
Int0Init();
while(1);
}
void Int0() interrupt 0
{
delay(1000);
if(k3 == 0)
{
led= ~led;
}
}
void Int1() interrupt 2
{
delay(1000);
if(k4 == 0)
{
led= ~led;
}
}
关键字:中断系统 外部中断0 外部中断1
引用地址:
51 中断系统 外部中断0 外部中断1
推荐阅读最新更新时间:2024-11-16 20:29
电子钟(DS1302+AT89C2051的红外遥控钟)
;遥控器各按键数据码,可根据不同的遥控器修改对应的键码 muteM EQU 10h ;静音键 闹铃开/关 timerT EQU 0Ch ;菜单键 进入/退出设置状态 leftL EQU 46h ;左移键 rightR EQU 47h ;右移键 upU EQU 19h ;增加键 downD EQU 1dh ;减少键 d_off EQU 16H ;显示键 LED数码管显示/关闭 recall EQU 44H ;日历键 DS1302初始化操作 K_on BIT P3.0 ;闹铃输出 LED1 BIT P3.3 LED2 BIT P3.4 LED3CLK BIT P3.5 ;DS1302 LED4IO BIT P3.7 RST BIT
[单片机]
51计数器进行计数实例
#include bit flg = 0; //标志位 unsigned int counter = 0; //计数值 sbit LED = P1^1; //T0初始化 void InitT0(void) { TMOD = 0x05; //T0计数工作方式1 TH0 = 0xff; TL0 = 0xff; EA = 1; ET0 = 1; TR0 = 1; } //T0中断服务子函数 void Time0_Int(void) interrupt 1 { TH0 = 0xff; TL0 = 0xff; flg = 1; } void delay(volatile unsigned long cnt) { while(cnt--)
[单片机]
用汇编语言实现51单片机内部RAM单元的数据传送到外部RAM
下面是实现将片内RAM30H单元开始的15B的数据传送到片外RAM3000H开始的单元中去的8051单片机汇编语言代码: STRAT:MOV R0,#30H MOV R7,#0FH MOV DPTR,#3000H LOOP: MOV A,@R0 MOVX @DPTR,A INC R0 INC DPTR DJNZ R7,LOOP RET 下面是实现将片内RAM30H单元开始的15B的数据传送到片外RAM3000H开始的单元中去的8051单片机汇编语言代码: STRAT:MOV R0,#30H MOV R7,#0FH MOV DPTR,#3000H LOOP: MOV A,@R0 MOVX @DPTR,A
[单片机]
(C51学习一)如何点亮led灯
1.找出C51最小系统原理图 在网上买的开发板,一定有光碟的,光碟中一定有原理图,先找出最小系统原理图,这个原理图标明了CPU的 I/O接口都接什么了。并且给I/O口都标上号 2.找出LED模块原理图 由下图可以看到,P1组I/O口的8个接口分别接着一个LED灯,并且当P1上的某个口为低电平时,LED就会亮。 3.进行编程 #include sbit LED0=P1^0; // 用自己写的标志 LED0 表示 I/O口 P1^0 sbit LED1=P1^1; void main() { LED0 = 0; //P1^0口给低电平 LED1 = 0; //P1^1口给低电平 while(1
[单片机]
C8051FC40扩展PM23L08扩展电路
C8051FC40扩展PM23L08扩展电路 单片机对串口的扩展已经有很成熟的范例,本文不再列出,下面只列出单片机控制FRAM的原理图。在本系统中采用的是地址信号复用模式,这样可以产生ALE 信号。FM20LO8自身带有锁存器,并且片选信号CE不能像SRAM一样直接接地,需要一个预充电时间,这个信号有HC04和HC32产生。而且地址信号需要在他的下降沿进行锁存,具体扩展如图2所示。
[模拟电子]
8051单片机串口编程知识总结
最近,把收集到有关单片机串口编程的资料总结一下,有利于把工作做好,材料整理如下: 单片机串口通信原理: 1、51系列单片机的串口有4个模式,可分别用作串并转换、并串转换、异步串行通信(2种模式)。异步串行通信中,有1+8+1和1+8+1+1两种帧格式,多机通信是特殊的通信方式。 2、基本原理是两组移位寄存器。将并行通信转换成串行通信模式(发送部分),或反之(接收部分)。可全双工运行。 3、速度通过移位脉冲决定。具体一般通过定时器1的自动装载模式产生的溢出脉冲给出。 4、电平上采用的是CMOS逻辑。 5、以上是物理层和数据链路层的单片机串口模块的约定,其他层需要软件人员根据需要自行把握。另外,电平需要根据实际通信环境做变换,如232
[单片机]
课程设计:矩阵键盘扫描显示(c51反转法)
//矩阵键盘扫描程序 //采用翻转识别法(相对代码少一些) #include reg52.h #define uchar unsigned char #define uint unsigned int uchar key=0; //共阳数码管编码如下(0-15) uchar code table ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e}; //函数声明 void display(uchar Duan_value); void delay(uchar t); void
[单片机]
基于AT89C2051单片机制作的厨房定时器
该制作以5分钟为一个计时单位,最多计时1小时,3V电池做电源,有蜂鸣器报警,工作时功耗为6mA左右(使用AT89C2051),可以使用3V钮扣电池,具有自动关机功能,不运行时耗电量可以忽略不计,单键操作,简单方便。 电路图 VT1为PNP的9012,当电路不工作时VT1的B极由R4得到高电平,VT1截止,AT89C2051无法从VT1的E极得到电源。当SW1按下时,VT1的B极通过VD2和SB1接地,由高电平转为低电平,VT1导通。此时AT89C2051得电,同时通过C1,R4复位。复位成功后P3.7升为高电平,使得VT2导通,从而使VT1的B极保持低电平状态,这时就算松开SB1,VT1也不会截止而导致MCU失
[工业控制]