找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 16918|回复: 1
打印 上一主题 下一主题
收起左侧

单片机外部中断0、外部中断1控制实验程序+代码

[复制链接]
跳转到指定楼层
楼主
ID:575652 发表于 2019-7-1 17:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要原理图、Proteus仿真电路图等

图5 中断嵌套

图6 单片机开发试验仪外部中断引脚及按键电路



一、实验目的
1、了解单片机的中断系统(外部中断0、外部中断1),熟悉各个中断源及其控制相关的寄存器。
2、理解中断相关的过程,掌握中断的程序设计。
二、实验主要仪器设备&软件
PC机、单片机开发试验仪、连接线、Keil C。
三、实验内容(实验要求)
1、编写Keil C程序,使用外部中断0,下载程序到单片机开发试验仪后按下K3按键可以对D1小灯状态取反。
2、编写Keil C程序,使用外部中断1,下载程序到单片机开发试验仪后每按下K4按键一次使数码管显示的数字减1,数字显示的范围为0~15(10~15用A~F表示),显示数字为0时按下K4键数码管显示F。
3、编写Keil C程序,使用外部中断0和1,外部中断0由K3按键触发,外部中断1由K4按键触发,外部中断0为低优先级、外部中断1为高优先级。P2.0、P2.1引脚外接两个发光二极管D1、D2。
①下载程序到单片机开发试验仪后单独按下K3按键发光二极管D2亮5秒后熄灭。
②单独按下K4按键发光二极管D1亮5秒后熄灭。
③先后按下K3和K4(间隔时间较长,大于5秒),观察D1、D2亮的情况,分析是否发生了中断嵌套。
④先后按下K4和K3(间隔时间较短,小于5秒),观察D1、D2亮的情况,分析是否发生了中断嵌套。
四、源程序、原理及实验效果
1、设计思路、Keil C程序代码
1)取反
  1. #include<reg52.h>
  2. sbit K3=P3^2;
  3. sbit led=P2^0;
  4. void main()
  5. {
  6.   IT0=1;
  7.   EX0=1;
  8.   EA=1;
  9.   while(1);
  10. }
  11. void int0_serv(void) interrupt 0
  12. {
  13.   unsigned char i;
  14.   for(i=0;i<123;i++)
  15.     if(K3==0)
  16.                 led=~led;
  17. }
复制代码
2)按下K4减一
  1. #include<reg52.h>
  2. sbit P22=P2^2;
  3. sbit P23=P2^3;
  4. sbit P24=P2^4;
  5. unsigned char code led[]=
  6. {
  7. 0x3f,0x06,0x5b,0x4f,
  8. 0x66,0x6d,0x7d,0x07,
  9. 0x7f,0x6f,0x77,0x7c,
  10. 0x39,0x5e,0x79,0x71};
  11. void delayms(unsigned int x)     //延时x毫秒
  12. {
  13. unsigned char j;
  14. while(x--)
  15. for(j=0;j<123;j++);
  16. }
  17. unsigned char s;
  18. void int1() interrupt 2
  19. {
  20.   if(s==0)
  21.     s=15;
  22.               else
  23.               s=s-1;
  24. }
  25. void main()
  26. {
  27.    P22=0;
  28.    P23=0;
  29.    P24=0;
  30.    IT1=1;
  31.    EA=1;
  32.    EX1=1;
  33.    while(1)
  34.    {
  35.      P0=led[s];
  36.               delayms(100);
  37.    }   
  38. }
复制代码
3)优先级高低
  1. #include<reg52.h>
  2. sbit led1=P2^0;
  3. sbit led2=P2^1;
  4. sbit K3=P3^2;
  5. sbit K4=P3^3;
  6. void main()
  7. {
  8.    IT0=1;
  9.    IT1=1;
  10.    EX0=1;
  11.    ET0=1;
  12.    EX1=1;
  13.    ET1=1;
  14.    EA=1;
  15.    PX1=1;
  16.    while(1);
  17. }
  18. void int1_serv() interrupt 0
  19.    {
  20.       unsigned int  x=5000;
  21.                 unsigned char i;
  22.                 if(K3==0)
  23.                             led2=0;
  24.         while(x--)
  25.                 for(i=0;i<123;i++);            
  26.                             led2=1;
  27.                    }
  28. void int0_serv() interrupt 2
  29.    {
  30.       unsigned int  x=5000;
  31.                 unsigned char i;
  32.                 if(K4==0)
  33.                             led1=0;
  34.         while(x--)
  35.                             for(i=0;i<123;i++);
  36.                             led1=1;
  37.                    }
复制代码

完整的Word格式文档51黑下载地址:
单片机中断.docx (252.26 KB, 下载次数: 20)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:576012 发表于 2019-7-1 23:28 | 只看该作者
实验切实可行
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表