单片机软件流程图(每个指令的意思,及主要功能)

单片机软件流程图(每个指令的意思,及主要功能),第1张

51单片机有5个中断源,其中两个定时器均为中断源,一个是T0,一个是T1

定时器中断是当定时或计数满时向CPU提出中断请求,T0的中断服务子程序入口地址是000BHT0中断就是定时器中断,也就是Timer0,分内部外部,内部用单片机本身的晶振频率,外部给单片机P34一个脉冲信号作为T0的定时器的工作频率,单片机内部有两个定时器中断T0和T1

5个中断源,分别是T0,T1,外部中断INT0,和INT1,还有一个就是串口中断

定时器中断工作原理是分别给TH0,TL0(或者TH1,TL1)一个值,然后取决于你在选择定时器中断方式上是16位还是8位,还是自动从新赋值的工作方式,然后每经过一个机器周期,定时器在你所给定的值得基础上加1,一直加到0xFFFF,然后产生溢出,去执行你所编写的程序,如果你设定的不是自动重装初值的工作方式在定时器子程序最后或者开始,手动附上初值

定时器工作方式的优点我感觉是提高CPU的工作效率,不像外部中断一直扫描终端程序,判断你是否给中断信号,定时器就相反不会扫描,只等待加到满为止采取执行

导语:单片机,其实就是一种用于集成电路中的芯片,而单片机的定时器是一个电子元件,它是一个稳定的计数器,是由单片机本身提供的。它也是单片机上的一个连接部件,可以用来编程。定时器还有一个功能显而易见就是可以用来定时,同时,它也可以用来统计一些脉冲信号。下面就来介绍下单片机定时器的使用的相关内容。

  定时器的结构

定时器是由两个寄存器组成的,其中一个寄存器是用来确定计数器的工作形式和功能的,另外一个计时器是用来控制单片机的启动和停止的,同时它也是设置溢出的一个标志。

计数过程

每来一个脉冲计数器加1,当加到计数器为全1(即FFFFH)时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时器/计数器中断允许时)。如果定时器/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。

定时应用

用作定时器:此时设置为定时器模式,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。计数值N乘以机器周期Tcy就是定时时间t 。

计数运用

用作计数器:此时设置为计数器模式,外部事件计数脉冲由T0或T1引脚输入到计数器。每来一个外部脉冲,计数器加1。但单片机对外部脉冲有基本要求:脉冲的高低电平持续时间都必须大于1个机器周期。

定时器的使用

定时器的使用主要分为五个步骤,首先是要打开中断的可以允许的位置,主要是对IE寄存器的控制,然后选择定时器的工作的形式,定时器的一个格式是TMOD的形式,主要有四种方式。第一种计数的方式是十三位加一的形式,第二种是十六位加一的计数器,第三种的定数器被分解成两部分,一个是八位的寄存器,另外一个是八位的计数器。第三步就是要为定时器进行赋值,首先定时器的初值是等于计数器模值减去计数器记满的招满值,而定时器的初值是等于模值减去预定时的时间与单片机时钟周期的十二倍。接下来就是启动计时器,当TRO为0的时候,停止TO开始计数,而TRO值为1的时候,就启动TO进行计数。当TFO为0的时候,没有TO的中断,这时是没有硬件复位,而当值为1的时候有TO溢出中断的情况。当TR1为0的时候,停止TI进行计数,而值为1的时候开启T1进行计数。

当TF1为0的时候,没有T1的中断,为1 的时候会出现T1的溢出中断情况。当IE1的值为0的时候时,出现硬件的复位而当其值为1的时候出现中断。当IT1的值为0的时候INT1出现电平触发的情况,也就是软件复位,而当值为1的时候,INT1的负边沿会出现触发的情况。当IE0的值为0时会出现硬件复位,而当IEO的值为1的时候,INT0上会有中断的情况。当 IT0的值为0时,INT0会发生电平触发,也就是软件复位,同时INT0的负边沿触发。最后一步就是计数器中断入口程序。

