9s12系列增强型捕捉定时器模块

上传人:少*** 文档编号:243749979 上传时间:2024-09-30 格式:PPT 页数:39 大小:391KB
返回 下载 相关 举报
9s12系列增强型捕捉定时器模块_第1页
第1页 / 共39页
9s12系列增强型捕捉定时器模块_第2页
第2页 / 共39页
9s12系列增强型捕捉定时器模块_第3页
第3页 / 共39页
点击查看更多>>
资源描述
,*,第七章,IO,接口及增强型捕捉定时器模块,MC9S12,系列单片机增强型定时器模块是在标准定时器模块的基础上添加了新的功能。,定时器的核心是一个,16,位的可编程计数器,,计数的频率可以通过分频来调整。,用途很多,普通定时器的工作,例如脉冲计数、定时等,可以用来测量输入的脉冲宽度,产生我们需要的脉冲波形。,增强型定时器,ECT,模块,ECT,模块的组成:,1,个预分频器,1,个,16,位自由运行计数器,8,个,16,位,IC/OC,通道,2,个,16,位(,4,个,8,位)脉冲累加器,1,个,16,位模数递减计数器,输入捕捉功能是用来监测外部的事件和输入信号。,当外部事件发生或信号发生变化时,在指定的输入捕捉引脚上发生一个指定的沿跳变(可以指定该跳变是上升沿还是下降沿)。定时器捕捉到特定的沿跳变后,,把计数寄存器当前的值锁存到通道寄存器。,如果输入捕捉控制寄存器中设定允许输入捕捉中断,系统会产生一次输入捕捉中断,,利用中断处理程序可以得到事件发生的时刻或信号发生变化的时刻。,触发沿选择,触发事件,16,位捕捉锁存器,16,位计数器,计数器时钟,输入捕捉,在特定的时刻在管脚上输出特定电平,用来控制外电路工作。,原理是:,输出比较寄存器,的值和计数器的值每隔,4,个总线周期比较一次,当两个值相等的时候,会在该通道的引脚上,输出预先规定的电平,。,如果输出比较中断允许,还会产生一个硬件的定时中断。,输出比较最简单和最常用的功能就是产生一定间隔的脉冲,。,16,位输出比较寄存器,比较器,16,位计数器,计数器时钟,输出比较,输入捕捉,/,输出比较通道,有,8,个输入捕捉输出比较通道。共有,8,个外部引脚,分别为,IOC0IOC7,,与,PORTT,复用。,通过选择,TIOS,寄存器,的,IOSx,位可以选择是输出比较还是输入捕捉。,对于输入捕捉:,带缓冲,的输入捕捉通道,不带缓冲,的输入捕捉通道,不带缓冲的输入捕捉通道,8,个输入捕捉,其中,4,个(,PT4PT7,)带有一个,捕捉寄存器,用来记录管脚上电平变化时自由计数器的锁存值。,捕捉寄存器,TCx,当输入覆盖控制寄存器(,ICOVW,),的,NOVWx,位清,0,时,每发生一次输入捕捉,新的计数器的值就会覆盖原来的输入捕捉寄存器的内容;,当该位置,1,时,除非输入捕捉寄存器为空,否则新的值不能写入(使输入捕捉寄存器为空的方法是读取该寄存器)。这样就避免了新的计数值覆盖旧的计数值。,ICOVW,复位时为,0x00,。,带缓冲的输入捕捉通道,PT0PT3,是带缓冲的输入捕捉通道。,捕捉寄存器,TCx,保持寄存器,TCxH,。,可以在不产生中断的情况下,连续记录两次自由计数器的值。,入口设置了延迟计数器,用来提高抗干扰能力,锁存方式:,每个有效的引脚事件只将自由定时器的值放入捕捉寄存器,TCx,,,而,TCx,到保持寄存器,TCxH,的传送必须依赖强制锁存命令才能实现,当模数计数器减为,“,0,”,向模数计数器写入,“,$0000,”,写强制锁存位,ICLAT,(输入控制系统控制寄存器,ICSYS,),输入捕捉寄存器的值将锁存到相应通道的保持寄存器中,并将输入捕捉寄存器的值清零。,两种工作模式,:(,TCx,到保持寄存器,TCxH,),队列方式,TCx,与,TCxH,形成了一个类似先进先出的队列,每个捕捉结果从,TCx,进入,然 后随着下一个捕捉结果的到来移入,TCxH,。,程序可以从,TCxH,取得结果,也可以直接从,TCx,取得捕捉结果。,4,个,8,位的通道,PAC0-PAC3,组成,可以通过级联形成两个,16,位通道,PACA,、,PACB,通过检测相应管脚上的有效边缘来记录脉冲的个数。,各通道的,8,位累加器与,4,个缓冲,IC,通道相关联的,它们共享边沿检测与延迟电路。,脉冲累加器,两种工作模式,锁存方式:,通过锁存命令,将,脉冲累加计数器,的值锁存到相应通道的,保持寄存器,中,队列方式,当读取某通道保持寄存器的值时,相应脉冲累加器的值将被写入保持寄存器。,16,位递减模数计数器,(MDC),可以用作时钟基准,产生周期性的中断请求。,也可用于将,IC,寄存器和脉冲累加器的值锁存到各自的保持寄存器中。,模数递减计数器,模数递减计数器(,MCCNT,),模数递减标志寄存器(,MCFLG,),模数递减控制寄存器(,MCCTL,),模数计数器由初值递减,递减到,0,时,会产生相应的中断。,递减频率由总线时钟经分频得到。,初值可以由用户写入,在模数模式允许后(,MODMC=1,),向模数递减计数器的写操作会更新预置数的值,模数计数器递减到,0,时,就会装载最新的预置数,,装载的操作也可以由置,MCCTL,寄存器的,FLMC,位为,1,来强制执行。,总定时时间,=,预置数,总线周期,中断次数,在中断程序中,需要清除相应的中断标志位(,MCFLG),,并将中断次数减,1,,当中断次数减为,0,时,一次延时就完成了。,三个例子,举三个例子讲述本节内容,流水灯显示,使用输入捕捉功能,对外来脉冲进行计数,使用输出比较功能,输出一个具有一定宽度的高电平脉冲,ECT,计数寄存器(,TCNT,),TCNT,为自由计数器的计数值,本例通过读取它的值实现延时。,这是一个,16,位的加法计数器,最大值为,65535,。,任意时刻可读,正常模式下写操作无效。,ECT,控制寄存器,1,(,TSCR1,),必须设置,TSCR1,才可以使主定时器工作,需要在,ECT,模块初始化时就设置好。,TEN=1,:主定时器使能。,0=,主定时器禁止,进入低功耗状态。,TSWAI=0,:等待模式时主定时器继续工作,方便调试。,0=,停止工作。,TSFRZ=0,:冻结模式时主定时器继续工作。,0=,停止工作。,TFFCA=0,:自动清除标志位。,1=,手动清除。,本例设置,TSCR1=0x80,。,ECT,控制寄存器二(,TSCR2,),TOI,:禁止,定时器溢出,中断。,1=,允许。,TCRE,:,定时计数器复位允许,。,0=,禁止复位,计数器自由计数。,1=,允许复位。,进行完一次输出比较时,可以使定时计数器复位,PR2,、,PR1,、,PR0,:预分频因子选择,void,TimerOverflow(void,),unsigned char i=1,j=0x80;,while(i,!=0)&(j!=0),PORTA=(,i|j,);,i=1;,while(TCNT,!=0x0000); /,延时,while(TCNT,=0x0000);,void,main(void,),EnableInterrupts,;,TSCR1=0x80;,/,定时器使能,TSCR2=0x07;,/,分频系数为,128,DDRA=0xff;,PORTA=0xff;,for(;),TimerOverflow,();,流水灯的显示,PORTA,输出,调用函数,设置控制寄存器,1,设置控制寄存器,2,延时控制,while(TCNT,!=0x0000);,while(TCNT,=0x0000);,这两句的含义是:,TCNT,开始计数后值不为,0,,等待直到,TCNT,溢出返回,0,,然后再等到,TCNT,不为,0,。,为什么要弄两个,while,?,例二:输入捕捉,利用输入捕捉,0,通道对外来的方波信号进行捕捉,采用中断的形式。中断发生后,读取捕捉后的计数值,并通过,PORTB,口使,LED,灯点亮以指示中断成功。,通道,0,设置为输入捕捉,采用双沿触发(上下沿均触发),,IC0,开中断,可以进入中断服务程序。方波信号由,PORTA_BIT6,产生,,PORTA_BIT6,和,IOC0,硬件连接。,输入控制系统寄存器,-ICSYS,SHxy=0,:正常操作。,1=,x,通道和,y,通道将产生一样的输入动作,,x,通道的设置同样适用于,y,。,TFMOD=0,:当出现有效的输入捕获事件,,TFLG1,中的对应中断标志位,CxF,就置,1,。,1=,队列模式时才使用。,PACMX=0,:,8,位脉冲累加器溢出后自动回,0,。,1=,不自动回,0,,停留在,0xFF,。脉冲累加器对,IC,通道捕获的有效边沿数量进行计数。,输入控制系统寄存器,-ICSYS,BUFEN=1,:使用输入捕获缓冲区,。,0=,不使用。,(,输入捕捉和脉冲累加器的保持寄存器,),LATQ=0,:输入捕获队列模式使能。,产生一次成功的输入捕获时,,IC,通道寄存器中保留的计数值会被送到保持器中,然后,IC,寄存器会接收新的计数值。,1=,锁存模式使能。,ICSYS,=0x02;,/IC,缓冲使能,TFLG1,:主定时器中断寄存器,1,BIT,7,6,5,4,3,2,1,0,R,C7F,C6F,C5F,C4F,C3F,C2F,C1F,C0F,W,RESET,0,0,0,0,0,0,0,0,TFLG1,指示了中断发生在哪个通道,需要对相应位清零时,,可以对它进行置,1,操作,。,C7F-C0F,:,IC/OC,的中断标志。,当,TSCR,寄存器中的,TFFCA,位被置位时,对于输入捕捉和输出比较通道的读写操作,将清除对应通道的,CxF,位。,定时器输入捕捉和输出比较寄存器,TC0-TC7,寄存器:,用来锁存自由计数器的值,当得到有效的边沿触发时,我们可以通过读这些寄存器来获得输入捕捉计数值;,通过写这些寄存器来设置输出比较的计数值。,任意时刻可读。,在输出比较模式任何时刻可写。,在输入捕捉模式对寄存器的写操作没有意义。,当寄存器复位后,寄存器值等于,$0000,。,IC/OC,通道选择寄存器,-TIOS,IOSx,:,1=,通道,x,为输出比较;,0=,通道,x,为输入捕获。,控制寄存器,3/4,TCTL3/4,EDGnA,/B,:输入捕捉边沿控制。,本例设置,0x03,(EDG0A=1,,,EDG0B=1),。即,IC0,通道采用上升,下降沿都触发。,n,代表通道序号。,定时器中断使能寄存器,-TIE,CxI,:,1=,第,x,个通道中断允许;,0=,第,x,个通道中断禁止。,例二:输入捕捉,IC0,的初始化:,void,ic_init(void,),TSCR1= 0x90;,/,主定时器使能,对,TCNT,访问即可清除标志,TSCR2=0x07;,/,分频因子,=128,ICSYS=0x02,;,/IC,缓冲使能,(,保持寄存器,),TIOS=0,;,/,通道设置为输入捕获,TCTL4= 0xff;,/,采用上升、下降沿触发,TIE=0b00000001,; /,通道,0,开中断,例二:输入捕捉,初始化好后,需要在,main,函数中调用初始化函数,ic_init,(),。,以下是在,main,函数中,如何使用,PORTA_BIT6,来产生一个方波信号。,DDRA=0xff;,/,设置,PORTA,的方向寄存器,为输出,PORTA=0x00;,/PORTA,的输出初始化为低电平,DDRB=0xff;,/PORTB,设置为,LED,灯的控制信号,PORTB=0x00;,/LED,全灭,for(;),for(i,=0;i6000;i+),PORTA_BIT6=1;,/,循环中设置信号为高电平,for(i,=0;i6000;i+),PORTA_BIT6=0;,/,循环中设置信号为低电平,产生方波,例二:输入捕捉,方波信号已经成功得产生了,下面是中断服务程序:,#,pragma,CODE_SEG NON_BANKED/,必须有这句,void interrupt 8 ic0_int(void),TFLG1_C0F,=1,;/,中断标志清除,ic4=,TC0,;,/,通过读,TC0,寄存器来响应中断,,ic4,、,ic40,为用户定义的变量,dic4=ic4-ic40;,ic40=ic4;,PORTB=0x55;,/,用,LED,灯来指示已经进入了中断,/*,以下放置其他代码*,/,强制输出比较寄存器,-CFORC,FOCx,x,通道强制输出比较,在相应的寄存器位写入强制输出比较命令,会立即使相应的通道处于输出比较状态。,定时器控制寄存器,1/2,TCTL1/2,OMn,:输出模式,OLn,:输出等级,这,8,对控制位是用来指定输出比较的输出动作的,,当,OMn,和,OLn,二者任意一个为,1,时,,OCn,对应的端口会有相应的输出,。,如果需要用,OMn,和,OLn,来控制相应定时器端口的输出,则,OC7M,中的对应位必须清零。,void,oc_init,(),TSCR2=0x07; 128,分频,定时器溢出中断禁止,TIOS=0x01;,通道,0,输出比较,TIE=0x01;,中断使能,TCTL2_OM0=1;,输出低电平,TCTL2_OL0=0;,TSCR1=0x90;,void,main(void,),EnableInterrupts,;,DDRB=0x00;,PORTB=0xff;,DDRM=0xff;,PTM=0xff;,oc_init,();,for(;) ,#,pragma,CODE_SEG NON_BANKED,void interrupt 8 oc0_int(void),TCTL2_OM0=1;,TCTL2_OL0=!TCTL2_OL0;,PTM_PTM1=PORTB_BIT1;,TC0=TCNT+4000;,谢谢!,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!