1、*aH|J 日寸才 MC9S12MC9S12系列单片机增强型定时器模块是在标准定时 器模块的基础上添加了新的功能。定时器的核心是一个1616位的可编程计数器,计数的 频率可以通过分频来调整。用途彳艮多普通定时器的工作,例如脉冲计数、定时等可以用来测量输入的脉冲宽度产生我们需要的脉冲波形。*a H|J 日寸才 ECT模块的组成:1个预分频器1个16位自由运行数器 8个 16位IC/OC通;2个16位(4个8位 脉冲累加器 1个16位模数递减 数器 E C T 模块的组成:1 个预分频器1 个1 6 位自由运行数增强型定时器E C T 模块课件输入捕捉功能是用来监测外部的事件和输入信号。当外部事件
2、发生或信号发生变化时,在指定的 输入捕捉引脚上发生一个指定的沿跳变(可以;指定该跳变是上升沿还是下降沿)。定时器捕 捉到特定的沿跳变后,把计数寄存器当前的值4 I计数器时钟 /锁存到通道寄存器。如果输入捕捉控制寄存器甲夜许输入捕捉16位计数器16在捕捉硕存嘉I,利用中中断,系睚基沿选择N断处理程序航晶序叔*g或信号发输入捕捉功能是用来监测外部的事件和输入信号。当外部事件发生在特定的时刻在管脚上输出特定电平,用来控 制外电路工作。原理是:输出比较寄存器的值和计数器的值每 隔4个总线周期比较一次,当两个值相等的时候,会在该通道的引脚上输出预先规定的电平。如果输出比较中断允许,还会产生一个硬件的定时
3、中断。计数器时钟E,输出比较最简单和最常16位计数器间隔的脉冲。n一16位椅出比较寄存器比较器在特定的时刻在管脚上输出特定电平,用来控 制外电路工作。原输入捕捉/输出比较通道有8 8个输入捕捉输出比较通道。共有8 8个外部引 脚,分别为IOCOI0C7,IOCOI0C7,与PORTTPORTT复用。通过选择TIOSTIOS寄存器的lOSxlOSx位可以选择是输出 比较还是输入捕捉。对于输入捕捉:带缓冲的输入捕捉通道不带缓冲的输入捕捉通道输入捕捉/输出比较通道不带缓冲的输入捕捉通道 8个输入捕捉,其中4个(PT4PT7)带有*一个捕捉寄存器用来记录管脚上电平变化|时自由计数器的锁存值。j捕捉寄存
4、器TCx (当输入覆盖控制寄存器(ICOVW)的 INOVWx位清0时,每发生一次输入捕捉,(新的计数器的值就会覆盖原来的输入捕捉1 寄存器的内容;、亿云Me四4 n-PP/k-I k -kn 去 t=2 口.口.XU*不带缓冲的输入捕捉通道、亿云Me 四4 n-P P/k -I带缓冲的输入捕捉通道PT0PT3PT0PT3是带缓冲的输入捕捉通道。捕捉寄存器TCxTCx保持寄存器TCxHTCxH。,可以在不产生中断的情况下,连续记录两次自由 计数器的值。入口设置了延迟计数器/用来提高抗干扰能力 带缓冲的输入捕捉通道锁存方式:每个有效的引脚事件只将自由定时器的值放入捕 捉寄存器TCx,而TCx到保
5、持寄存器TCxH的传 送必须依赖强制锁存命令才能实现/当模数计数器减为“0”/向模数计数器写入“$0000”,写强制锁存位ICLAT(输入控制系统控制寄存器ICSYS)输入捕捉寄存器的值将锁存到相应通道的保持寄 存器中,并将输入捕捉寄存器的值清零。锁存方式:队列方式TCxTCx与TCxHTCxH形成了 一个类似先进先出的 队列,每个捕捉结果从TCxTCx进入,然后随 着下一个捕捉结果的到来移入TCxH oTCxH o程序可以从TCxHTCxH取得结果,也可以直接 从TCxTCx取得捕捉结果。队列方式 4 4个8 8位的通道PAC0-PAC3PAC0-PAC3组成可以通过级联形成两个1616位通
6、道PACAPACA、PACBPACB通过检测相应管脚上的有效边缘来记录脉冲的个数。各通道的8 8位累加器与4 4个缓冲ICIC通道相关联的,它们共享边沿检测与延迟电路。4 个8 位的通道P A C 0-P A C 3 组成两种工作模式椅锁存方式::通过锁存命令,将脉冲累加计数器的值锁 存到相应通道的保持寄存器中5队列方式:当读取某通道保持寄存器的值时,相应脉 冲累加器的值将被写入保持寄存器。两种工作模式 1616位递减模数计数器(MDC)(MDC)可以用作 时钟基准,产生周期性的中断请求。也可用于将ICIC寄存器和脉冲累加器的 值锁存到各自的保持寄存器中。1 6 位递减模数计数器(MD C)可
7、以用作 时钟基准,产生周模数递减计数器(MCCNTMCCNT)模数递减标志寄存器(MCFLGMCFLG)模数递减控制寄存器(MCCTLMCCTL)I模数计数器由初值递减,递减到0 0时,会产生相应I的中断。I递减频率由总线时钟经分频得到。j初值可以由用户写入 模数递减计数器(MC C N T)在模数模式允许后(MODMCFMODMCF),向模数递 减计数器的写操作会更新预置数的值,模数计 数器递减到0 0时,就会装载最新的预置数,装载的操作也可以由置MCCTLMCCTL寄存器的FLMC FLMC 位为1 1来强制执行。总定时时间=预置数X X总线周期X X中断次数 在模数模式允许后(MO D
8、MC F),向模数递 减计数器的写操等待中断等待中断在中断程序中,需 要清除相应的中断 标志位(MCFLG),并将中断次数减1,当中断次数减为。时,一次延时就完成了。在中断程序中,需 要清除相应的中断 标志位(MC F L G),P。引脚逻野延诅il数 器心比较器MOH保打寄存群复位SP1*引应逻辄延迟计散 器EDGA行?!顽砌PACTTCI H保抻寄存驿PA1H保持寄存器R2O引脚遂折延退讣故 器,腥比较器,复位引脚逻辑延迟讣故 器PA2H保持寄存器|复位_理箜_TC3li&tot较韶蓝PAQ5TC5H榛h井在盟PA3H别沽存器P。引脚逻野延诅i l 数 器 心比较器MO H 保打寄存A、:
9、举三个例子讲述本节内容心流水灯显示椅使用输入捕捉功能,对外来脉冲进行计数心使用输出比较功能,输出一个具有一定宽 度的高电平脉冲 A、:举三个例子讲述本节内容BIT 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0T15tl4tl3T12tiltlOt9t8t7t6t5t4t3t2tltO0000000000000000WRESETTCNTTCNT为自由计数器的计数值,本例通过读取它的j j值实现延时。1这是一个1616位的加法计数器,最大值为65535o65535o任意时刻可读,正常模式下写操作无效。B I T 1 5 1 4 1 3 1 2 1 1 BIT7 6 5
10、 4 3 2 1 BITOTENTSWAITSFRZTFFCAU020RESET:00000000必须设置TSCR1才可以使主定时器工作,需要在ECT模块初始化 时就设置好。TEN=1:主定时器使能。0=主定时器禁止,进入低功耗状2TSWAI=0:等待模式时主定时器继续工作,方便调试。0=停止工作。TSFRZ=O:冻结模式时主定时器继续工作。0=停止工作。TFFCA=O:自动清除标志位。1=手动清除。本例设置TSCRl=0 x80。B I T 7 6 5 TOI020TOREPR2PR1PRO00000000禁止定时器溢出中断。1=1=允许。BIT7 6 5 4 3 2 1 BITORWRES
11、ET:TOITOI:TCRETCRE:定时计数器复位允许。0=0=禁止复位,计数器自由计数。1=1=允许复位。J进行完一次输出比较时,可以使定时计数器复位I IPR2PR2、PR1PR1、PROPRO:预分频因子选择主定时器的计数器频率=总线时钟频率于2 2顼分熊子T O I 0 2 0 T O R E P R 2 P R 1 P R O 0 0 0 0 0 0 0 0 禁止定void TimerOverflow(void)unsigned char i=l,j=0 x80;while(i!=0)&(j!=0)PORTA=(i|j);i=l;while(TCNT!=0 x0000);/延时 w
12、hile(TCNT=0 x0000);void main(void)E n a b I e n t e rru pTSCRl=0 x80;77南盘使能TSCR2=0 x07;/74频系冬也 DDRA=0 xff;PORTA=Oxff;for(;)TimerOverflow();v o i d T i m e r O v e r f l o w(v o i d)增强型定时器E C T 模块课件 while(TCNT!=OxOOOO);|:while(TCNT=OxOOOO);|:这两句的含义是:TCNT开始计数后值不为0等待直到TCNT溢出返回0,然后再等到|TCNT不为0。为什么要弄两个whi
13、le?/w h i l e(T C N T!=O x O O O O);利用输入捕捉。通道对外来的方波信号进行捕I 捉,采用中断的形式。中断发生后,读取捕)捉后的计数值,并通过PORTB口使LED灯点 亮以指示中断成功。1通道。设置为输入捕捉,采用双沿触发(上下j 沿均触发),ICO开中断,可以进入中断服务 程序。方波信号由PORTA_BIT6产生,PORTA_B IT6和IOCO硬件连接。利用输入捕捉。通道对外来的方波信号进行捕I 捉,采用中断的BIT RW7554321。SH37SH26SH1.5SH04mioDPACbfXBUFEXLAIQRESET00000000SHxy=O:正常操作
14、。l=x通道和y通道将产生一样的输 入动作,x通道的设置同样适用于y。TFMOD=0:当出现有效的输入捕获事件,TFLG1中的 对应中断标志位CxF就置1。1=队列模式时才使用。PACMX=O:8位脉冲累加器溢出后自动回0。1=不自动 回0,停留在OxFFo脉冲累加器对IC通道捕获的有效边沿 数量进行计数。B I T R 7 5 5 4 3 2 1。S H 3 7 S H 2 6 S H 1.5 S H 0 4BnRW7554321。SH37SH26SH1.5SH04mioDPACbfXBUFEXLAIQRESET00000000 BUFEN=1 BUFEN=1:使用输入捕获缓冲区。0 0=不
15、使用。(输入捕捉和脉冲累加器的保持寄存器)LATQ=O LATQ=O:输入捕获队列模式使能。产生一次成 功的输入捕获时,ICIC通道寄存器中保留的计数值会 被送到保持器中,然后ICIC寄存器会接收新的计数值。1 1=锁存模式使能。IC SYS=0 x02;/IC 缓冲使能B n 7 5 5 4 3 2 1。S H 3 7 S H 2 6 S H 1.5 S H 0 4 m i oBIT76543210RWC7FC6FC5FC4FC3FC2FC1FCOFRESET00000000TFLG1TFLG1指示了中断发生在哪个通道,需要对相应位 清零时,可以对它进行置1 1操作。C7F-C0FC7F-C
16、0F:IC/OC IC/OC的 中断标志。当TSCRTSCR寄存器中的TFFCATFFCA位被置位时,对于输入捕 捉和输出比较通道的读写操作,将清除对应通道的 CxF CxF 位。B I T 7 6 5 4 3 2 1 0 R C 7 F C 6 F C 5 F C 4 F C 3 F C 2 FTCO-TC 7TCO-TC 7寄存器:用来锁存自由计数器的值,当得到有效的边沿触 发时,我们可以通过读这些寄存器来获得输入捕 捉计数值;A通过写这些寄存器来设置输出比较的计数值。任意时刻可读。A在输出比较模式任何时刻可写。A在输入捕捉模式对寄存器的写操作没有意义。当寄存器复位后,寄存器值等于$000
17、0$0000o o T C O-T C 7 寄存器:BIT7S543210RWIOS7IOS6IOS5IOS4IOS3IOS2IOS1IOSORESETQ0000Q00IOSX:1=1=通道x x为输出比较;0=0=通道x x为输入捕获。B I T 7 S 5 4 3 2 1 0 R I O S 7 I O S 6 I O S 5 I O S 4 I OTCTL3 7 6 5 4 3 2 10RWEDG7BEDG7AFDG6BEDG6AEDG5BEDG5AEDG4BEDG4ARESET00000000rCTL476543710RWEDG3BEDG3AEDG2BEDG2AEDG1BEDG1AED
18、G:BEDGOARESET 00000000EDGnA/B:输入捕捉边沿控制。本例设置0 x03(EDG0A=l,EDG0B=l)o即ICO通道采用上 升,下降沿都触发。EDMEDGuAftt0001仅在上升倾10仅茁Fl轴11上升下降醐碱n代表通道序号。T C T L 3 7 6 5 4 CxiCxi:1=1=第乂个通道中断允许;0 0=第乂个通道中断禁止。C x i:ICO的初始化:void icjnit(void)TSCR1=0 x90;11主定时器使能,对TCNT访问即可清除标志TSCR2=0 x07;/分频因子=128ICSYS=0 x02;/IC缓冲使能(保持寄存器)TIOS=0;
19、/通道设置为输入捕获TCTL4=Oxff;采用上升、下降沿触发TIE=0b00000001;通道0开中断I C O 的初始化:初始化好后,需要在main函数中调用初始化函数ic_init()。以下是在main函数中,如何使用PO RTA_BIT6来产生一个方波信号。DDRA=Oxff;PORTA=OxOO;DDRB=Oxff;PORTB=OxOO;for(;)设置PORTA的方向寄存器,为输出/PORTA的输出初始化为低电平/PORTB设置为LED灯的控制信号/LED全灭 for(i=0;i6000;i+)PORTA_BIT6=1;循环中设置信号为高电平fo(i=0;iv6000;i+)POR
20、TA_BIT6=0;循环中设置信号为低电平,产生方波初始化好后,需要在m a i n 函数中调用初始化函数i c _ i n i t方波信号已经成功得产生了,下面是中断服务程序:#pragma CODE_SEG NON_BANKED必须有这句void interrupt 8 icOJnt(void)TFLG1_COF=1;中断标志清除jc4=TC0B通过读TC0寄君器来响应中断,ic4、ic40为用户定义的变量 dic4=ic4-ic40;ic40=ic4;PQDTD=nYCC-用LEW 来指宗已经进入了中断/*以下放置其他代码*/方波信号已经成功得产生了,下面是中断服务程序:BTT 7654
21、3210R000FOC7FOC6FOC5FOC4FOC3FOC2FOCIFOCORESET 00000000FOCxxFOCxx通道强制输出比较 )在相应的寄存器位写入强制输出比较命令,会立即使 相应的通道处于输出比较状态。)B T T 7 6 5 4 3 2 1 0 R 0 0 0 F O C 7 F O C 6 F O C 5 F OTCTL17654J210R WOLf70L70M60L60M50L50M4OL4RESET。000。0。0TCIL2?654321QR WONf30L3CM20L20M10L1OMOOLORESET00。00000OMn:输出模式OLn:输出等级这8对控制位
22、是用来指定输出比较的输出动作的,当OMn和OLn二者 任意一个为1时,OCn对应的端口会有相应的输出。如果需要用OMn和OLn来控制相应定时器端口的输出,贝UOC7M中的 对应位必须清零。OMuOLn螃出动作00没有给出动作0105触发输出电平10OCn输出电平为低电平11OCn输出电平为高电平T C T L 1 7 6 5 4 J 2 1 0 R WO L f 7 0 L 7 0 M6 0 L 6 0 void oc_init():TSCR2=0 x07;时器溢出中断禁止 TIOS=0 x01;出比较 TIE=0 x01;TCTL2 OMO=1;平&TCTI y v o i d o c _
23、i n i t()128分频,定通道。输中断使能输出低电1 2 8 分频,定通道。输 void main(void):Enablelnterrupts;DDRB=0 x00;PORTB=Oxff;DDRM=0 xff;PTM=0 xff;oc_init();v o i d m a i n(v o i d):E n a b l e l n t增强型定时器E C T 模块课件#pragma CODE_SEG NON_BANKED void interrupt 8 ocOJnt(void)TCTL2 OMO=1;:TCTL2 OLO=!TCTL2 OLO;:PTM PTM1=PORTB BIT1;TC0=TCNT+4000;:#p r a g m a C O D E _ S E G N O N _ B A N K E D 增强型定时器E C T 模块课件