今日头条
自学不是说不可以,速成的话还是找一对一的比较好,建议学完51学STM32,51单片机也并不是很难,利用业余时间就够了,51单片机入门再学习STM32技术会更上一层楼,然后做几个项目,这样好找工作,有不懂的我可以提供一些帮助,我对单片机方面研究还是有一套自己的看法的,下面分享一些单片机基础知识,希望能帮助到自学的你。
单片机的SCON是串行口,它当中有两个位,这两个位是作为中断标志位,其中还有其它的位这个说串行口的时候,再给大家具体介绍每一位的具体用法,80C51的中断控制是对特殊功能寄存器的控制来达到的一个中断的控制,也就是说中断有了一个中断申请,使中断标志位变成1CPU也查询到了,CPU要不要允许当前的这次中断就要通过对特殊功能寄存器IE的控制来达到具体的控制,IE当中每一个位把它理解成每一个位都是一个电子开关,这个开关给它1或者0就会把开关打到对应的位置,要想终端能够允许就把这个开关打到1,所以这里面的每一位都是有一个特定的含义的,分别对应的就是子开关和总阀门,也就是中断的子开关和中断的总开关,可以对它进行赋值来控制中断是不是允许IP就是中断优先级的控制寄存器。
51单片机有两级中断优先级,要么是高优先级,要么是低优先级,IP默认的单片机上电复位的时候里面的每一个位都是0,如果说想把当前的这个中断设置成高优先级,就把这一位给它指成1,想把它设成低优先级就把这成0,因为上电复位的时候就是零,除非想把它设成高优先级,也就是把它设置成1,不去设置它,它会按照默认的全部属于低优先级,虽然说都属于低优先级,但是又有5个中断,这5个中断还是要排一个中断的顺序,这个顺序是有默认的,它们是属于第一个链接,但是这5个中断如果说同时申请来了,总得有一个预案,到底哪一个先执行,哪个后执行,这个是由中断的默认的自然优先级来决定的。
优先级的顺序是按照从高到低的顺序,外部中断0的计算器0,外部中断1定时器计数器1,串行口每一个中断又给了它中断的服务入口地址,载入当中有几个单元终端服务的入口地址,也就是对应的从0003H到0023H,每一个中断给了一个中断向量入口地址,实际上就是要找中断服务程序的入口地址,在入口地址当中一般会做一条跳转指令,把它跳到中断的服务函数去执行,就是说默认的单片机上电的时候,IP的初值为0,也就是默认所有的终端都是低优先级,如果有多个中断同时申请的时候,应该按照这个顺序,比如三个中断同时来了中断申请,这样它的标志位都是变成1了,CPU就按照这个默认的自然优先级的顺序,先去处理外部中断0,外部中断0的事情处理完成之后再去处理定时计数器0,定时计数器0处理完了,再去处理外部中断1,就是按照这个顺序来执行,默认有这么一个运行的机制。
想打断这个机制,比如想使定时计数器0的这个优先级高于外部中断0,不去设置优先级的话肯定默认的只能按照这个顺序来走,同样是三个中断同时来的时候,想使定时计数器0的这个中断先被执行,然后再去执行外部中断0,再去执行外部中断1,这个时候就可以设置IP当中,把它制成1,其他两个位都给它清成0,这样的话它就属于是高优先级,它们俩处于低优先级,它处于高优先级肯定是先服务,所以它们三个同时来中断申请的时候肯定先执行0,执行完成之后它们俩是处于同级中断,如果当前要想打断这个优先级的顺序。
中断优先级的处理有三个基本原则,第一个是CPU同时接触到几个中断时需要先响应的是最高级的中断请求,优先级级别最高,它就先得到一个响应,正在执行中断的过程当中,正在执行外部中断,正在执行的中断服务函数在执行的过程当中又发生了一个中断申请,比如发生定时计数器0的中断申请,这个时候是不能打断的,因为你的优先级比较低,得按照默认的自然优先级的话,你的优先级比我低你就不能打断我,除非是把外部中断0设置成的优先级,这个时候正在执行外部中断0的过程当中来了一个中断申请,因为设置它的优先级比我高,所以它可以打断我,如果它的优先级没有设置,默认的自然优先级比我低,它是不可能打掉外部中断0的,也就是说正在进行的一个中断服务的过程当中,不能被新的同级或者是低级的中断所打断,但是可以被高优先级的中断所打断,这个和我们人处理事情的机制是一样的,也就是中断处理基本原则。
大家有需要的话可以反复的看一下相关的文章,熟练掌握相关的知识能够达到随心所欲的设置,从而去应付不同的优先级的排序,包括终端的控制,这样编写程序例子的时候就比较容易上手了。
对单片机感兴趣的可以查看往期分享内容,希望能帮助大家在学习单片机的路上少走一些弯路,想要入门单片机可以持续关注创为单片机编程。
全部0条评论
快来发表一下你的评论吧 !