定时器/计数器的工作方式

方式0为13位计数,由TL0的低5位(高3位未用)和TH0的8位组成TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。

方式1的计数位数是16位,由TL0(TL1)作为低8位、TH0(TH1)作为高8位,组成了16位加1计数器 。

方式2为自动重装初值的8位计数方式。

在方式2下,当计数器计满255(FFH)溢出时,CPU自动把TH 的值装入TL中,不需用户干预。因此特别适合于用作较精确的脉冲信号发生器。

方式3只适用于定时器/计数器T0,定时器T1方式3时相当于TR1=0,停止计数。

工作方式3将T0分成为两个独立的8位计数器TL0和TH0 。

总而言之,定时器的使用可以为单片机的功能增加一些性能上的增强。所以,合理的运用定时器将会帮助我们使用单片机。以上就是有关单片机定时器的使用的相关内容,希望能对大家有所帮助!

#include<reg52h>//包含文件进来

unsigned int i=0,num=0,time=60;//定义整型变量, i,num,time

unsigned char ge,shi;//

unsigned int code table[10]={0x3f,0xXXX,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//用数组来装七段显示器的从0到9的数

void delay(unsigned int);//声明函数

void display();//声明函数

main()//

{TMOD=0X01;//设置定时器0为工作方式1

TH0=(65536-50000)/256;//

TL0=(65536-50000)%256;//装初始值也就是计时器

EA=1;//开总中断

ET0=1;//开定时器0中断

TR0=1;//定时器0工作

EX0=1;//开外部中断

IT0=1;//跳变沿触发方式这一段是以开中断的命令

while(1)//循环

{while(time!=5)//time!=5时在下面循环

{ P1=0XF3;//P1口赋值

if(num==20)//

{time--;//

num=0;//

}

display();//显示

}

while(time!=2)//同上

{if(num==10)//

P1=0XF7;//

if(num==20)//

{P1=0XF3;//

num=0;//

time--;//

}

display();//

}

while(time!=0)//同上

{ P1=0XF5;//

if(num==20)//

{num=0;//

time--;//

}

display();//

}

time=30;//TIME重新赋值

while(time!=5)//同上

{P1=0XDE;//

if(num==20)//

{num=0;//

time--;//

}

display();//

}

while(time!=2)//同上

{if(num==10)//

P1=0XFE;//

if(num==20)//

{P1=0XDE;//

num=0;//

time--;//

}

display();//

}

while(time!=0)//同上

{P1=0XEE;//

if(num==20)//

{num=0;//

time--;//

}

display();

}

time=60;重赋值

}

}

void display()显示函数

{ shi=time/10;把TIME的十位数赋给SHI

ge=time%10;把TIME的个位数赋给GE

P2=0XFE;

P0=table[ge];//P0口输出个位

delay(5);

P2=0XFD;

P0=table[shi];//P0口输出十位

delay(5);

P2=0XFB;

P0=table[ge];同上

delay(5);

P2=0XF7;

P0=table[shi];同上

delay(5);

}

void delay(unsigned int z)//延迟函数

{unsigned int x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void exter0() interrupt 0//外部中断函数

{ num=0;

time=20;/数码管计时显示/

P1=0XF6;

While(time!=0)

{

If(num=20)

{num=0;

time--}

disply();}}

void time0() interrupt 1定时器0中断函数

{num++;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

}

其余的太简单,你应该都懂,所以就不全部都标示了

这是定时器0的中断函数。

2

可以看到Timer0——Timer0——定时器0——中断。

3

定时器设置初始值和开放,当计数器计数设置数量,将会有一个定时器中断,然后不管你有什么代码运行时的程序,将跳转到IsrTimer0这个函数运行,运行完成后返回之前执行的代码。

4

这个方法不能改变,函数名也不能改变。

查看更多

要讲定时离不开中断,两者结合使用的。定时计数器主要用到TMOD工作模式寄存器,TCON定时器的控制寄存器,EA中断允许控制寄存器,IP中断优先级寄存器 定时器控制寄存器TCON (88H)TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0TCONTF0/TF1:定时器0/定时器1溢出中断申请标志位: =0:定时器未溢出; =1:定时器溢出申请中断,进中断后自动清零。TR0/TR1:定时器运行启停控制位: =0:定时器停止运行; =1:定时器启动运行。TCON:Timer控制寄存器,是管理定时器工作的SFR(其中低4位管外部中断)定时器控制寄存器TCON (88H)TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0TCONIE0/IE1:外部中断申请标志位: =0:没有外部中断申请; =1:有外部中断申请。IT0/IT1:外部中断请求的触发方式选择位: =0:在INT0/INT1端申请中断的信号低电平触发; =1:在INT0/INT1端申请中断的信号负跳变触发TCON:Timer控制寄存器,低4位管理外部中断�8�4在CPU已经开放了外部中断允许的前提下:�8�4在INT0/INT1引脚输入一个负脉冲或低电平, �8�4TCON寄存器中的IE0/IE1标志位自动变“1”, 检测到IE0/IE1变“1”后,将产生指令:执行中断服务程序,�8�4并将IE0/IE1标志位自动清“0”,以备下次申请。外部中断(INT0,INT1)申请过程 单片机的定时/计数器定时器计数器的概念一、计数的概念

选票:画“正”。这就是计数,生活中计数的例子处处可见。比如一个水盆在水龙头下,水龙没关紧,水一滴滴地滴入盆中。水滴持续落下,盆的容量是有限的,过一段时间之后,水就会逐渐变满。51单片机中有两个计数器,分别称之为T0和T1,这两个计数器分别是由两个8位的RAM单元组成的,即每个计数器都是16位的计数器,最大的计数量是65536。

二、定时

计数器是如何作为定时器来用的呢?比如一个闹钟,将它定时在1个小时后响闹,我们也能说成是秒针走了(3600)次,所以时间就转化为秒针走的次数的,也就是计数的次数了,可见,计数的次数和时间之间十分相关。那么它们的关系是什么呢?也就是秒针每一次走动的时间要正好是1秒。

只要计数脉冲的间隔相等,则计数值就代表了时间的流逝。由此,单片机中的定时器和计数器是同一个东西,只不过计数器是记录的外部的触发脉冲,而定时器则是由单片机供给一个非常稳定的计数源。供给定时器的是计数源是机器周期也就是由单片机的晶体震荡器经过12分频后获得的一个脉冲源(机器周期)。晶振的频率是很准确的,所以这个计数脉冲的时间间隔也很准。一个12M的晶振,它供给给计数器的脉冲时间间隔是1微秒。计数脉冲的间隔与晶振有关,12M的晶振,计数脉冲的间隔是1微秒。这是逻辑图,可以看到T1是一个单刀双掷开关,说明定一个定时/计数器同一时刻要么作定时用,要么作计数用,不能同时用;接通T1引脚时作为外部计数用。(T0的引脚是P34,T1的引脚是P35)。

比如滴水的例子,当水持续落下,盆中的水逐渐变满,最终会有一滴水使得盆中的水全满了。这个时候如果再有一滴水落下,水会漫出来,用术语来讲就是“溢出”,而每一滴水落下,用术语来说就是发出一个计数脉冲。 水溢出是流到地上,而计数器溢出后就会引发一个定时中断事件,就象定时的时间一到,闹钟就会响一样。 现在另一个问题是:要有多少个计数脉冲才会产生事件。 刚才已研究过,计数器的容量是16位,也就是最大的计数值到65536,因此计数计到65536就会产生溢出。这个没有问题,问题是我们现实生活中,经常会有少于65536个计数值的要求,如制药厂包装线上,一瓶药片为100粒,500瓶为一箱 那么怎么样来满足这个要求呢?举例 如果是一个空的水盆要1万滴水滴进去才会满,我在开始滴水之前就先放入一勺水,还需要10000滴吗?对了,这时我们就采用预置数的办法,我要计 100,那我就先放进65436,再来100个脉冲,不就到了65536了吗。定时也是如此,每个脉冲是1微秒,则计满65536个脉冲需时65536 毫秒,但现在我只要10毫秒,怎么办?10个毫秒为10000个微秒,所以,只要在计数器里面放进55536就可以了。溢出的概念和设置任意定时计数的方法3个16位定时器/计数器 ——(51系列有2个16位Timer少一个T2)定时器:对片内机器时钟(周期方波)进行计数计数器:对Tx引脚输入的负脉冲进行计数与Timer工作有关的特殊功能寄存器: TCON 和 TMODAT89S52单片机的定时器/计数器单片机定时/计数器内部结构单片机定时/计数器内部结构图定时器的2个特殊功能寄存器(TCON)TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0定时器控制寄存器TCON (88H)TF0/TF1: 定时器0/1计数溢出标志位。 =1 计数溢出; =0 计数未满 TF0/TF1标志位可用于申请中断或供CPU查询。 在进入中断服务程序时会自动清零;但在 查询方式时必须软件清零。TR0/TR1: 定时器0/1运行控制位。 =1 启动计数; =0 停止计数TR0/TR1:定时器0/1运行控制位: TR0/TR1 =0 时,Timer0/1停止计数 TR0/TR1 =1 时,Timer0/1启动计数定时器T0/T1 中断申请过程�8�4 在已经开放T0/T1中断允许且已被启动的前提下:�8�4 T0/T1加满溢出时 TF0/TF1标志位自动置“1” �8�4 检测到TCON中TF0/TF1变“1”后,将产生指令: 执行中断服务程序,�8�4 TF0/TF1标志位会自动清“0”,以备下次中断申请。 定时/计数器可按片内机器周期定时,也可对由T0/T1引脚输入一个负脉冲进行加法计数TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0TCON (88H)GATE C / T M1 M0 GATE C / T M1 M0定时器方式寄存器TMOD (89H)T1T0M1,M0:工作方式定义位 ( 定义4 种方式 ):C/T :计数器/定时器选择位 = 1 外部事件计数器。对T0/T1引脚的负脉冲计数; = 0 片内时钟定时器。对机器周期脉冲计数定时0 0:13位 定时器——几乎不用0 1:16位 定时器——经常用到1 0:可自动重装的 8位 定时器——经常用到1 1:T0 分为2个8位 Timer;T1 此时不工作 ——几乎不用GATE C / T M1 M0 GATE C / T M1 M0T1T0GATE门控位: Timer可由软件与硬件两者控制 �8�4 GATE = 0 ——普通用法 Timer的启/停由软件对TRx位写“1”/“0”控制定时器方式寄存器TMOD(89H)�8�4 GATE = 1 ——门控用法 Timer的启/停由软件对TR0/TR1位写“1”/“0” 和在INT0/INT1引脚上出现的信号的高/低共同控制GATE=0时,定时/计数是否工作,只取决于TR0是否为1。GATE=1,只有TR0为1,且INT0管脚也是高电平,定时/计数才工作。 从电路上看到GATE是一个非门,它与INTx组成一个或门,这个或门与TR0又组成一个与门。当GATE=0时,则~GATE=1(非门),此时无论INT0为高或低,它们相或之后必然为1,此时只要TR0=1,则工作,TR0=0则不工作,不受INT0的影响。当GATE=1时,~GATE=0,则INT0=1时,它们相或为1,此时定时器是否工作受TR0影响;若INT0=0,则无论TR0为什么,定时器都不能工作,即当GATE=0时,定时器受INT0和TR0共同的作用。 所以,GATE位的状态决定定时器运行控制取决于TR0的一个条件还是TR0和INT0引脚这两个条件。当GATE=1时,由于GATE信号封锁了与门,使引脚 INT0信号无效。而这时候如果TR0=1,则接通模拟开关,使计数器进行加法计数,即定时/计数工作。而TR0=0,则断开模拟开关,停止计数,定时 /计数不能工作。 当GATE=0时,与门的输出端由TR0和INT0电平的状态确定,此时如果TR0=1,INT0=1与门输出为1,允许定时/计数器计数,在这 种情况下,运行控制由TR0和INT0两个条件共同控制,TR0是确定定时/计数器的运行控制位,由软件置位或清“0”。振荡器�8�112TLx THx (8位) (8位)TFx申请中断Tx端TRx位GATE位INTx端≥1&C/T=0C/T=1控制 开关或门与门非门定时器结构与工作方式工作方式1:——16位的定时/计数器在工作方式1下,计数器的计数值范围是: 1~65536(216)

当为定时工作方式1时,定时时间的计算公式为:

(216—计数初值)╳晶振周期╳12或 (216—计数初值)╳机器周期

其时间单位与晶振周期或机器周期相同。

�8�4 THx/TLx赋初值:THx赋高8位,TLx赋低8位工作方式1 的编程要点: �8�4 TMOD选方式: 写“M1,M0”=01 选方式1�8�4 若不用门控位,直接用软件写TRx控制启/停�8�4 若使用门控位,先置位TRx,然后由INTx端 的高/低电平来控制其启/停�8�4 若要允许中断,还须先置位ETx、EA等中断 允许控制位,并编写中断服务程序�8�4 若不用中断,可查询“计数溢出标志TFx” 的方式工作,但溢出标志TFx须软件清0工作方式2:——8 位自动重装的定时/计数器振荡器�8�112TLx (8位)TFx申请中断Tx端TRx位GATE位INTx端≥1&C/T=0C/T=1控制 =1开关接通或门与门THx (8位)溢出位门开�7�4 THx/TLx赋相同初值 在TLx计数达到0FFH 再加“1”时,TL0 将溢出,进位位直接进入“TFx”去申请 中断,同时打开三态门,使THx中的值 自动重装(Copy)进TLx工作方式 2 的编程:�7�4 TMOD寄存器选方式: 写“M1,M0” = 10选中方式2�7�4 其他用法与各种方式1完全相同T0: 组织成TL0和TH0两个8位定时/计数器Timer工作方式 3 ——几乎无用T1: 不再是定时/计数器了 T1 的TR1和TF1出借给TH0当控制位使用, 剩下的TH1/TL1寄存器只能当作普通寄存 器用。振荡器�8�112TL0 (8位)TF0申请中断T0端TR0位GATE位INT0端≥1&C/T=0C/T=1控制 =1开关接通或门与门TH0 (8位)TF1申请中断TR1位控制 =1Timer工作方式 3 结构:�7�4T0成为双 8位Timer �7�4T1不再有Timer功能 �7�4TF1,TR1出借给TH0 定时器小结: (2个16位加法计数器)�7�4运行/停止由TRx位控制,(当GATE=1时: 由TRx位和Tx引脚上的信号共同控制)�7�4工作方式由TMOD决定; 计数/定时由C/T位决定 工作方式0(13位) 永远不用 工作方式3(T0拆为双8位) 几乎无用 工作方式1(16位) 经常用到 工作方式2(8位自动重装) 经常用到�7�4从初值按机器周期或外部脉冲递加,溢出位 TFx申请中断;中断允许由ETx位和EA位控制,定时器/计数器的定时/计数范围 工作方式0:13位定时/计数方式,因此,最多能计到2的13次方,也就是8192次。 工作方式1:16位定时/计数方式,因此,最多能计到2的16次方,也就是65536次。 工作方式2和工作方式3,都是8位的定时/计数方式,因此,最多能计到2的8次方,也说是256次。 预置值计算:用最大计数量减去需要的计数次数即可

以上就是关于单片机的T0中断是什么全部的内容,包括:单片机的T0中断是什么、有关单片机定时器的使用和定时器的介绍、单片机软件流程图(每个指令的意思,及主要功能)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/8818669.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-21
下一篇 2023-04-21

发表评论

登录后才能评论

评论列表(0条)

保存