C51单片机的中断
80c51单片机外部中断初始化步骤

80C51 单片机外部中断初始化的步骤如下:
1. 设置中断优先级:通过设置特殊功能寄存器IP 来确定中断的优先级。
可以设置不同的优先级以确定中断的响应顺序。
2. 允许中断:通过设置特殊功能寄存器IE 来允许相应的中断源。
将对应中断源的使能位设置为1。
3. 设置触发方式:通过设置特殊功能寄存器TCON 来选择外部中断的触发方式。
可以选择低电平触发、下降沿触发或上升沿触发。
4. 配置中断向量:中断向量是指中断服务程序的入口地址。
可以通过设置特殊功能寄存器Interrupt Vector Table(中断向量表)来指定中断服务程序的入口地址。
这些步骤是80C51 单片机外部中断初始化的一般流程。
具体的实现方式可能会因不同的单片机型号和编译器而有所差异。
在实际编程中,还需要根据具体的需求和硬件连接来进行相应的配置。
51单片机应用技术(C语言版)习题答案(1)

解:计数初值X=216- T/T机=65536-1000/1=64536=FC18H
则TH0 = 0xfc
TL0 = 0x18
定时器0方式1时,TMOD=0x01
查询法参考程序:
#include<reg51.h>
同级或低级中断请求不能打断正在执行的中断;
同级中断源同时提出请求时按自然优先级响应:
单片机复位时,IP各位都被置0,所有中断源为低级中断。
自然优先级顺序是:/INT0→ T0 → /INT1→T1→TI/RI
5.答:有一按键接到单片机外部中断0引脚上,要求编程对按键动作进行计数和显示,达到99后重新由0开始计数(采用中断方式)。
答:MCS-51单片机的存储器采用的是哈佛结构,即把程序存储器和数据存储器分开,有各自的寻址系统、控制信号和功能。
MCS-51单片机存储器的最大寻址空间64KB。
4.MCS-51单片机的时钟周期,状态周期,机器周期,指令周期的含义是什么?当晶振频率为6MHZ时,它们分别为多少?
答:时钟周期:由振荡电路产生的时钟脉冲的周期;
MCS-51单片机提供了4个8位的I/O端口,分别命名为P0、P1、P2、P3,这些端口既可以按字节一次输入或输出8位数据,同时它们的每一位都可以独立进行输出或输出操作。
MCS-51单片机内部有两个16位的定时器/计数器,既可以做定时功能,又可以做计数功能。
2.MCS-51单片机的P0-P3口在功能上各有什么用途和区别?当它们做I/O口使用时,具有哪些特点?
sbit p1_0=P1^0;
void main()
{
TMOD=0x01;
单片机原理及应用教程(C语言版)-第5章 MCS-51单片机的中断系统

5.2.5 中断允许控制
例5-1 假设允许INT0、INT1、T0、T1中断,试 设置IE的值。 (2)汇编语言程序 按字节操作: MOV IE,#8FH 按位操作: SETB EX0 ;允许外部中断0中断 SETB ET0 ;允许定时器/计数器0中断 SETB EX1 ;允许外部中断1中断 SETB ET1 ;开定时器/计数器1中断 SETB EA ;开总中断控制位
IP (B8H)
D7 —
D6 D5 D4 D3 D2 D1 D0 — PT2 PS PT1 PX1 PT0 PX0
PT2:定时器/计数器T2的中断优先级控制位 PT2设置1则T2为高优先级,PT2设置0则T2为 低优先级。 后面各位均是如此,设置1为高优先级,设置0 为低优先级,不再一一赘述。 PS:串行口的中断优先级控制位。 PT1:定时器/计数器1的中断优先级控制位。 PX1:外部中断1的中断优先级控制位。 PT0:定时器/计数器0的中断优先级控制位。 PX0:外部中断0的中断优先级控制位。
5.2.4 中断请求标志
4.定时器/计数器T2中断请求标志
T2CON D7 D6 D5 (C8H) TF2 EXF2 D4 D3 D2 D1 D0
EXF2:定时器/计数器2的外部触发中断请求标志 位。T2以自动重装或外部捕获方式定时、计数,当 T2EX(P1.1)引脚出现负跳变时,TF2由硬件置1, 向CPU请求中断,CPU响应中断后,EXF2不会被硬 件清0,需要在程序中以软件方式清0。
5.2.3 外中断触发方式
TCON格式如下:
D7 D6 D5 D4 D3 D2 D1 D0
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
IT0=1,外中断0为下降沿触发 CPU在每一个机器周期的S5P2期间对P3.2引 脚采样,若上一个机器周期检测为高电平,紧挨着 的下一个机器周期为低电平,则使IE0置1。 IT1:外中断1触发方式控制位。功能同IT0
51单片机中断号

51单片机中断号若51单片机使用C语言编程,51单片机中断号的排列顺序是按中断向量地址由低到高来排列中断号,不是按中断查询的优先级或者中断服务顺序的优先级来排列中断号的。
本内容简单介绍了C51单片机的中断号以及中断向量,方便大家了解和学习关键词:中断向量C51单片机一、中断号二、interrupt 和 using 在C51中断中的使用8051 系列 MCU 的基本结构包括:32 个 I/O 口(4 组8 bit 端口);两个16 位定时计数器;全双工串行通信;6 个中断源(2 个外部中断、2 个定时/计数器中断、1 个串口输入/输出中断),两级中断优先级;128 字节内置RAM;独立的 64K 字节可寻址数据和代码区。
中断发生后,MCU 转到 5 个中断入口处之一,然后执行相应的中断服务处理程序。
中断程序的入口地址被编译器放在中断向量中,中断向量位于程序代码段的最低地址处,注意这里的串口输入/输出中断共用一个中断向量。
8051的中断向量表如下:C51单片机的中断号以及中断向量C51单片机的中断号以及中断向量一、中断号外部中断0 0定时器T0 1外部中断1 2定时器T1 3串口中断 4二、interrupt 和 using 在C51中断中的使用8051 系列 MCU 的基本结构包括:32 个 I/O 口(4 组8 bit 端口);两个16 位定时计数器;全双工串行通信;6 个中断源(2 个外部中断、2 个定时/计数器中断、1 个串口输入/输出中断),两级中断优先级;128 字节内置RAM ;独立的 64K 字节可寻址数据和代码区。
中断发生后,MCU 转到 5 个中断入口处之一,然后执行相应的中断服务处理程序。
中断程序的入口地址被编译器放在中断向量中,中断向量位于程序代码段的最低地址处,注意这里的串口输入/输出中断共用一个中断向量。
8051的中断向量表如下:中断源 中断向量 上电复位 0000H 外部中断0 0003H 定时器0 溢出 000BH 外部中断1 0013H 定时器1 溢出 001BH 串行口中断 0023H 定时器2 溢出 002BH51单片机定时器中断号 [复制链接]admin849 主题 987 帖子 3106 积分 管理员 积分 3106 • 发消息 电梯直达楼主发表于 2013-11-10 23:37:34 | 只看该作者| | 有用的中断号知识void 表示函数类型interrupt 0 ←这里的0表示中断源编号using 1 ←这里的1表示选用的寄存器组别在MCS-51单片机中,单片机类型不同,中断源个数也有差别.例如8051有5个中断源,8052有6个中断源.现以8051为例中断源 中断服务入口地址 中断标志外部中断INT0 0003H IE0定时器T0 000BH TF0外部中断INT1 0013H IE1串行口TI/RI 00023H TI/RI中断优先级别从上到下依次降低interrupt 表示中断优先级,using表示所用工作寄存器组。
c单片机中断详解

例
例62 设置IP寄存器的初始值;使2个外中断请求 为高优先级;其它中断请求为低优先级
1用位操作指令 SETB PX0 ;2个外中断为高优先级 SETB PX1 CLR PS ;串口为低优先级中断 CLR PT0 ;T0低优先级中断 CLR PT1 ;T1低优先级中断
响应中断请求的条件
四 中断返回
▪中断返回由专门的中断返回指令 RETI来实现
五 中断请求的撤消 2 外部中断请求的撤消 1跳沿方式外部中断请求的撤消是自 动撤消的 2电平方式外部中断请求的撤消
六 外部中断的响应时间 外部中断的最短的响应时间为3
个机器周期:
外部中断响应的最长的响应时间为8个机 器周期
注意:如果已在处理同级或更高级中断; 响应时间无法计算
在一个单一中断的系统里;MCS51单片机对 外部中断请求的响应的时间总是在3~8 个机器周期之间
补充:中断服务程序的设计
一 中断服务程序设计的任务 基本任务:
1设置中断允许控制寄存器IE 2设置中断优先级寄存器IP 3对外中断源;是采用电平触发还是跳沿触发 4编写中断服务程序;处理中断请求 前3条一般放在主程序的初始化程序段中
● TF0—T0溢出中断请求标志位 T0 计 数 溢 出 时 ; 由 硬 件 置 1TF0; 向 CPU 申 请 中
断;CPU响应TF0中断时;硬件自动清0TF0;TF0也可由 软件清0 ● TF1—T1的溢出中断请求标志位;功能和TF0类似 TR1 TR0 2个位与中断无关 当MCS51复位后;TCON 被清0;则CPU关中断;所有中断请求被禁止
3 关于C51中断函数的几点说明续
• C51编译器对中断函数编译时会自动在程序的 开始和结束处加上如下内容:开始处对ACC B DPH DPL和PSW入栈;结束时出栈 中断函 数未加using n修饰符时;开始处还要将R0R1 入栈;结束时出栈 如果中断函数加using n修 饰符;则在开始将PSW入栈后还要修改中PSW 的工作寄存器选择位RS0和RS1
单片机定时器中断原理和c语言代码详解

单片机定时器中断原理和C语言代码详解我之前都是用ARM7,单片机基本不会。
但一个项目要用到51,所以克了一下51还是有点模糊,今天调了这个代码之后,对51定时器中断有些心得,拿来和大家共享。
废话不说了,上代码。
#define _1231_C_#include "reg51.h"#include "1231.h"//sbit OE=P2^3;unsigned int SystemTime;void timer0(void) interrupt 1 using 3 //中断部分代码,见下文的释疑{TH0 = 0xdb;TL0 = 0xff;// TF0 = 0;SystemTime++;}void main(){TMOD &= 0xF0;TMOD |= 0x01; //TMOD的值表示定时器工作方式选择TH0 = 0xdb; //写入初始值,初始值可以决定定时多久TL0 = 0xff;//根据下文的木桶比喻的话,如果TH0 = 0x00;TL0 = 0x00;则表示从桶底开始装水。
//TH0 = 0xdb;TL0 = 0xff;可以这样子理解相当于木桶里已经有部分液铅在里面,//TH0和TL0这个两个值表示木桶里液铅的高度,即此时桶里只能从液铅的高度以上开始装水,//TH0 = 0xff;TL0 = 0xff;即表示桶的最高位置.TF0 = 0; //计数到时TF0为1,即当TH0 = 0xff;TL0 = 0xff;再运行一步TF0 = 1;TR0 = 1; //开始计数,从这时起,每运行一步TH0和TL0都会增加,直到TH0 = 0xff;TL0 = 0xff;//相当于开水龙头,如TR0=0则TH0和TL0不变ET0 = 1; //允许定时器0中断EA=1; //开总中断//下面是个死循环,程序里每运行一步TH0和TL0都会增加,当增加到TH0 = 0xff;TL0 = 0xff;//单片机会从死循环里退出,去执行中断部分的代码,即开始运行void timer0(void) interrupt 1 using 3{}//运行完中断部分的代码后,接着继续执行死循环里的代码。
如何设置51单片机的中断优先级

在 MCS-51 单片机中断优先级中由中断优先级寄存器 IP 来高置的,IP 中某位设为 1,相应的中断就是高优先级,否则就是低优先级。 PS PT1 PX1 PT0 PX0 IP 优先级别寄存器各位介绍如下:
PS PT1 PX1 PT0 PX0
0 0 0 0 0 1 1 0
因此,最终,IP 的值就是 06H。 例:在上例中,如果 5 个中断请求同时发生,求中断响应的次序。 响应次序为:定时器 0->外中断 1->外中断 0->实时器 1->串行中 断。
Байду номын сангаас
PS:串行口中断优先级控制位。PS=1 设定串行口为高优先级中断;PS=0 为低优先级中断。 PT1:T1 中断优先级控制位。PT1=1 设定定时器 T1 为高优先级中断; PT1=0 为低优先级中断。 PX1:外部中断 1 优先级控制位。PX1=1 设定定时器外部中断 1 为高优先 级中断;PX1=0 为低优先级中断。 PT0:T0 中断优先级控制位。PT0=1 设定定时器 T0 为高优先级中断; PT0=0 为低优先级中断。 PX0:外部中断 0 优先级控制位。PX0=1 设定定时器外部中断 0 为高优先 级中断;PX0=0 为低优先级中断。 例:设有如下要求,将 T0、外中断 1 设为高优先级,其它为低优先级, 求 IP 的值。 IP 的首 3 位没用,可任意取值,设为 000,后面根据要求写就可以了
51单片机中断程序

#include<reg52.h>#define uint unsigned int#define uchar unsigned charvoid delay(uint a);bit c,b;//==主程序区============================================= ======================================================void main(){EA=1;//打开总中断EX0=1;//打开外部中断0IT0=0;//将中断0设置为电平触发IT1=0;//将中断0设置为电平触发EX1=1;//打开外部中断1while(1){P1=0xfe;//关掉INT0里面的LEDP0=0xff;//关掉INT1里面的数码管P0=0x00;P2=0xf8;P1=0xfe;while(1);}}//=子程序区============================================== ====================================================== =void delay(uint a){uint b,c;for(b=a;b>0;b--)for(c=110;c>0;c--);}void Int0() interrupt 0//外部中断0的服务子程序不用在声明区声明的{uint a;a=10;while(a--)//这里不能用while(1)如果不是的话当外部中断已经成了高电平,但无法跳出中断服务子程序{P0=0x00;P2=0xf8;P1=0xff;delay(1000);P1=0x00;delay(1000);}}void Int1() interrupt 2//外部中断1 的服务子程序也是不用在声明区声明的。
{delay(1);c=P3^3;if(c==0){delay(1);if(c==0){uint a;a=10;while((a--))//这里不能用while(1)如果不是的话当外部中断已经成了高电平,但无法跳出中断服务子程序{P1=0xff;P2=0xf8;P0=0x3f;delay(1000);P2=0xf9;P0=0x00;delay(1000);P2=0xf8;P0=0x06;delay(1000);P2=0xf8;P0=0x5b;delay(1000);P2=0xf8;P0=0x4f;delay(1000);P2=0xf8;P0=0x66;delay(1000);P2=0xf8;P0=0x6d;delay(1000);}}}}/*程序功能是第一个LED亮的,P3^2口是低电平是进入中断程序,中断实现功能是八个L ED一起闪烁。