• 实验(五):外部中断实验


    一、实验目的与任务

            实验目的:

                    1.掌握外部中断的工作原理;

                    2.学会中断程序设计。

            任务:

                    1.运行Keil开发环境,完成外部中断响应软件编程;

                    2.外部中断接口分别接按键K1、K2设置为下降沿触发方式,自然优先级,观察中断响应效果。

    二、实验内容

            1.仿真电路设计

            2. 编写C51程序实现如下功能:开机后D1灭灯,LED1黑屏,随后单击K1→D1状态反转,单击K2 →LED1从0开始循环显示0~F字符。

    三、实验内容

    (1)软件实现:

     实验步骤:

            1.运行Keil uVision5 开发环境,按照“模块化单片机教学实验平台配套的实验指导书1.2.3 节”介绍的方法建立程esimlab5. uvproj,CPU 为AT89S51,包含启动文件STARTUP.A51。

            2.输入源程序,在Keil uVision5 开发环境中,建立源程序esimlab5.c,将上述程序加入该程序文件。并将该文件加入工程esimlab5.uvproj。

            3.设置工程esimlab5. uvproj 属性,将其晶振频率设置为12MHz,选择输出可执行文件(HEX 文件),仿真方式为“Use Simulator”。

            4.构造(Build)工程esimlab5.uvproj。如果输入有误进行修改,直至构造正确,生成可执行程序 esimlab5.hex 为止。

    (2)Proteus仿真:

    实验步骤:

            1.运行Proteus 开发环境,建立工程,新建原理图设计文件esimlab5. Pdsprj,参考图一。

     图一 原理图实例

            2.设置单片机属性,将其晶振频率设置为12MHz,载入KEIL生成的文件esimlab5.hex。

            3.运行仿真并观察结果。

    四、实验报告

    esimlab5.c

    1. #include
    2. sbit D1=P0^0;
    3. unsigned char Number[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
    4. 0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
    5. unsigned char i;
    6. void Delay(unsigned int t) //延时函数
    7. {
    8. unsigned char i, j;
    9. while(t){
    10. i = 2;
    11. j = 239;
    12. do
    13. {
    14. while (--j);
    15. } while (--i);
    16. t--;
    17. }
    18. }
    19. void main(){
    20. //中断初始化
    21. EX0 = 1;//允许外部中断0中断
    22. EX1 = 1;//允许外部中断0中断
    23. IT0 = 1;//外部中断0为跳沿触发
    24. IT1 = 1;//外部中断1为跳沿触发
    25. IE0 = 0;//外部中断0的请求标志位
    26. IE1 = 0;//外部中断1的请求标志位
    27. EA = 1;//中断总允许
    28. PX0 = 0;//外部中断0为低优先级
    29. PX1 = 0;//外部中断1为高优先级
    30. while(1){
    31. P2 = 0x00;//数码管初始化
    32. }
    33. }
    34. void Int0_Routine(void) interrupt 0 using 1//外部中断0中断服务函数
    35. {
    36. D1 = ~D1;//LED灯状态取反
    37. }
    38. void Int1_Routine(void) interrupt 2 using 2//外部中断1中断服务函数
    39. {
    40. unsigned char count = 3;
    41. while(count != 0)//中断开始执行,数码管循环显示0~F 3次
    42. {
    43. for(i = 0;i<16;i++)
    44. {
    45. P2 = Number[i];
    46. Delay(100);
    47. }
    48. count--;
    49. }
    50. }

    仿真结果 

            单片机的中断是由单片机片内的中断系统来实现的。当中断请求源(简称中断源)发出中断请求时,如果中断请求被允许的话,单片机暂时中止当前正在执行的主程序,转到中断服务程序处理中断服务请求,处理完中断服务请求后,再回到原来被中止的程序之处(断点),继续执行被中断的主程序。

  • 相关阅读:
    Web实例_报表开发01-基于HTML进行报表呈现
    哈希表 | 有效字母异位词 | leecode刷题笔记
    Linux下C++编程-进度条
    Oracle-触发器和程序包
    控创Kontron工控机维修KISS4U760-A工业电脑维修
    【CSP认证考试】202303-1:田地丈量解题思路+代码
    inCreate自图入选中国软件网《创新100—2022数智化场景实践》
    【深度学习实验】卷积神经网络(五):深度卷积神经网络经典模型——VGG网络(卷积层、池化层、全连接层)
    如何在 Linux 中管理用户
    k8s 读书笔记 - kubernetes 基本概念和术语(上)
  • 原文地址:https://blog.csdn.net/qq_61228493/article/details/127966401