代码文本在文末,文中为代码截图

工程图

第一题

**每次亮一个灯的流水灯,定义P1为led1。

外部中断0允许中断:EX0=1;下降沿触发:IT0=1;总开关:EA=1;

中断要执行的是P0引脚的4个二极管闪六次。
其实这里还有个想说的是,IE在中断请求的时候,会置位为1,然后CPU同意并执行中断程序后,IE自动清零。为什么说这个,这个可以在以后的一些情况,作为中断条件。

第二题

每次亮一个灯的流水灯和第一题的一样;
中断0下降沿触发也和第二题一样;
中断0程序是:P1引脚每次亮两个二极管的流水灯

讨论一下:每次亮两个二极管,如果低电平亮,那就要11111100B→11110011B。

个人觉得在中断中使用while造成的后果是很致命的,一般杜绝在里面用while,否则永远跳不出中断。(当然你可以在此中断里边进入另一个中断再跳回main,这样也太麻烦了)实在不行的话,那就利用中断方式2的IE1吧,在while里边加个判断,break出while循环。(或者随便一个IO引脚,给她一个电平判断,应该也可以跳出while)

第三题

首先点亮所有灯0x00,然后逐个灭掉

逐个灭掉,补1?好象没有低位补1的,那就可以低位补0,然后取反得1:~(0xff→0xfe)=0x01


有没有注意到,其实我们总是习惯低电平亮灯,其实也可以高电平亮灯的,这样就不用取反这么麻烦,位的取反会显得复杂。高电平亮灯的话,直接p1=0xff<<i;即可

中断1程序是:P1引脚每次亮两个二极管的流水灯,同时P0和P2引脚闪烁交替(这里的同时不知是什么意思,,难道有多线程?)


变量的名字乱起的(比如interr0或intter1),自己写代码的时候另起个好听的。
哪里写得有错的话,评论分享一下,谢谢。

补充代码

