c51单片机中断详解--适合初学者

发布者:SparklingBeauty最新更新时间:2022-06-21 来源: eefocus关键字:c51  单片机  中断  初学者 手机看文章 扫描二维码
随时随地手机看文章

工程图
在这里插入图片描述

第一题

**每次亮一个灯的流水灯,定义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<

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

在这里插入图片描述

变量的名字乱起的(比如interr0或intter1),自己写代码的时候另起个好听的。

哪里写得有错的话,评论分享一下,谢谢。


补充代码


#include

#include

#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代表外部中断1

IT0 = 1;//0为电平触发,1为脉冲触发即上下沿

}

void interr1()

{

EA = 1;//总开关

EX1 = 1;//中断允许位EX1代表外部中断1

IT1 = 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< delay(200);

}

}

}*/


//第一题中断0的程序

/*void sy1() interrupt 0

{

unsigned char i;

P2 = 0x00;//0x00或00000000B


for(i=0;i<12;i++)//闪六次,也就是亮闪12次

{

P2 = ~P2;//由0x00变0xff

delay(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< }

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< }

}

}


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< P0=~P0;

P2=~P2;

}

if(IE0==1)break;//来个跳出死循环的条件吧

}

}


关键字:c51  单片机  中断  初学者 引用地址:c51单片机中断详解--适合初学者

上一篇:C51单片机 串口通信RX&TX
下一篇:C51填坑记:MOVX指令异常

推荐阅读最新更新时间:2024-11-13 13:58

单片机控制12864显示多行汉字
PROTEUS仿真电路图: 仿真实验结果展示: 汉字取模过程(软件下载链接在文末): 第一步:打开液晶仿真排版软件 设定相关参数: 输入汉字: 随便找个位置将图片保存: 第二步:打开液晶汉字模提取软件 设定相关参数: 将刚才保存的图片打开并保存数据: C语言程序代码: #include reg51.h #define LCDLCDDisp_Off 0x3e #define LCDLCDDisp_On 0x3f #define Page_Add 0xb8//页地址 #define LCDCol_Add 0x40//列地址 #define Start_Line 0xC0/
[单片机]
<font color='red'>单片机</font>控制12864显示多行汉字
关于恩智浦lpc824 和lpc84x 微控制器
随着物联网技术的发展,MCU 处理器的能力日益强大,如今的MCU 与微处理器的界线越来越模糊,将会进一步融合成为嵌入式处理器。由于AMetal 已经完全屏蔽了底层的复杂细节,因此开发者仅需了解MCU 的基本功能就可以了。 LPC82x 是一款基于 ARM Cortex-M0+ 的低成本 32 位 MCU 系列器件(主芯片LPC824,基于ARM® Cortex®-M0+内核的低成本微控制器(MCU)),工作时 CPU 频率高达 30 MHz。 LPC82x 支持最高32 KB 闪存和 8 KB SRAM。LPC82x 的配套外设包括一个 CRC 引擎、四个 I2C 总线接口、最多三个 USART、最多两个 SPI 接口、一个多速
[单片机]
关于恩智浦lpc824 和lpc84x <font color='red'>微控制器</font>
STM32外部中断控制LED
单片机源程序如下: #include stm32f10x.h #include button.h #include led.h #include delay.h #include exti_config.h #define key GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0) int main() { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0) ; button_init(); led_init(); exti_config(); nvic_config(); while(1) {
[单片机]
51单片机汇编语言实验(四)----串行通信实验
一、实验目的:    学习串行口的工作方式,掌握单片机通信程序编制方法。 二、实验设备:    PC计算机一台,Dais-52PRO+实验系统一套。 三、实验内容:    与PC进行串行通信 四、与PC进行串行通信    1、实验原理:    8051单片机通过MAX232芯片与PC机进行通信,在PC机上运行串口助手软件。PC机通过软件助手发数据给单片机,单片机收到数据后取反发给PC机,可以在PC上观察数据。    2、实验步骤:   ① 将IO口区的P3.0与PACK区扩展板的RXD(P3.0)连接;   ② 将IO口区的P3.1与PACK区扩展板的TXD(P3.1)连接;   ③ 将PACK区模块的DB9通过串
[单片机]
51<font color='red'>单片机</font>汇编语言实验(四)----串行通信实验
51单片机定时器设置方式_51单片机定时器/计数器
8051单片机内部有两个定时/计数器T0及T1,具有定时和计数两种功能。T0及T1在计数过程中不需要CPU参与,也不影响CPU的其他工作。当计数溢出后,定时/计数器给出中断信号,申请CPU停止当前的工作,去处理预先设定的中断事件。 一、T1内部结构 定时器工作模式:对内部时钟信号计数。由于时钟频率是定值,所以可根据计数值计算出定时时间。 计数器工作模式:是对加在T1(P3.5)引脚上的外部脉冲进行计数。 二、计数功能 计数器用于统计从TO(P3.4)和Tl(P3.5)两个引脚输入脉冲的负跳变数量。负跳变是指前一个机器周期采样为高电平,后一个机器周期为低电平。每输入一个脉冲负跳变,计数器加1。 输入脉冲的高电平与
[单片机]
51<font color='red'>单片机</font>定时器设置方式_51<font color='red'>单片机</font>定时器/计数器
基于MSP430单片机的小气候采集系统
1 系统总体设计 基本电路由 MSP430F149 单片机驱动外围的传感器设备,土壤温湿度传感器(5TM)、空气温湿度传感器(SHT11)、光强度传感器(S1087)分别负责采集土壤温湿度、空气温湿度和光强度,可根据预设时间对数据进行存储,并可通过存储集中传输的模式由射频传输模块进行数据的远距离的传输。由于所采用的传感器响应时间短,可作为便携式手持设备使用,从而大大提高测量速度,提高测量效率。 2 硬件部分 温湿度传感器SHT11:SHT11传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专业的工业CMOS过程微加工技术,确保产品具有极高的可靠性和卓越长期的稳定性。测湿精度±3.0 ,测温精度±0.4 在25
[单片机]
基于MSP430<font color='red'>单片机</font>的小气候采集系统
用51单片机定时计数器控制LED1s闪烁一次
#include reg51.h //头文件 sbit LED=P2^0;//位定义LED灯 void Timer0()//使用定时计数器所做的处理函数,用做定时器 { TMOD=0x01;//定时器0,方式1 TH0=0xFC;//定时1ms的初值 TL0=0x18;//定时1ms的初值 ET0=1;//打开定时计数器0使能控制位 EA=1;//打开总中断 TR0=1;//打开定时计数器0的启动控制位 } void main()//主函数 { Timer0();//调用函数 while(1); } void ledxs()interrupt 1//中断执行内容函数,用定时器
[单片机]
25.核心初始化之中断屏蔽-210
在210中屏蔽中断的机制和6410是一样的。而且两者都是向量中断,很多中断都是硬件实现的,不像2440。 但是在210中的中断屏蔽寄存器有4个: 四组屏蔽寄存器的地址: 所以屏蔽中断就是把上面的四个屏蔽寄存器设置为全1,设置为0仍是没有影响。 代码实现: 编译:
[单片机]
25.核心初始化之<font color='red'>中断</font>屏蔽-210
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved