您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 电气安装工程 > 第10讲-C8051F单片机的定时器计数器分析
第10讲C8051F020单片机定时器/计数器10.1C8051F020定时器/计数器概述10.2定时器的一般结构和工作原理10.3定时器/计数器T0和T110.4定时器/计数器T2和T410.1C8051F020定时器/计数器概述定时操作:定时采样,定时扫描,定时中断测量外部信号:累加统计,测量周期等定时输出:PWM等(1)定时器/计数器的功用C8051F020内部有5个定时器/计数器:其中三个16位定时器/计数器与标准8051中的计数器/定时器兼容,还有两个16位自动重装载定时器可用于ADC、SMBus、UART1或作为通用定时器使用。(2)C8051F020单片机定时器/计数器资源C8051F020定时器/计数器的工作方式10.2定时器的一般结构和工作原理方式选择计数器定时器启/停控制执行机构加1计数器:如T0~T4溢出标志查询中断实质是计数器,脉冲每一次下降沿,计数寄存器数值将加1。计数的脉冲如果来源于单片机内部的晶振,由于其周期极为准确,这时称为定时器。计数的脉冲如果来源于单片机的引脚,由于其周期一般不确定,可表示事件发生,这时称为计数器。外部输入信号的下降沿触发计数。计数器在每个时钟周期或时钟周期的12分频采样外部输入信号,若一个周期的采样值为1,下一个周期的采样值为0,则计数器加1,故识别一个从1到0的跳变需2个周期。所以,对外部输入信号最高的计数速率是时钟频率的1/2或1/24(取决于是否12分频)。同时,外部输入信号的高电平与低电平保持时间均需大于一个周期。(1)计数方式(2)定时方式每一个计数周期计数器加1,直至计满溢出,产生中断请求。对于一个N位的加1计数器,若计数周期Tclock是已知的,则从初值a开始加1计数至溢出所占用的时间为:2nclockTTa()则,最大定时时间:maxclock2nTT式中n由工作方式决定,Tclock为定时器/计数器的计数脉冲周期,由C8051F的系统时钟或系统时钟经12分频提供,是否需要12分频取决于对时钟控制寄存器CKCON的设定。时钟控制寄存器CKCON位7:未用。读=0b,写=忽略。位6-3:T4M-T0M:T4到T0的时钟选择(不包含T3,T3的时钟选择由T3控制寄存器TMR3CN的第0位T3XCLK决定)。0:定时器按系统时钟的12分频计数1:定时器按系统时钟频率计数位2-0:保留。读=000b,写入值必须是000b。10.3定时器/计数器T0和T1对定时器0和定时器1的访问和控制是通过SFR实现的。定时器/计数器控制寄存器(TCON)用于允许/禁止定时器0和定时器1以及指示它们的状态.定时器/计数器方式寄存器(TMOD)中的方式选择位M1-M0来选择工作方式。T0和T1都是16位的加1计数器,访问时以两个字节的形式出现:TH0+TL0、TH1+TL11、计数寄存器TH与TL2、定时器控制寄存器TCON(88H)TF1TR1TF0TR0IE1IT1IE0IT0TRx:Timer0/1运行控制位。=1启动计数;=0停止计数10.3.1与定时器有关的特殊功能寄存器TFx:Timer0/1计数溢出标志位。=1计数溢出;=0计数未满TFx标志位可用于申请中断或供CPU查询。在进入中断服务程序时会自动清零;但在查询方式时必须软件清零。3、定时器方式寄存器TMOD(89H)T0M0T0M1C/T0GATE0T1M0T1M1C/T1GATE1TMOD字节地址89HD7D6D5D4D3D2D1D0控制T0控制T1方式选择00:方式001:方式110:方式211:方式3定时/计数选择0:定时器1:计数器门控位定时器T0、T1的工作方式(1)工作方式1:——16位的定时/计数器10.3.2T0和T1的工作方式和电路结构16位计数器启/停控制GATE0=0时:TR0=1启动计数GATE0=1时:TR0=1且INT0=1启动计数时基选择定时/计数选择方式1:定时初值/定时时间计算若T0的计数初值为a,则T0从初值a加1计数至溢出所需的时间为:(10)1612(2)TMoscTasf式中fOSC为系统时钟频率,T0M为T0的时钟选择位。THx/TLx赋初值:THx赋高8位,TLx赋低8位工作方式1的编程要点:TMOD选方式:写“M1,M0”=01b选方式1若不用门控位,直接用软件写TRx控制启/停若使用门控位,先置位TRx,然后由INTx端的高/低电平来控制其启/停若要允许中断,还须先置位ETx、EA等中断允许控制位,并编写中断服务程序若不用中断,可查询“计数溢出标志TFx”的方式工作,但溢出标志TFx须软件清02、工作方式2:——8位自动重装的定时/计数器用于需要重复定时和计数的场合。最大计数值:256(28)THx/TLx赋相同初值在TLx计数达到0FFH再加“1”时,TL0将溢出,“TFx”置1去申请中断,同时THx中的值自动重装(Copy)进TLx工作方式2的编程:TMOD寄存器选方式:写“M1,M0”=10b选中方式2其他用法与各种方式1完全相同3、工作方式3方式3只适用于定时器0。此时,定时器0的TH0、TL0成为两个独立的计数器。TL0可作为定时器/计数器,占用定时器0在TCON和TMOD中的控制位和标志位。TH0只能作为定时器使用,占用定时器1在TCON和TMOD中的控制位和标志位。10.3.3T0和T1的编程确定定时器/计数器的工作方式----初始化TMOD根据需要初始化CKCON计算定时器/计数器的计数初值,装载TH和TL寄存器。中断设置(IE、IP)启动定时/计数器(TCON)1、初始化步骤2、计数初值的计算初值a=M-Ca为计数初值初值M为计数器的模,与工作方式有关,C为所需要的计数值最大定时时间(设fOSC=12MHz、T0M=0):方式0:TMAX=213×1μs=8.192ms方式1:TMAX=216×1μs=65.536ms方式2、3:TMAX=28×1μs=0.256ms(10)1612(2)TMoscTasf10.3.4定时器/计数器的应用实例例1若fOSC=12MHz,用系统时钟的十二分频作为计数源,请计算定时2ms所需的初值,并给出初始化程序。解:(1)工作方式的选择∵fOSC=12MHz,用系统时钟的十二分频作为计数源时,方式2、3的最大定时时间只有0.256ms,因此要想获得2ms的定时时间,必须用方式0或方式1。(2)定时器初值计算方式0a=213-2ms/1us=6192=1830H即:TH0=0C1H;TL0=10H(高三位为0)方式1a=216-2ms/1us=63536=F830H即:TH0=0F8H;TL0=30H(3)初始化程序voidT0_mode1_2ms_init(void){CKCON&=0xf7;//T0计数源选择系统脉冲的12分频TMOD=0x01;//T0,方式1TH0=0xf8;//初值TL0=0x30;TCON|=0x10;//启动T0,可用TR0=1代替}给定时器赋初值的语句也可以采用如下方法:TH0=(65536-2000)/256;TL0=(65536-2000)%256;或TH0=-2000/256;TL0=-2000%256;例2若fOSC=12MHz,T1工作于方式1,产生50ms的定时中断,TF1为高级中断源。试编写主程序和中断服务程序,使P1.0产生周期为1s的方波。解:让P1.0每500ms取反一次即可实现。定时器的单次定时时间不可能达到500ms,可让定时器多次定时产生500ms的定时时间,如让T1工作在方式1,单次定时时间为50ms,那么T1中断10次就是500ms的时间。(1)定时器初值计算a=216-50ms/1us=63536-50000=15536=3CB0H即:TH0=0x3c;TL0=0xb0(2)初始化程序包括T1初始化和中断系统初始化,主要是对IP、IE、CKCON、TCON、TMOD的相应位进行正确的设置,并将时间常数送入T1。本例中将初始化操作放在主程序中完成,当程序规模较大时,应编写单独的初始化程序,以利于程序的模块化设计。(3)中断服务程序中断服务程序除了完成要求的方波产生这一工作之外,还要注意将时间常数重新送入T1中,为下一次产生中断作准备。#includec8051f020.hsbitP1_0=P1^0;intcount=10;//10次T1中断为500msvoidmain(void){WDTCN=0xde;//关看门狗WDTCN=0xad;XBR2=0x40;//使能端口输出CKCON&=0xef;//T1的计数源选择系统脉冲的12分频TMOD=0x10;//T1方式1P1_0=0;TH1=0x3c;//初值TL1=0xb0;IE|=0x88;//允许T1中断IP|=0x08;//TF1中断为高级中断TCON|=0x20;//启动T1while(1);//死循环,等待中断,产生方波}主程序voidTimer1_ISR(void)interrupt3{TH1=0x3c;//重装初值TL1|=0xb0;count--;//中断计数if(count==0)//500ms到,重赋计数初值,P1.0取反{count=10;P1_0=!P1_0;}}中断服务程序问题:为什么用TL1|=0xb0;而非TL1=0xb0?例3在频率为12MHz的标准51单片机上,在P1.0引脚上输出周期为2.5S,占空比为20%的脉冲信号。中断次数加1次数=高电平?次数=周期?P1.0=0P1.0=1返回解:#includec8051f020.hsbitWAVE=P1^0;ucharperiod=250;ucharhigh=50;ucharoverflow_count=0;voidmain(void){WDTCN=0xde;//关看门狗WDTCN=0xad;XBR2=0x40;//使能端口输出CKCON&=0xef;//T1的计数源选择系统脉冲的12分频TMOD=0x10;//T1方式1WAVE=0;TH0=(65536–10000)/256;//初值TL0=(65536–10000)%256;IE|=0x88;//允许T1中断IP|=0x08;//TF1中断为高级中断while(1);//死循环,等待中断,产生方波}voidtimer1_ISR(void)interrupt1{TH0=(65536–10000)/256;TL0=(65536–10000)%256;if(++overflow_count==high)WAVE=0;elseif(overflow_count==period){overflow_count=0;WAVE=1;}}中断服务程序10.4定时器/计数器T2和T4定时器/计数器T2和T4的结构基本相同,具有三种工作方式:(1)T2用做UART0的波特率发生器T4用做UART1的波特率发生器T2和T4其主要区别在于:自动重装初值的16位定时器/计数器方式、带捕捉的16位定时器/计数器方式波特率发生器方式10.4.1概述(2)T2可以用于启动ADC数据转换和触发DAC输出更新T4可用于触发DAC输出更新10.4.2定时器/计数器T2的功能特点T2为16位定时/计数器,由TL2(低字节)和TH2(高字节)组成。C/T2=0时作为定时器,系统时钟作为定时器的输入(由CKCON的T2M位指定不分频或12分频)。C/T2=1时作为计数器,T2输入引脚上的负跳变使计数器加“1”。T2还可以用于启动ADC数据转换。三种工作方式(由T2CON中的配置位选择):自动重装初值的16位定时器/计数器方式、带捕捉的16位定时器/计数器方式和波特率发生器方式。T2控制寄存器T2CONCP/RL2C/T2TR2EXEN2TCLK0RCLK0EXF2TF2字节地址C8HD7D6D5D4D3D2D1D0位7(TF2):T2溢出标志位T2溢出时由硬件置位。允许T2中断时,使CPU转向T2的中
本文标题:第10讲-C8051F单片机的定时器计数器分析
链接地址:https://www.777doc.com/doc-4270879 .html