#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint);
#define led1 P1
sbit oo=P2^7;//测试用
//延迟函数(网上抄的)
void delay(uint t)
{register uint bt;for(;t;t--)for(bt=0;bt<255;bt++);
}//中断初始化
void interr0()
{EA = 1;//总开关EX0 = 1;//中断允许位\EX1代表外部中断1IT0 = 1;//0为电平触发,1为脉冲触发即上下沿
}
void interr1()
{EA = 1;//总开关EX1 = 1;//中断允许位\EX1代表外部中断1IT1 = 1;//0为电平触发,1为脉冲触发即上下沿
}//第一二题的main函数
/*void main()
{unsigned char i;interr0();led1 = 0xFE;while(1){//for(i=0;i<8;i++)//{//  led1=_crol_(0xfe,i);//不知为何  原理一样的代码led1 = _corl_(led1,1);为什么不可以,还在找资料//    delay(200);         //}//如果不想用上边的代码,可以尝试用这个for(i=0;i<=8;i++){//led1>>=i;led1=~(0x01<<i);//这是左移i微,然后空位补零,取反0变1,灯不亮delay(200);}}
}*///第一题中断0的程序
/*void sy1() interrupt 0
{unsigned char i;P2 = 0x00;//0x00或00000000Bfor(i=0;i<12;i++)//闪六次,也就是亮闪12次{P2 = ~P2;//由0x00变0xffdelay(200);}         }*///第二题中断0的程序
/*void sy2() interrupt 0
{unsigned char i;while(1){P1 = 0xFC;//11111100B;//for(i=0;i<5;i++)//{//  delay(200);//   //P1 = _crol_(P1,2);//哇,这个_crol_又不行呀!!!难受,莫非里面不能用变量?//  //P1 = //}//上面不行的话只能用这种改循环的ben方法了...for(i=0;i<=6;){delay(200);i=i+2;//led1 = _crol_(0xFC,i);led1 = ~(0x03<<i);}if(IE1==1)break;}
}*///第三题main函数void main(void)
{uint i;uchar temp;interr1();while(1){temp=0xFF;for(i=0;i<=8;i++){P1=temp;delay(200);temp=~(0xff<<i);//11111111→111111110→00000001}}
}void sy3() interrupt 2
{while(1){uint i;//我在前面定义了的即unsigned char i;P1 = 0xFC;P0=0x00;P2=0xff;for(i=0;i<=6;){delay(200);i=i+2;led1 = ~(0x03<<i);P0=~P0;P2=~P2;}if(IE0==1)break;//来个跳出死循环的条件吧}
}

c51单片机中断详解--适合初学者相关推荐

  1. 51单片机中断详解(上)

    一.中断的概念 中断发生 CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理 中断响应和中断服务 CPU暂时中断当前的工作,转去处理事件B 中断返回 待CPU将事件B处理完毕后,再回到原来 ...

  2. 初识C51单片机(详解)

    前言: 单片机是一种我们常见的开发板,我们经常会在一些项目中使用到它.而今天我们要介绍的是C51单片机,下面来介绍一下今天的"主角":STC89C52RC40I-LQFP44单片机 ...

  3. 经典例题:十六进制转换十进制详解 适合初学者

    任务描述 字符串转换成十进制整数. 输入一个以 # 结束的字符串,滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出.如果过滤后字符串的首字符为 ...

  4. C51汇编语言寻址方式,单片机学习:51单片机寻址方式详解

    原标题:单片机学习:51单片机寻址方式详解 51单片机是对所有兼容Intel 8031指令系统的单片机的统称.该系列单片机的始祖是Intel 8031单片机,后来随着Flash rom 技术的发展,8 ...

  5. linux内核中断详解

    linux内核中断详解 1.中断的硬件触发流程 外设:如果外设有操作或者有数据可用,那么就会产生一个电信号,这个电信号发送给中断控制器. 中断控制器:中断控制器接收到外设发来的电信号以后,进行进一步的 ...

  6. 【KMP算法详解——适合初学KMP算法的朋友】

    相信很多人(包括自己)初识KMP算法的时候始终是丈二和尚摸不着头脑,要么完全不知所云,要么看不懂书上的解释,要么自己觉得好像心里了解KMP算法的意思,却说不出个究竟,所谓知其然不知其所以然是也. 经过 ...

  7. STM32开发 -- 外部中断详解

    如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/87376865 在讲三轴加速度计的时候,提到外部中断.接下来就看看中断为什么这 ...

  8. C51单片机————中断系统

    51单片机中断系统 CPU和外设之间的速度差异太大,CPU跑的太快了,外设追不上,机器的内部也可能出现突发事件.那怎么办?所以引入中断技术呀. Created with Raphaël 2.1.2张三 ...

  9. 【STM32学习笔记】(13)——外部中断详解

    EXTI 简介         EXTI(External interrupt/event controller)-外部中断/事件控制器,管理了控制器的 20 个中断/事件线.每个输入线可以独立地配置 ...

  10. 简单易懂 LNMP 架构详解适合入门级别可跟做

    一.LNMP架构解读 1.1 LNMP平台就是Linux.Nginx.MySQL.PHP的组合架构,需要Linux服务器.MySQL数据库.PHP解析环境 1.2 本案例在单台服务器上部署LNMP环境 ...

最新文章

  1. 【Python学习系列十一】Python实现决策树实现C4.5(信息增益率)
  2. sklearn线性回归
  3. Python基础——PyCharm版本——第六章、函数function
  4. 青客宝团队redis内部分享ppt
  5. 用JS访问iframe中的元素
  6. MS提供的Oracle for ADO 驱动,在一个应用中不能打开同时多个数据库连接
  7. 基于jQuery鼠标悬停上下滑动导航条
  8. grpc(3):使用 golang 开发 grpc 服务端和client
  9. 开发管理 -启动项目(转)
  10. 存储器火热 大陆厂商3倍薪水赴台挖人
  11. (二)洞悉linux下的Netfilteriptables:内核中的ip_tables小觑
  12. VB脚本:快速入门教程
  13. 平面与网页设计中关于颜色搭配的问题
  14. 前端 实现 直角三角形 边长、角度计算工具
  15. 学校计算机实训室座次安排,班级座位调整流程设计
  16. You are the reason I am
  17. win10虚拟机搭建群晖nas碰到的一些问题
  18. linux----创建主分区、扩展分区、在扩展分区上建立逻辑分区。
  19. google的秘密入口+搜索技巧
  20. 用计算机弹咱们结婚吧乐谱,用计算器弹奏“周杰伦”,这些乐谱也太简单了吧!...

热门文章

  1. ----uni-app之APP关联小程序实现扫描APP二维码跳转关联小程序----
  2. 数据仓库建设规范(文档版)
  3. word之中快速插入已有公式的几种方法
  4. Tracking 1.3 Online Trackers
  5. Tyvj 1728 普通平衡树
  6. windows开启远程Wmi服务支持
  7. windows操作快捷键
  8. 如何使用电脑注册微博登陆模拟器
  9. oracle查询分区表分区,查询分区表(查看oracle分区表)
  10. NumPy.npy与pandas DataFrame