![]() MCS-51单片机内部的守时/计数器的结构如图1所示,守时器T0特性功用存放器TL0(低8位)和TH0(高8位)构成,守时器T1由特性功用存放器TL1(低8位)和TH1(高8位)构成。特别功用存放器TMOD操控守时存放器的作业办法,TCON则用于操控守时器T0和T1的发动和中止计数,一起办理守时器T0和T1的溢出标志等。程序开端时需对TL0、TH0、TL1和TH1进行初始化编程,以界说它们的作业办法和操控T0和T1的计数。 TMOD和TCON这两个特别功用存放器的格局拜见下表: [1].守时/计数器的办法操控字TMOD,字节地址为89H,其格局如表1: |
![]() |
表1TMOD存放器结构 | |||||||||
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | ||
GATA | ![]() |
M1 | M0 | GATA | ![]() |
M1 | M0 | ||
←T1办法字段→ | ←T0办法字段→ |
[2].守时器操控积存器TCON,字节地址为88H,位地址为88H—8FH,其格局如表2: |
表2TCON结构 | |||||||||
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | ||
TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
TMOD和TCON各位的含义和用处咱们将鄙人面的章节中予以介绍,需求留意的是,TCON的D0—D3位与中止有关,咱们会在中止的内容中加以阐明,MCS-51的守时/计数器共有四种作业办法,咱们逐一进行评论。
守时/计数器0的作业办法0电路逻辑结构见图2(守时/计数器1与其完全一致),作业办法0是13位计数结构的作业办法,其计数器由TH的悉数8位和TL的低5位构成,TL的高3位没有运用。当 |
![]() |
不管是哪种作业办法,当TL的低5位溢出时,都会向TH进位,而悉数13位计数器溢出时,则会向计数器溢出标志位TF0进位。
咱们评论门控位GATA的功用,GATA位的状况决议守时器运转操控取决于TR0的一个条件仍是TR0和INT0引脚这两个条件。当GATA=1时,由于GATA信号封闭了与门,使引脚INT0信号无效。而这时分假设TR0=1,则接通模仿开关,使计数器进行加法计数,即守时/计数作业。而TR0=0,则断开模仿开关,中止计数,守时/计数不能作业。 当GATA=0时,与门的输出端由TR0和INT0电平的状况确认,此刻假设TR0=1,INT0=1与门输出为1,答应守时/计数器计数,在这种状况下,运转操控由TR0和INT0两个条件一起操控,TR0是确认守时/计数器的运转操控位,由软件置位或清“0”。 如上所述,TF0是守时/计数器的溢出状况标志,溢出时由硬件置位,TF0溢出中止被CPU呼应时,转入中止时硬件清“0”,TF0也可由程序查询和清“0”。 在作业办法下,计数器的计数值规模是: 1—8192(213) 当为守时作业办法时,守时时刻的计算公式为: (213—计数初值)╳晶振周期╳12 或(213—计数初值)╳机器周期 其时刻单位与晶振周期或机器周期相同。 假设单片机的晶振选为6.000MHz,则最小守时时刻为: [213—(213—1)]╳1/6╳10-6╳12=2╳10-6(s)=2(us) (213—0)╳1/6╳10-6╳12=16384╳10-6(s)=16384(us)。
当M1,M0=01时,守时/计数器处于作业办法1,此刻,守时/及数器的等效电路如图3所示,仍以守时器0为例,守时器1与之完全相同。 |
![]() |
能够看出,办法0和办法1的差异仅在于计数器的位数不同,办法0为13位,而办法1则为16位,由TH0作为高8位,TL0为低8位,有关操控状况字(GATA、![]() 在作业办法1下,计数器的计数值规模是: 1—65536(216) 当为守时作业办法1时,守时时刻的计算公式为: (216—计数初值)╳晶振周期╳12 或(216—计数初值)╳机器周期 其时刻单位与晶振周期或机器周期相同。 假设单片机的晶振选为6.000MHz,则最小守时时刻为: [213—(216—1)]╳1/6╳10-6╳12=2╳10-6(s)=2(us) (216—0)╳1/6╳10-6╳12=131072╳10-6(s)=131072(us)。 |
![]() 当M1M0=10时,守时/计数器处于作业办法2.此刻守时器的等效电阻如图4所示.咱们仍是以守时/计数器0为例,守时/计数器1与之完全一致。 |
![]() |
作业办法0和作业办法1的最大特色便是计数溢出后,计数器为全0,因而循环守时或循环计数运用时就存在重复设置初值的问题,这给程序设计带来许多不方便,一起也会影响计时精度,作业办法2就针对这个问题而设置,它具有主动重装载功用,即主动加载计数初值,所以也有的文献称之为主动重加载作业办法。在这种作业办法中,16位计数器分为两部分,即以TL0为计数器,以TH0作为预置存放器,初始化时把计数初值别离加载至TL0和TH0中,当计数溢出时,不再象办法0和办法1那样需求“人工干预”,由软件从头赋值,而是由预置存放器TH以硬件办法主动给计数器TL0从头加载。
程序初始化时,给TL0和TH0一起赋以初值,当TL0计数溢出时,置位TF0的一起把预置存放器TH0中的初值加载给TL0,TL0从头计数。如此重复,这样省去了程序不断需给计数器赋值的费事,并且计数准确度也提高了。但这种办法也有其晦气的一面,便是这样一来的计数结构只要8位,计数值有限,最大只能到255。所以这种作业办法很适合于那些重复计数的运用场合。例如咱们能够经过这样的计数办法发生中止,然后发生一个固定频率的脉冲。也能够当作串行数据通讯的波特率发送器运用。
当M1M0=11时,守时/计数器处于作业办法3,此刻,守时/及数器的等效电路如图3所示,仍以守时器0为例,值得留意的是,在作业办法3方法下,守时/计数器1的作业办法与之不同,下面咱们别离评论。 |
![]() |
在作业办法3方法下,守时/计数器0被拆成两个独立的8位计数器TL0和TH0。其间TL0既能够作计数器运用,也能够作为守时器运用,守时/计数器0的各操控位和引脚信号全归它运用。其功用和操作与办法0或办法1完全相同。TH0就没有那么多“资源”可利用了,只能作为简略的守时器运用,并且由于守时/计数器0的操控位已被TL0占用,因而只能借用守时/计数器1的操控位TR1和TF1,也便是以计数溢出去置位TF1,TR1则担任操控TH0守时的发动和中止。等效电路拜见图6。 由于TL0既能作守时器也能作计数器运用,而TH0只能作守时器运用而不能作计数器运用,因而在办法3方法下,守时/计数器0能够构成二个守时器或许一个守时器和一个计数器。
假设守时/计数器0作业于作业办法3,那么守时/计数器1的作业办法就不行避免遭到必定的约束,由于自己的一些操控位已被守时/计数器借用,只能作业在办法0、办法1或办法2下,等效电路拜见图6 |
![]() |
在这种状况下,守时/计数器1一般作为串行口的波特率发生器运用,以确认串行通讯的速率,由于已没有TF1被守时/计数器0借用了,只能把计数溢出直接送给串行口。当作波特率发生器运用时,只需设置好作业办法,即可主动运转。如要中止它的作业,需送入一个把它设置为办法3的办法操控字即可,这是由于守时/计数器自身就不能作业在办法3,如硬把它设置为办法3,天然会中止作业。
|
MCS-51的中止体系
对初学者来说,中止这个概念比较笼统,其实单片机的处理体系与人的一般思想有着许多异曲同工之妙,咱们举个很恰当的比如,在日常日子和作业中有许多相似的状况。假设你正在上班,例如是编译材料,这时侯电话铃响了,你在书本上做个记号(以记下你现在正编译到某某页),然后与对方通电话,而此刻刚好有客人到访,你先停下通电话,与客人说几句话,叫客人稍侯,然后回头持续通完电话,再与客人说话。说话完毕,送走客人,持续你的材料编译作业。 这便是日常日子和作业中的中止现象,相似的状况还有许多,从编译材料到接电话是第一次中止,通电话的进程中引有客人到访,这是第2次中止,即在中止的进程中又呈现第2次中止,这便是咱们常说的中止嵌套。处理完第二个中止使命后,回头处理第一个中止,第一个中止完结后,再持续你原先的首要作业。 为什么会呈现这样的中止呢?道理很简略,人非三头六臂,人只要一个脑袋,在一种特定的时刻内,或许会面临着两、三乃至更多的使命。但一个人又不或许在同一时刻去完结多样使命,因而你只能采剖析使命的轻重缓急,选用中止的办法穿插去完结它们。那么这种状况关于单片机中的中央处理器也是如此,单片机中CPU只要一个,但在同一时刻内或许会面临着处理许多使命的状况,如运转主程序、数据的输入和输出,守时/和计数时刻已到要处理、或许还有一些外部的更重要的中止恳求(如超温超压)要先处理。此刻也得象人的思想相同停下某相同(或几样)作业先去完结一些紧急使命的中止办法。 这样的相同处理办法上升到计算机理论,便是一个资源面临多项使命的处理办法,由于资源有限,面临多项使命一起要处理时,就会呈现资源竞赛的现象。中止技能便是为了处理资源竞赛的一个可行的办法,选用中止技能可使多项使命同享一个资源,所以有些文献也称中止技能是一种资源同享技能。 |
[1].MCS-51的中止结构 |
![]() |
计算机的中止体系能够加强CPU对多使命事情的处理才能。然后使它的运用规模进一步扩展。在MCS-48结构的基础上,MCS-51在增强了I/O的品种、功用和数量的一起,也增强了中止才能。MCS-51供给了5个中止源,两个中止优先级操控,可完成两个中止服务嵌套。当CPU支撑中止屏蔽指令后,可将一部分或一切的中止关断,只要翻开相应的中止操控位后,方可接纳相应的中止恳求。程序设置中止的答应或屏蔽,也可设置中止的优先级。
[2].中止处理流程 CPU呼应中止恳求后,就当即转入履行中止服务程序。不同的中止源、不同的中止要求或许有不同的中止处理办法,但它们的处理流程一般都如下所述。
中止是在履行其它使命的进程中转去履行暂时的使命,为了在履行完中止服务程序后,回头履行原先的程序时,知道程序本来在何处打断的,各有关存放器的内容怎么,就有必要在转入履行中止服务程序前,将这些内容和状况进行备份——即维护现场。就象文章最初举的比如,在看书时,电话玲响需传去接电话时,有必要在书本上做个记号,以便在接完电话后回来看书时,知道从哪些内容持续往下看。计算机的中止处理办法也如此,中止开端前需将个有关存放器的内容压入仓库进行保存,以便在康复本来程序时运用。 中止服务程序完结后,持续履行原先的程序,就需把保存的现场内容从仓库中弹出,康复积存器和存储单元的原有内容,这便是现场康复。 假设在履行中止服务时不是按上述办法进行现场维护和康复现场,就会是程序运转紊乱,程序跑飞,天然使单片机不能正常作业。
在中止处理进行进程中,或许又有新的中止恳求到来,这儿规则,现场维护和现场康复的操作是不答应打扰的,不然维护和康复的进程就或许使数据犯错,为此在进行现场维护和现场康复的进程中,有必要封闭总中止,屏蔽其它一切的中止,待这个操作完结后再翻开总中止,以便完成中止嵌套。
已然有中止发生,就必定有其详细的需履行的使命,中止服务程序便是履行中止处理的详细内容,一般以子程序的方法呈现,一切的中止都要转去履行中止服务程序,进行中止服务。
履行完中止服务程序后,必定要回来,中止回来便是被程序运转从中止服务程序转回到原作业程序上来。在MCS-51单片机中,中止回来是经过一条专门的指令完成的,天然这条指令是中止服务程序的最终一条指令。 [3].MCS-51的中止源 8051有5个中止源,它们是两个外中止INT0(P3.2)和INT1(P3.3)、两个片内守时/计数器溢出中止TF0和TF1,一个是片内串行口中止TI或RI,这几个中止源由TCON和SCON两个特别功用存放器进行操控。 在前一节,咱们已对TCON的操控位进行了阐明,现在持续对它的中止操控有关的位进行议论。TCON存放器的结构如下: |
表1TCON存放器结构 | |||||||||
TCON | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 | ||
位地址 | 8FH | 8EH | 8DH | 8CH | 8BH | 8AH | 89H | 88H |
·IE1:外部边缘触发中止1恳求标志,其功用和操作相似于TF0。
·IT1:外部中止1类型操控位,经过软件设置或清楚,用于操控外中止的触发信号类型。IT1=1,边缘触发。IT=0是电平触发。 ·IE0:外部边缘触发中止0恳求标志,其功用和操作相似于IE1。 ·IT0:外部中止0类型操控位,经过软件设置或清楚,用于操控外中止的触发信号类型。其功用和操作相似于IE1。 SCON是串行口操控存放器,字节地址为98H,SCON的低二位是串行口的发送和接纳中止标志,其格局如下: |
表2SCON存放器结构 | |||||||||
SCON | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
– | – | – | – | – | – | TI | RI | ||
位地址 | 99H | 98H |
·TI:MCS-51串行口的发送中止标志,在串行口以办法0发送时,每逢发送完8位数据,由硬件置位。假设以办法1、办法2或办法3发送时,在发送中止位的开端时TI被置1,TI=1表明串行发送器正向CPU宣布中止恳求,向串行口的数据缓冲器SBUF写入一个数据后就当即发动发送器持续发送。可是CPU呼应中止恳求后,转向履行中止服务程序时,并不清零TI,TI有必要由用户的中止服务程序清“0”,即中止服务程序有必要有“CLR TI”或“ANL SCON, #0FDH”等指令来清零TI。
·RI:串行口接纳中止标志.若串行口接纳器答应接纳,并以办法0作业,每逢接纳到8位数据时,RI被置1,若以办法1、2、3办法作业,当接纳到半个中止位时,TI被置1,当串行口一办法2或3办法作业,且当SM2=1时,仅当接纳到第9位数据RB8为1后,一起还要在接纳到半个中止位时,RI被置1。RI为1表明串行口接纳器正向CPU请求中止。相同RI标志绘声绘色由用户的软件清“0”。 |
[4].中止的操控
关于中止操控,在上一节中咱们现已对TCON和SCON进行了剖析,其实它们两个存放器也是中止的操控存放器,担任对中止的部分功用进行操控。咱们这儿议论的是其他两个操控存放器IE和IP。 MCS-51的对中止的敞开和屏蔽是由中止答应存放器IE操控来完成的,IE的结构格局如下。 |
表3IE存放器结构 | |||||||||
IE | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
EA | – | – | ES | ET1 | EX1 | ET0 | EX0 | ||
位地址 | AFH | ACH | ABH | AAH | A9H | A8H |
下面咱们对IE存放器的各操控位进行介绍:
·EA:中止总操控位,EA=1,CPU敞开中止。EA=0,CPU制止一切中止。 ·ES:串行口中止操控位,ES=1答应串行口中止,ES=0,屏蔽串行口中止。 ·ET1:守时/计数器T1中止操控位。ET1=1,答应T1中止,ET1=0,制止T1中止。 ·EX1:外中止1中止操控位,EX1=1,答应外中止1中止,EX1=0,制止外中止1中止。 ·ET0:守时/计数器T0中止操控位。ET1=1,答应T0中止,ET1=0,制止T0中止。 ·EX0:外中止0中止操控位,EX1=1,答应外中止0中止,EX1=0,制止外中止0中止。 MCS-51有两个中止优先级,即高优先级和低优先级,每个中止源都可设置为高或低中止优先级。假设有一低优先级的中止正在履行,那么高优先级的中止呈现中止恳求时,CPU则会呼应这个高有限级的中止,也即高优先级的中止能够打断低优先级的中止。而若CPU正在处理一个高优先级的中止,此刻,就算是有低优先级的中止宣布中止恳求,CPU也不会理睬这个中止,而是持续履行正在履行的中止服务程序,一直到程序完毕,履行最终一条回来指令,回来主程序然后再履行一条指令后才会呼应新的中止恳求。 为了完成上述功用,MCS-51的中止体系有两个不行寻址的优先级状况触发器,一个指出CPU是否在履行高优先级中止服务程序,另一个指出CPU是否正在履行低优先级的中止服务程序,这两个中止触发器的1状况别离屏蔽一切中止请求和同一级其他其他中止请求,此外,MCS-51还有一个请求优先级存放IP,IP的格局如下,字节地址是B8H。 |
表4IP中止操控存放器结构 | |||||||||
IP | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
– | – | – | PS | PT1 | Px1 | PT0 | PX0 | ||
位地址 | BCH | BBH | BAH | B9H | B8H |
·PS:串行口中止口优先级操控位,PS=1,串行口中止声明为高优先级中止,PS=0,串行口界说为低优先级中止。
·PT1:守时器1优先级操控位。PT1=1,声明守时器1为高优先级中止,PT1=0界说守时器1为低优先级中止。 ·PX1:外中止1优先级操控位。PT1=1,声明外中止1为高优先级中止,PX1=0界说外中止1为低优先级中止。 ·PT0:守时器0优先级操控位。PT1=1,声明守时器0为高优先级中止,PT1=0界说守时器0为低优先级中止。 ·PX0:外中止0优先级操控位。PT1=1,声明外中止0为高优先级中止,PX1=0界说外中止0为低优先级中止。 [5].中止的呼应 MCS-51CPU在每一个机器周期次序查看每一个中止源,在机器周期的S6按优先级处理一切被激活的中止恳求,此刻,假设CPU没有正在处理更高或相同优先级的中止,或许现在的机器周期不是所履行指令的最终一个机器周期,或许CPU不是正在履行RETI指令或拜访IE和IP的指令(由于按MCS-51中止体系的特性规则,在履行完这些指令之后,还要在持续履行一条指令,才会呼应中止),CPU鄙人一个机器周期呼应激活了的第一流中止恳求。 中止呼应的首要内容便是由硬件主动生成一条长调用LCALL addr16指令,这儿的addr16便是程序存储器中相应的中止区进口地址,这些中止源的服务程序进口地址如下: |
表5个中止源的服务程序进口地址 | |||||||||
中止源 | 进口地址 | ||||||||
外中止0 | 0003H | ||||||||
守时/计数器0 | 000BH | ||||||||
外中止1 | 0013H | ||||||||
守时/计数器0 | 001BH | ||||||||
串行口中止 | 0023H |
生成LCALL指令后,CPU紧跟着便履行之.首先将PC(程序计数器)的内容压入仓库维护断点,然后把中止进口地址赋予PC,CPU便按新的PC地址(即中止服务程序进口地址)履行程序。
值得一提的是,各中止区只要8个单元,一般状况下(除非中止程序十分简略),都不或许装置下一个完好的中止服务程序。因而,一般是在这些进口地址区放置一条无条件搬运指令,使程序按搬运的实践地址去履行真实的中止服务程序。 |