中断
|-----------|---|---|----------------------------------------------------------------------------|
| 一 中 断 简 介 | 中断概念 指的是由于内部或外部的某种原因, CPU 暂时中止其正在执行的程序 转去执行请求中断的那个外设或事件的服务子程序 等处理完毕后再返回执行原来中止的程序 || |
| 二 中断允许控制 || ||
| EA: 中断允许总控位 || EA=0, 屏蔽所有的中断请求; EA=1, 开放中断 ||
| 置 1 :开放 清 0 :屏蔽 || ET2 :定时器 / 计数器 T2 的溢出中断允许位 ||
| 置 1 :开放 清 0 :屏蔽 || ES :串行口中断允许位 ||
| 置 1 :开放 清 0 :屏蔽 || ET1 :定时器 / 计数器 T1 的溢出中断允许位 ||
| 置 1 :开放 清 0 :屏蔽 || EX1 :外部中断 INT1 的中断允许位 ||
| 置 1 :开放 清 0 :屏蔽 || ET0 :定时器 / 计数器 T0 的溢出中断允许位 ||
| 置 1 :开放 清 0 :屏蔽 || EX0 :外部中断 INT0 的中断允许位 ||
| 三 优先权控制 || ||
|---------------------------------------------|-----------------------------------------------------|
| ### PT2: 定时器 / 计数器 T2 的中断优先级控制位 , 只用于 52 子系列 ||
| 置 1, 高优先级 清 0, 低优先级 | PS: 串行口的中断优先级控制位 |
| 置 1, 高优先级 清 0, 低优先级 | PT1: 定时器 / 计数器 T1 的中断优先级控制位 |
| 置 1, 高优先级 清 0, 低优先级 | PX1: 外部中断 INT1 的中断优先级控制位 |
| 置 1, 高优先级 清 0, 低优先级 | PTO: 定时器 / 计数器 T0 的中断优先级控制位 |
| 置 1, 高优先级 清 0, 低优先级 | PXO: 外部中断 INTO 的中断优先级控制位 |
|------------|---------------------|
| 中断源 | 优先级顺序 |
| 外部中断0 | 最高 ↓ 最低 |
| 定时/计数器T0中断 | 最高 ↓ 最低 |
| 外部中断1 | 最高 ↓ 最低 |
| 定时/计数器T1中断 | 最高 ↓ 最低 |
| 串行口中断 | 最高 ↓ 最低 |
| 定时/计数器T2中断 | 最高 ↓ 最低 |
各中断服务程序的入口编号
|----------------------------|----------|
| 中断源 | 入口编号 |
| 外部中断 0(P3.2) | 0 |
| 定时 / 计数器 0 | 1 |
| 外部中断 1(P3.3) | 2 |
| 定时 / 计数器 1 | 3 |
| 串行口 | 4 |
|---------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------|
| 外部中断 | 外部引脚P3.2和P3.3输入, 有两种触发方式:电平触发 及 跳变 ( 边沿 ) 触发 由特殊功能寄存器TCON来管理. |
| ||
| ITO(IT1): 外部中断 0( 或 1) 触发方式控制位 | IT0( 或 IT1) 被设置为 0 :电平触发方式 ; IT0( 或 IT1) 被设置为 1 : 边沿触发方式 |
| IEO(IE1): 外部中断 0( 或 1) 的中断请求标志位。 ||
| 中断电路仿真(每按键按一次,数码管+1) ||
点阵的应用
|----------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 点阵实物图 |
点阵内部原理图 |
| 0-9的点阵数值: unsigned char code tab[]={ → };(高电平有效) | 0x00,0x7E,oxFF,0xC3,0xC3,0xFF,0x7E,0x00, //0 0x00,0x00,0x43,0xFF,0xFF,0x03,0x00,0x00, //1 0x00,0x63,0xC7,0xCF,0xDB,0xF3,0x63,0x00, //2 0x00,0x42,0xDB,0xDB,0xDB,0xFF,0x66,0x00, //3 0x00,0x3E,0x46,0xFF,0xFF,0x06,0x06,0x00, //4 0x00,0xF6,0xF7,0xD3,0xD3,0xDF,0xDE,0x00, //5 0x00,0x7E,0xFF,0xDB,0xDB,0xDF,0x4E,0x00, //6 0x00,0xC0,0xC0,0xC7,0xFF,0xF8,0xC0,0x00, //7 0x00,0xFF,0xFF,0xDB,0xDB,0xFF,0xFF,0x00, //8 0x00,0x72,0xFB,0xDB,0xDB,0xFF,0x7E,0x00, //9 |
| 8X8LED 点阵显示数字 电路仿真 时钟电路:由 12M 晶振(X1)和两个 22pF 电容(C1、C2)构成,为单片机提供工作时钟。 复位电路:10k 电阻(R1)和 10μF 电容(C3)组成上电复位电路,确保单片机初始化。 总线驱动:P0 口通过排阻(RP1)连接到 74LS245(U2),74LS245 用于增强驱动能力,其 \(\overline{CE}\) 接地、\(AB/ \overline{BA}\) 接地,使数据从 A 端流向 B 端。 点阵模块:74LS245 输出连接到 LED 点阵,P3.0 - P3.7(标为 C0 - C7)也连接到点阵,共同实现对点阵的控制。 该电路通过 AT89C51 单片机,借助 74LS245 驱动 LED 点阵,晶振与复位电路保障单片机正常运行。 ||
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ### 8X8LED点阵显示数字1 #include<reg51.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int uchar code Table_of_Digits[]={上面}; uchar i=0,t=0,Num_Index; //主程序 void main() { P3=0x80; Num_Index=0; //从0 开始显示 TMOD=0x00; //T0 方式0 TH0=(8192-2000)/32; //2ms 定时 TL0=(8192-2000)%32; IE=0x82; TR0=1; //启动T0 while(1); } //T0 中断函数 void LED_Screen_Display() interrupt 1 { TH0=(8192-2000)/32; //恢复初值 TL0=(8192-2000)%32; P0=0xff; //输出位码和段码 P0=~Table_of_Digits[Num_Index*8+i]; P3=crol(P3,1); if(++i==8) i=0; //每屏一个数字由8 个字节构成 if(++t==250) //每个数字刷新显示一段时间 { t=0; if(++Num_Index==10) Num_Index=0; //显示下一个数字 } } |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ### 8X8LED点阵显示数字2 说明:每次按下K1 时,会使8X8LED点阵屏循环显示不同图形。 本例同时使用外部中断和定时中断。 #include<reg51.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int //待显示图形编码 uchar code M[][8]= {{0x00,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x00}, //图1 {0x00,0x38,0x44,0x54,0x44,0x38,0x00,0x00}, //图2 {0x00,0x20,0x30,0x38,0x3c,0x3e,0x00,0x00} //图3}; uchar i,j; //主程序 void main() {P0=0xff; P1=0xff; TMOD=0x01; //T0 方式1 TH0=(65536-2000)/256; //2ms 定时 TL0=(65536-2000)%256; IT0=1; //下降沿触发 IE=0x83; //允许定时器0、外部0 中断 i=0xff; //i的初值设为0xff,加1 后将从0 开始 while(1);} //T0 中断控制点阵屏显示 void Show_Dot_Matrix() interrupt 1 {TH0=(65536-2000)/256; //恢复初值 TL0=(65536-2000)%256; P0=0xff; //输出位码和段码 P0=~M[i][j]; P1=crol(P1,1); j=(j+1)%8;} //INT0 中断(定时器由键盘中断启动) void Key_Down() interrupt 0 {P0=0xff; P1=0x80; j=0; i=(i+1)%3; //i在0,1,2 中取值,因为只要3 个图形 TR0=1;} |
|-------------------------------------------------------------------------------------------------|
| 按键控制8X8LED点阵屏显示图形 |