码迷,mamicode.com
首页 > 其他好文 > 详细

单片机学习---中断

时间:2020-05-06 11:43:18      阅读:89      评论:0      收藏:0      [点我收藏+]

标签: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寄存器控制的局部开关EX0EA总开关

          之后判断优先级。

        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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!