×

一起学习中断处理程序资料下载

消耗积分:3 | 格式:pdf | 大小:663.97KB | 2021-04-04

马占云

分享资料个

今天开始我们正式进入中级阶段的学习:中断系统。 什么是中断 首先来讲一下什么是中断:当程序执行到某个地方时,发生了特殊的事件或请求,CPU暂停执行当前程序,转而去处理上述事件或请求,处理完毕后在返回断点继续执行当前程序。 用我们生活中的事情来举个例子。假如你正在吃饭(当前程序),突然接到了快递员的电话让你现在下去拿快递(中断请求),你回答:“好的”(中断响应),然后暂停吃饭下去拿快递(中断处理),拿完快递上来继续吃饭(执行完中断返回执行当前程序)。 图1 在我们上课老师讲的时候,很多老师都会说51单片机共有5个中断源分别是:外部中断0、定时器溢出中断0、外部中断1、定时器溢出中断1、串口中断。 图2 仔细观察单片机芯片的IO口时就会发现,P3端口是有第二功能的。 我们来看一下与中断有关的P3端口各引脚第二功能的定义: P3^0:RXD串行口输入 P3^1:TXD串行口输出 P3^2:INT0外部中断0输入 P3^3:INT1外部中断1输入 P3^4:T0定时计数器0外部输入 P3^5:T1定时计数器1外部输入 其中P3^0、P3^1引脚用来与外部设备进行串口通信;P3^2、P3^3引脚用于接收外部电平变化来产生外部中断,P3^4、P3^5引脚用于接收外部脉冲来计数。 外部中断 接下来我们看一下中断系统的内部结构图,如图3所示。 图3 今天我们主要结合这个框图讲解一下外部中断0、外部中断1。 01、IE寄存器 我们先来看图中红色框中的IE寄存器,见图3。 图4 IE寄存器主管中断的允许与禁止,图3中IE寄存器画成了一个个的开关,也就是说我们要开启需要的中断时,就要把对应的开关打开。那么,假设我们要开启外部中断0,需要打开哪些开关呢?图中INT0通道中IE寄存机共有两个开关,分别是“EX0”(这个是数字0,可别看成字母O了)、“EA”,都是需要打开的。 好的,我们来看图4的介绍中,“EA”为总中断允许控制位,EA=0的时候会屏蔽掉所有的中断请求,所以要配置“EA=1”;EX0为外部中断0的中断允许位,同样的要配置“EX0=1”。这样一来,外部中断0的IE寄存器就配置好了。同理,外部中断1也是这样配置哦。 02、TCON寄存器 接下来我们看蓝色框里的TCON寄存器,见图3。 图5 还是先以外部中断0(INT0)为例,在图3的通道中,我们可以看到,TCON寄存器中与INT0有关的共有两位,分别是“IT0”、“IE0”。再看图5中的介绍可知,IT0用来控制INT0的触发方式,这里我们一般使用下降沿触发方式,所以配置成:“IT0=1”。 IE0则是INT0中断的标志位,当产生中断后,IE0将被自动置1,当CPU相应了中断以后,IE0又会被硬件置1,所以说,这一位我们不需要配置。外部中断1也是一样的。 03、IP寄存器 接下来是绿色框里的“IP”寄存器,见图3. 在这之前,先来讲一下中断优先级的概念。每个中断都有不同的优先级,当两个中断同时触发时,优先级高的先执行,执行完以后再执行优先级低的中断,所以说:优先级高的中断可以中断优先级低的中断,而高优先级中断不可被低优先级或者同级优先级中断打断。 图6 PX0:外部中断0优先级设定 PT0:定时计数器0中断优先级设定

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.lene-v.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'一起学习中断处理程序资料下载',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.lene-v.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);