标签:ini 淘宝店铺 就会 alt 注入 mamicode 优先 淘宝 style
声明:这次不写了
总结一下中断有哪些中断和中断的寄存器、I\O口的作用、中断优先级 、寄存器具体工作原理图
C52有5个中断 名称 中断请求标志 对应IE寄存器的开关
1、外部中断0(INT0) P3.2 IE0 = 1 EX0
(接收到的脉冲达到溢出) 2、 定时器中断 T0 TF0 = 1 ET0
3、外部中断1 (INT1) P3.3 IE1 = 1 EX1
4、 T1 TF1 = 1 ET1
5、 TX\RX T1 = 1 R1 = 1
几个寄存器 :
TCON SCON IP IE TMOD
定时控制 串口控制 中断优先级控制 中断允许 定时方式控制
P3口功能回顾:
高----->低 interrupt0------>4
中断优先级 以及所对应的函数 : INTO TO INT1 T1 RX\TX
寄存器具体工作原理:
中断系统结构图
说明: 1、从IT0那里,你可以配置它为低电平触发还是边沿触发 。每一次触发后,都引起IE0的置1,后面又进入IE寄存器控制的局部开关EX0和EA总开关
之后判断优先级。
2、计数器中断只在开头与其它的不同。 在定时器\计数器T0或T1闭合逻辑开关之后。T0和T1中便会自动累加注入的脉冲信号。充满溢出后,便可向 TF0进位。产生硬件置1的效果。
具体寄存器的内容就不在此赘述了。如何使用中断:
1、开启总开关EA EA = 1
2、 开启中断开关 ET0 EX0 ET1 EX1 = 1
3、配置中断触发方式 如果是外部中断就需要选择 低电平还是边沿触发 内部中断就需要配置 初始寄存器是多少。多少次脉冲后触发中断
4、编写中断函数
这里把两种中断的代码都给出来。代码出处有说明
外部中断1
1 /********************************************************************************* 2 * 【作 者】: 清翔电子:向量 3 * 【版 本】: V1.0 4 * 【网 站】: http://www.qxmcu.com/ 5 * 【淘宝店铺】: http://qxmcu.taobao.com/ 6 * 【实验平台】: 清翔 QX-MCS51 单片机开发板 7 * 【外部晶振】: 11.0592mhz 8 * 【主控芯片】: STC89C52 9 * 【编译环境】: Keil μVisio4 10 * 【程序功能】: 外部中断1下降沿触发方式,每按下一次S2按键就会进入一次中断,LED 11 灯会发生状态变化。 12 * 【使用说明】: 用1根杜邦线把P33和P37相接,每按下一次S2按键就会进入一次中断。 13 **********************************************************************************/ 14 #include <reg52.h> 15 16 #define uint unsigned int 17 #define uchar unsigned char 18 19 sbit key_s2 = P3^0;//独立按键S2 20 sbit flag = P3^7; //外部中断信号产生脚 21 22 /*==================================== 23 函数 : delay(uint z) 24 参数 :z 延时毫秒设定,取值范围0-65535 25 返回值 :无 26 描述 :12T/Fosc11.0592M毫秒级延时 27 ====================================*/ 28 void delay(uint z) 29 { 30 uint x,y; 31 for(x = z; x > 0; x--) 32 for(y = 114; y > 0 ; y--); 33 } 34 //外部中断1初始化 35 void int1Init() 36 { 37 EA = 1; //开总中断 38 EX1 = 1;//开外部中断1 39 IT1 = 1;//外部中断1下降沿触发 40 } 41 42 void main()//main函数自身会循环 43 { 44 int1Init();//外部中断1初始化 45 while(1) 46 { 47 if(key_s2 == 0)//判断S2是否被按下 48 { 49 delay(20);//按键消抖 50 if(key_s2 == 0) 51 { 52 flag = 1; 53 flag = 1; 54 flag = 0;//产生下降沿 55 while(!key_s2);//松手检测 56 } 57 } 58 59 } 60 } 61 62 //外部中断1中断服务程序 63 void int1() interrupt 2 64 { 65 P1 = ~P1; //灯光亮灭 66 }
内部中断 定时器中断
步骤:1、开启定时器或计数器 TMOD
2、 设置定时器\计数器工作方式 TCON
3、开启定时器|计数器中断(IE)
1 /* 2 定时器0工作模式1 16位定时计数 3 数码管动态显示0-10,每隔1秒显示一次 4 */ 5 /********************************************************************************* 6 * 【作 者】: 清翔电子:向量 7 * 【版 本】: V1.0 8 * 【网 站】: http://www.qxmcu.com/ 9 * 【淘宝店铺】: http://qxmcu.taobao.com/ 10 * 【实验平台】: 清翔 QX-MCS51 单片机开发板 11 * 【外部晶振】: 11.0592mhz 12 * 【主控芯片】: STC89C52 13 * 【编译环境】: Keil μVisio4 14 * 【程序功能】: 定时器0工作模式1 16位定时计数,中断方式响应。 15 三位数码管动态扫描,定时器0中断方式扫描。 16 * 【使用说明】: 按下S2按键数码管值加一,最大加到120. 17 按下S3数码管值减一,最小减到0. 18 **********************************************************************************/ 19 #include <reg52.h> 20 #include <intrins.h> 21 22 #define uint unsigned int 23 #define uchar unsigned char 24 25 sbit DU = P2^6;//数码管段选 26 sbit WE = P2^7;//数码管段选 27 sbit key_s2 = P3^0;//独立按键S2 28 sbit key_s3 = P3^1;//独立按键S3 29 uchar num;//数码管显示的值 30 uchar mSec, Sec;//毫秒和秒储存变量 31 32 //共阴数码管段选表0-9 33 uchar code SMGduan[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,}; 34 //数码管位选码 35 uchar code SMGwei[] = {0xfe, 0xfd, 0xfb}; 36 37 /*==================================== 38 函数 : delay(uint z) 39 参数 :z 延时毫秒设定,取值范围0-65535 40 返回值 :无 41 描述 :12T/Fosc11.0592M毫秒级延时 42 ====================================*/ 43 void delay(uint z) 44 { 45 uint x,y; 46 for(x = z; x > 0; x--) 47 for(y = 114; y > 0 ; y--); 48 } 49 50 /*==================================== 51 函数 :display(uchar i) 52 参数 :i 显示数值,取值范围0-255 53 返回值 :无 54 描述 :三位共阴数码管动态显示 55 ====================================*/ 56 void display(uchar i) 57 { 58 static uchar wei; 59 P0 = 0XFF;//清除断码 60 WE = 1;//打开位选锁存器 61 P0 = SMGwei[wei]; 62 WE = 0;//锁存位选数据 63 switch(wei) 64 { 65 case 0: DU = 1; P0 = SMGduan[i / 100]; DU = 0; break; 66 case 1: DU = 1; P0 = SMGduan[i % 100 / 10]; DU = 0; break; 67 case 2: DU = 1; P0 = SMGduan[i % 10]; DU = 0; break; 68 } 69 wei++; 70 if(wei == 3) 71 wei = 0; 72 } 73 //定时器0初始化 74 void timer0Init() 75 { 76 EA = 1; //打开总中断 77 ET0 = 1;//打开定时器0中断 78 TR0 = 1; //启动定时器0 79 TMOD = 0X01; //定时器工作模式1,16位定时模式 80 TH0 = 0xED; 81 TL0 = 0xFF; //定时5ms 82 } 83 84 void main()//main函数自身会循环 85 { 86 timer0Init();//定时器0初始化 87 while(1) 88 { 89 if(key_s2 == 0)//判断S2是否被按下 90 { 91 delay(20);//按键消抖 92 if(key_s2 == 0) 93 { 94 if(num != 120) 95 num++; 96 while(!key_s2);//松手检测 97 } 98 } 99 if(key_s3 == 0)//判断S3是否被按下 100 { 101 delay(20);//按键消抖 102 if(key_s3 == 0) 103 { 104 if(num > 0) 105 num--; 106 while(!key_s3);//松手检测 107 } 108 } 109 } 110 } 111 112 //定时器0中断函数 113 void timer0() interrupt 1 114 { 115 TH0 = 0xED; 116 TL0 = 0xFF; //定时5ms 117 display(num); //数码管显示函数 118 }
标签:ini 淘宝店铺 就会 alt 注入 mamicode 优先 淘宝 style
原文地址:https://www.cnblogs.com/mengnan-konghai/p/12834834.html