MC9S12XS128之时间模块TIM输入捕捉

合集下载

飞思卡尔MC9S12XS128单片机各模块使用方法及寄存器配置

飞思卡尔MC9S12XS128单片机各模块使用方法及寄存器配置

飞思卡尔MC9S12XS128单片机各模块使用方法及寄存器配置手把手教你写S12XS128程序--PWM模块介绍该教程以MC9S12XS128单片机为核心进行讲解,全面阐释该16位单片机资源。

本文为第一讲,开始介绍该MCU的PWM模块。

PWM 调制波有8个输出通道,每一个输出通道都可以独立的进行输出。

每一个输出通道都有一个精确的计数器(计算脉冲的个数),一个周期控制寄存器和两个可供选择的时钟源。

每一个P WM 输出通道都能调制出占空比从0—100% 变化的波形。

PWM 的主要特点有:1、它有8个独立的输出通道,并且通过编程可控制其输出波形的周期。

2、每一个输出通道都有一个精确的计数器。

3、每一个通道的P WM 输出使能都可以由编程来控制。

4、PWM 输出波形的翻转控制可以通过编程来实现。

5、周期和脉宽可以被双缓冲。

当通道关闭或PWM 计数器为0时,改变周期和脉宽才起作用。

6、8 字节或16 字节的通道协议。

7、有4个时钟源可供选择(A、SA、B、SB),他们提供了一个宽范围的时钟频率。

8、通过编程可以实现希望的时钟周期。

9、具有遇到紧急情况关闭程序的功能。

10、每一个通道都可以通过编程实现左对齐输出还是居中对齐输出。

1、PWM启动寄存器PWMEPWME 寄存器每一位如图1所示:复位默认值:0000 0000B图1 PWME 寄存器每一个PWM 的输出通道都有一个使能位P WMEx 。

它相当于一个开关,用来启动和关闭相应通道的PWM 波形输出。

当任意的P WMEx 位置1,则相关的P WM 输出通道就立刻可用。

用法:PWME7=1 --- 通道7 可对外输出波形PWME7=0 --- 通道7 不能对外输出波形注意:在通道使能后所输出的第一个波形可能是不规则的。

当输出通道工作在串联模式时(PWMCTL 寄存器中的CONxx置1),那么)使能相应的16位PWM 输出通道是由PWMEx 的高位控制的,例如:设置PWMCTL_CON01 = 1,通道0、1级联,形成一个16位PWM 通道,由通道 1 的使能位控制PWM 的输出。

TIM——输入捕捉

TIM——输入捕捉
TEN 是定时器允许位。TEN=1 时,允许定时器工作,TEN=0 时,禁止定时器工作。 其余不常用,设为 0 即可。
TSCR2:
TOI 是定时器溢出中断允许位。这个在输入捕捉中没用到,设为 0 即可。 TCRE 是定时器计数寄存器复位允许位。用在输出比较中,允许输出比较寄存器 7 的事件来复位定时器计数寄存器。这里设为 0 即可。 PR2~PR0 是定时器分频因子选择位。不同的组合可以设定不同的定时器时钟:
其中 EDGxB 和 EDGxA 一起来设相应通道输入捕捉极性,对应的功能如下:
(0 0)为禁止输入捕捉。 (0 1)为上升沿捕捉 (1 0)为下降沿捕捉 (1 1)为上升沿或下降沿捕捉 TIE 是输入捕捉或输出比较中断允许位。
这里的每一位是和 TIOS 上的位一一对应的。相应置 1 时,则捕捉到事件时,则 系统会产生中断。相应位设为 0 时,则不能。 TFLG1 是输入捕捉或输出比较中断标位寄存器。
TFLG1_C0F=1; //标志位清零 asm sei; //关总中断 // PORTB=~PORTB; PORTB&=~(1<<7); delay_us(1); PORTB|=(1<<7); asm cli; //开总中断 }
这些不常,可以不管 接下来按照上面的寄存器设置好相应的功能,程序就出来了:
void ECT0_INIT() //输入捕捉通道 0 初始化函数
{
TSCR2=0X06; //关闭溢出中断且 f(BUS)64 分频
TIOS_IOS0=0; //定通道 0 为输入捕捉,1 为输出比较
TCTL4=0X01;
当发生输入捕捉或输出比较事件时,相应位置 1。向该位写 1,可以清空该标志 位。 通道寄存器 TC0~TC7 用于锁存发生捕捉事件时自由运行的计数器的计数值。通过 பைடு நூலகம்询 TC0~TC7 相应的位,可以确定捕捉事件发生的时刻。 与输入捕捉相关的寄存器还有: ICOVW:输入控制修改寄存器 ICSYS:输入控制系统控制寄存器 DLYCT:延迟计数控制寄存器(可以自动处理窄脉冲干扰)

MC9S12XS128中文资料

MC9S12XS128中文资料
PWM标度B寄存器。用于控制Clock SB的值,Clock SB = Clock A / (2 * PWMSCLB),当PWMSCLB=0x00时,相当于PWMSCLB=256。
PWMCNTx:
PWM通道计数寄存器。
每个通道都有一个独立的8位计数器,其计数速率由所选择的时钟源决定。计数器的值可以随时读取而不影响计数器运行,也不影响PWM波形输出。在左对齐模式时,计数器从0计数至周期寄存器的值减1;在中心对齐模式,计数器从0计数至周期寄存器的值,然后再倒计数至0。
CFORC:
定时器比较强制寄存器。复位值为0x00。
FOCx=1将强制该位对应通道产生输出比较成功动作,但CxF中断标志位不置位。任何通道的强制比较成功动作若与普通比较成功动作同时发生,则强制比较成功动作优先发生,且CxF标志位不会置位。
被置位后瞬间将自动清除该位,所以任何时候对该寄存器的读动作都将返回0x00。
OC7M:
输出比较通道7屏蔽寄存器。复位值为0x00。
Setting the OC7Mx (x ranges from 0 to 6) will set the corresponding port to be an output port when the corresponding TIOSx (x ranges from 0 to 6) bit is set to be an output compare and the corresponding OCPDx (x ranges from 0 to 6) bit is set to zero to enable the timer port.A successful channel 7 output compare overrides any channel 6:0 compares. For each OC7M bit that is set, the output compare action reflects the corresponding OC7D bit.

MC9S12XS128中文资料

MC9S12XS128中文资料

飞思卡尔智能汽车竞赛XS128主要模块实验指导书第一章端口整合模块端口A,B和K为通用I/O接口端口E 整合了IRQ,XIRQ中断输入端口T 整合了1个定时模块端口S 整合了2个SCI模块和1个SPI模块端口M 整合了1个MSCAN端口P 整合了PWM 模块,同时可用作外部中断源输入端口H 和J 为通用I/O接口,同时可用作外部中断源输入端口AD 整合了1个16位通道ATD模块大部分I/O引脚可由相应的寄存器位来配置选择数据方向、驱动能力,使能上拉或下拉式装置。

当用作通用IO口时,所有的端口都有数据寄存器和数据方向寄存器。

对于端口T, S, M, P, H, 和J 有基于每个针脚的上拉和下拉控制寄存器。

对于端口AD 有基于每个针脚的上拉寄存器。

对于端口A、B、E 和K,有一个基于端口的上拉控制寄存器。

对于端口T, S, M, P, H, J, 和AD,有基于每个针脚的降额输出驱动控制寄存器。

对于端口A, B, E, 和K,有一个基于端口的降额输出驱动控制寄存器。

对于端口S、M,有漏极开路(线或)控制寄存器。

对于端口P、H 和J,有基于每个针脚的中断标志寄存器。

纯通用IO端口共计有41个,分别是:PA[7:0]PB[7:0]PE[6:5]PE[3:2]PK[7,5:0]PM[7:6]PH[7:0] (带中断输入)PJ[7:6] (带中断输入)PJ[1:0] (带中断输入)第二章脉冲宽度调制模块XS128具有8位8通道的PWM,相邻的两个通道可以级联组成16位的通道。

PWME:PWM通道使能寄存器。

PWMEx=1将立即使能该通道PWM波形输出。

若两个通道级联组成一个16位通道,则低位通道(通道数大的)的使能寄存器成为该级联通道的使能寄存器,高位通道(通道数小的)的使能寄存器和高位的波形输出是无效的。

PWMPOL:PWM极性寄存器。

PPOLx=1,则该通道的周期初始输出为高电平,达到占空比后变为低电平;相反,若PPOLx=0,则初始输出为低电平,达到占空比后变为高电平。

MC9S12XS128单片机

MC9S12XS128单片机
1.MC9S12XS128单片机介绍
2.CodeWarrior IDE 12 应用
MC9S12XS128单片机
• MC9S12XS128(以下简称XS128)是Freescale公 司推出的S12XS系列单片机中的一款增强型16位 单片机,S12XS系列单片机是在S12XE系列基础 上去掉XGate协处理器的单片机,该系列单片机 采用 CPU12X V2内核,可运行在40MHz总线频 率上。不仅在汽车电子、工业控制、中高档机电 产品等应用领域具有广泛的用途,而且在FLASH 存储控制及加密方面呢也有很强的功能。
PWM模块 特点:
1. 它有 8 个独立的输出通道,并且通过编程可控 制其输出波形的周期。 2. 每一个输出通道都有一个精确的计数器。 3. 每一个通道的 PWM 输出使能都可以由编程来控 制。 4. PWM 输出波形的翻转控制可以通过编程来实现。 5. 周期和脉宽可以被双缓冲。当通道关闭或 PWM 计数器为 0 时,改变周期和脉宽才起作用。 6. 8 字节或 16 字节的通道协议。 7. 有4 个时钟源可供选择(A、SA、B、SB),他 们提供了一个宽范围的时钟频率。
ECT初始化程序:
以0通道为例:
void ECT_Init(void) { TIE = 0x00; //通道0~7的使能屏蔽 TIOS = 0x00; // 所有的端口设置成输入捕获模式 TSCR1 = 0x90; // 使能时钟模块,定时器标志位 快速清零,读取数据自动清零 TCTL4_EDG0B = 0; TCTL4_EDG0A = 1; //捕捉 上升沿,0通道 TIE_C0I = 1; // 使能0通道中断,中断服务程序中 读取捕获数 }
ECT模块(增强型定时器模块)
• ECT特点相当于高速的I/O口,由一个16为自由计 数器、8个16为的输入捕捉/输出比较通道、一个 16为脉冲累加器及一个16位的模数递减计算器 (MDC)组成。

飞思卡尔MC9S12XS128功能模块驱动

飞思卡尔MC9S12XS128功能模块驱动

用了一年多飞思卡尔MC9S12XS128这款处理器,现在总结下各个功能模块的驱动.//锁相环时钟的初始化总线频率为40MHz(总线时钟为锁相环时钟的一半)//晶振为11.0592MHzvoid PLL_init(void) //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1) { //锁相环时钟= 2*11.0592*(39+1)/(10+1)=80MHz 总线时钟为40MHzREFDV=0x0A;SYNR=0x67; //0110_0111 低6位的值为19,高两位的值为推荐值while(CRGFLG_LOCK != 1);CLKSEL_PLLSEL = 1; //选定锁相环时钟//FCLKDIV=0x0F; //Flash Clock Divide Factor 16M/16=1M}//周期中断定时器的初始化-// //周期中断通道1用于脉冲累加器的定时采样,定时周期为: 10ms= (199+1)*(1999+1)/(40M) (没有使用)//周期中断通道0用于控制激光管的轮流发射,定时周期为: 2000us= (399+1)*(199+1)/(40M)//2011/4/4 15:24 定时时间改为1msvoid PIT_init(void){PITCFLMT_PITE = 0; // 禁止使用PIT模块 PITCFLMT :PIT 控制强制加载微计数器寄存器。

PITCE_PCE0 = 1; // 使能定时器通道0//PITCE_PCE1 = 1; //使能定时器通道1PITMUX = 0; //通道0,和通道1均选择8位微计数器0//修改时间只需要改下面四行PITMTLD0 = 199; //向8位微计数器中加载的值PITLD0 = 199; //向16位计数器中加载的值//PITMTLD1 = 39; //向8位微计数器中加载的值 8位,最大值不要超过255//PITLD1 = 1999; //向16位计数器中加载的值PITINTE |= 0x01; //使能定时器通道0的中断PITCFLMT_PITE = 1;//使能PIT模块}//脉冲累加器的初始化, PT7口外接光电编码器//最新修改: 2011/3/25 16:53void PT7_PulAcc_Init(void){DDRT &= 0x77;//设置PT7,PT3口为输入(硬件上PT7,PT3通过跳线联到了一块)PERT |= 0x80; //使能通道7的上拉电阻PPST &= 0x7f; //电阻设为上拉电阻TCTL4 &= 0x3f; //禁止PT3的输入捕捉功能PACTL = 0x50; //启动脉冲累加计数器,上升沿触发,禁止触发中断和溢出中断,主定时器禁止}//通道1用于控制舵机1 PWM 高电平有效,//通道3用于控制电机1 PWM 低电平有效,这与前两代车高电平有效有区别!!!!!//通道7用于给上排激光管提供PWM信号 PWM高电平有效!!!!!//通道6用于给下排激光管提供PWM信号 PWM高电平有效!!!!!// 2011-03-17 7:56 增加了A端口的使用新增通道6//2011-6-9 23:03 //增加了通道4,5的联合使用,用于控制下排方向舵机 void PWM_init(void){PWME = 0x00;//PWM禁止PWMPRCLK = 0x03; // ClockA=40M/8=5M, Clock B = 40M/1=40M PWMSCLB = 10; // Clock SB= 40/2*10= 2MHz(供电机)PWMSCLA = 5; // SA = Clock A/2*5 = 5M/10 = 500K = SA 用于控制舵机PWMPOL = 0xe2; //1110_0010通道7,通道6与通道1、通道5先输出高电平然后输出低电平,POLx=1先输出高电平后输出低电平; PPOLx=0先输出低电平)PWMCAE = 0x00; // 左对齐输出(CAEx=0为左对齐,反之为中心对齐)//PWMCLK = 0010_1010 (0 1 4 5位控制SA_1;或A_0; 2 3 6 7位控制SB_1 或B_0)//为PWM通道1选择时钟 SA(500KHz),//为PWM通道5选择时钟 SA(500KHz),//为通道3选择时钟 SB(10MHz)//为通道7选择时钟B(40MHz)//为通道6选择时钟B(40MHz)PWMCLK = 0x2A; //0010_1010PWMCTL = 0x70; //0111_0000 CON45=1,把通道4,5联合使用。

飞思卡尔MC9S12XS128各模块初始化程序--超详细注释

飞思卡尔MC9S12XS128各模块初始化程序--超详细注释

飞思卡尔MC9S12XS128各模块初始化程序--超详细注释//**************************************************************************// 武狂狼2014.5.1 整理// 新手入门的助手////***************************************************************************注释不详细/*********************************************************/函数名称:void ATD0_init(void)函数功能:ATD初始化入口参数:出口参数:/***********************************************************/void ATD0_init(void){ATD0DIEN=0x00; //使用模拟输入功能|=1;数字输入功能// ATD0CTL0=0x07; //Bit[3:0]WRAP[3:0] 反转通道选择位ATD0CTL1=0x40; // 12位精度,采样前不放电 Bit[7]ETRIGSEL(外部触发源选择位。

=0选择A/D通道AN[15:0] |=1选择 ERTIG3~0)和Bit[3:0]ETRIGCH[3:0]选择外部触发通道// Bit[6:5]SRES[1:0]A/D分辨率选择位。

Bit[4]SMP_DIS =0采样前不放电|=1采样前内部电容放电,这会增加2个A/D时钟周期的采样时间,有助于采样前进行开路检测ATD0CTL2=0x40; // 快速清零,禁止中断,禁止外部触发ATD0CTL3=0x90; // 右对齐,转换序列长度为2,非FIFOATD0CTL4=0x03; // 采样时间4个周期,PRS=31,F(ATDCLK)=F(BUS)/(2(PRS+1))// ATD0CTL5=0x30; //启动AD转换序列//:对每项数据采集时,用到哪个通道采样可在相应子函数内设置某一通道(见Sample_AD.c)while(!ATD0STAT2L_CCF0);/*********************************************************/函数名称:void PIT_init(void)函数功能:初始化PIT 设置精确定时时间(1s)入口参数:无出口参数:无说明:无/***********************************************************/void PIT_init(void){PITCFLMT=0x00; //禁止PIT模块Bit[7] PITE:PIT模块使能位,0禁用|1使能// Bit[6] PITSWAI:等待模式下PIT停止位,0等待模式下,PIT模块正常运行| 1等待模式下,PIT模块停止产生时钟信号,冻结PIT模块// Bit[5] PITFRZ: 冻结模式下PIT计数器冻结位。

飞思卡尔MC9S12XS128(定时器)ECT寄存器详解

飞思卡尔MC9S12XS128(定时器)ECT寄存器详解

1、定时器IC/OC功能选择寄存器TIOSIOS[7..0]IC/OC功能选择通道0 相应通道选择为输入捕捉(IC)1 相应通道选择为输出比较(OC)2、定时器比较强制寄存器 CFORCFOC[7..0]设置该寄存器某个FOCn位为1将导致在相应通道上立即产生一个输出比较动作,在初始化输出通道时候非常有用。

【说明】这个状态和正常状态下输出比较发生后,标志位未被置位后的情况相同。

3、输出比较7屏蔽寄存器 OC7MOC7M[7..0]OC7(即通道7的输出比较)具有特殊地位,它匹配时可以直接改变PT7个输出引脚的状态,并覆盖各个引脚原来的匹配动作结果,寄存器OC7M决定哪些通道将处于OC7的管理之下。

OC7M中的各位与PORTT口寄存器的各位一一对应。

当通过TIOS将某个通道设定为输出比较时,将OC7M中的相应位置1,对应的引脚就是输出状态,与DDR中的对应位的状态无关,但OC7Mn并不改变DDR相应位的状态。

【说明】OC7M具有更高的优先级,它优于通过TCTL1和TCTL2寄存器中的OMn和OLn设定的引脚动作,若OC7M中某个位置1,就会阻止相应引脚上由OM和OL设定的动作。

4、输出比较7数据寄存器 OC7DOC7D[7..0]OC7M对于其他OC输出引脚的管理限于将某个二进制值送到对应引脚,这个值保存在寄存器OC7D中的对应位中。

当OC7匹配成功后,若某个OC7Mn=1,则内部逻辑将OC7Dn送到对应引脚。

OC7D中的各位与PORTT口寄存器的各位一一对应。

当通道7比较成功时,如果OC7M中的某个位为1,OC7D中的对应位将被输出到PORTT的对应引脚。

【总结】通道7的输出比较(OC7)具有特殊的位置,在OC7Mn和OC7Dn两个寄存器设置以后,OC7成功输出后将会引起一系列的动作。

比如:OC7M0=1,则通道0处在OC7的管理下,在OC7成功后,系统会将OC7D0的逻辑数据(仅限0或者1)反应在PT0端口上。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

买了本《嵌入式系统——使用HCS12微控制器的设计与应用》这本书,看了觉得帮助不大。

因为里面有些东西讲得不够详细,并且这本书不是针对XS128来写的。

网上也有一些网友写的资料,那都只是针对某一方面的。

我觉得最好的资料还是英文版的说明文档,里面好多东西都讲得很详细,虽然看起来有点费劲,但那里值得的。

接下来就自己的学习经历。

TIM中的功能比较多,有输入捕捉、输出比较,还有脉冲累加器。

这里主要记一下输入捕捉和输出比较。

输入捕捉这个功能很有用,他不仅可以捕捉外界事件的发生(这个功能和51中的外部中断差不多),还可以捕捉外界事件发生的时间。

捕捉外界时间这个功能可以运用到驱动超声波测距中去。

IOC0~IOC7是输入捕捉\输出比较的外部针脚。

当IOSx=0时(IOSx=1时为输出比较),则将相应的通道配置为输入捕捉了。

当输入捕捉检测到有上升沿或下降沿时,就会把那时寄存器的值锁存到TCx中,这样就可以通过查询TCx来确定事件发生的时间了。

如果输入捕捉控制寄存器TIE(CxI=1)中允许输入捕捉中断,则捕捉到事件时,系统会产生一次中断。

接下来依次说明一下相关的寄存器设置:TSCR1:TEN是定时器允许位。

TEN=1时,允许定时器工作,TEN=0时,禁止定时器工作。

其余不常用,设为0即可。

TSCR2:TOI是定时器溢出中断允许位。

这个在输入捕捉中没用到,设为0即可。

TCRE是定时器计数寄存器复位允许位。

用在输出比较中,允许输出比较寄存器7的事件来复位定时器计数寄存器。

这里设为0即可。

PR2~PR0是定时器分频因子选择位。

不同的组合可以设定不同的定时器时钟:TIOS是输入捕捉和输出比较选择寄存器,在这里设定IOC0~IOC7是用于输入捕捉还是用于输出比较。

里面的8位对应着IOC0~IOC7八个通道,相应位位1,则设为输出比较。

相应位设为0,则为输入捕捉。

TCTL3和TCTL4是用来设定输入捕捉极性的寄存器,在这里可以设为上升沿、下降沿、上升沿或下降沿触发输入捕捉。

其中EDGxB和EDGxA一起来设相应通道输入捕捉极性,对应的功能如下:(0 0)为禁止输入捕捉。

(0 1)为上升沿捕捉(1 0)为下降沿捕捉(1 1)为上升沿或下降沿捕捉TIE是输入捕捉或输出比较中断允许位。

这里的每一位是和TIOS上的位一一对应的。

相应置1时,则捕捉到事件时,则系统会产生中断。

相应位设为0时,则不能。

TFLG1是输入捕捉或输出比较中断标位寄存器。

当发生输入捕捉或输出比较事件时,相应位置1。

向该位写1,可以清空该标志位。

通道寄存器TC0~TC7用于锁存发生捕捉事件时自由运行的计数器的计数值。

通过查询TC0~TC7相应的位,可以确定捕捉事件发生的时刻。

与输入捕捉相关的寄存器还有:ICOVW:输入控制修改寄存器ICSYS:输入控制系统控制寄存器DLYCT:延迟计数控制寄存器(可以自动处理窄脉冲干扰)这些不常,可以不管接下来按照上面的寄存器设置好相应的功能,程序就出来了:void ECT0_INIT() //输入捕捉通道0初始化函数{TSCR2=0X06; //关闭溢出中断且64分频TIOS_IOS0=0; //定通道0为输入捕捉,1为输出比较TCTL4=0X01; //上升沿捕捉0x02为下降沿捕捉TIE_C0I=1; //通道0中断使能TSCR1=0X80; //开启总定时器中断TFLG1_C0F=1; //标志位清零}中断程序:#pragma CODE_SEG __NEAR_SEG NON_BANKED //分配内存空间void interrupt 8 timer_onput() //输入捕捉通道0的中断向量为8{TFLG1_C0F=1; //标志位清零asm sei; //关总中断// PORTB=~PORTB;PORTB&=~(1<<7);delay_us(1);PORTB|=(1<<7);asm cli; //开总中断}输出比较看似不能,却磨折了我两天,其中大多都是些小细节问题在纠缠。

现在终于想明白其中一些道理。

不过有些寄存器还是没有理解,如强制输出比较寄存器CFORC,测试了好久,都未能得到想要的结果,希望路过的高手能指点一下。

接下来继续记一下学习输出比较的点点滴滴吧。

XS128的定时器模块中的输入捕捉和输出比较共用同一组管脚。

可以通过设置TIOS寄存器来选择。

我觉得输出比较的原理和PWM波的产生原理差不多,都是通过计数器的数值和某一寄存器里的值比较产生输出的高低电平变化。

在输出比较中,当计数器的值与某一输出比较通道的TCx(TC0~TC7)的值相等时,该通道上引脚会输出高电平、低电平,或是对引脚上的电平进行翻转。

这时标志位CxF会置位,如果开通中断的话(TIE中的CxI=1),系统还会产生一个中断。

输出比较用到的寄存器好多都是和输入捕捉的一样,现在按照输出比较的程序需要再过一遍。

定时器系统控制寄存器TSCR1:设置定时器正常工作定时器系统控制寄存器TSCR2:设置定时器溢出中断允许,和定时器时钟分频设置定时器计数寄存器TCNT:这是个16位寄存器,在一般情况下是不可以写的。

输入捕捉时,就是这个寄存器的值存入TCx中,输出比较时,也是这个寄存器的值与TCx的值比较。

它的时钟由TSCR2设置的分频决定。

程序中这个寄存器一般情况下不用理会。

主定时器国断标志寄存器TFLG2:在这个寄存器中只有最高位TOF有效,是定时器溢出标志位。

当TCNT运行产生溢出时,该位就置位了。

如果允许定时器溢出中断的话,则系统会产生一个中断。

输入捕捉和输出比较选择寄存器TIOS:设置相应的通道为输入捕捉或是输出比较。

主定时器中断标志寄存器TFLG1:输入捕捉或输出比较的各通道的中断标志位。

对相应的通道写1,可以清除标志位。

定时器中断允许寄存器TIE:里面有8位,对应输入捕捉或输出比较的8个通道,设置是否允许相应通道的中断。

通道寄存器TC0~TC7:在输出比较中随时可以写入,它的作用是,当TCx=TCNT 时,相应的x通道就会发生输出比较。

此时相应的引脚就可以输出高电平、低电平,或是翻转引脚的电平。

上面的寄存器都是和输入捕捉共用的,在输入捕捉中讲过。

接下来就具体说明输出比较特别有的寄存器设置。

TCTL1~TCTL2:这个两个寄存器中每个OMx和OLx组合在一起,来设置相应通道的引脚电平输出方式:(0 0):输出比较的通道与引脚逻辑断开,也就是输出比较的输出不会影响相应的引脚的电平。

(0 1):翻转输出比较的引脚的电平。

(1 0):在相应的引脚上输出低电平。

(1 1):在相应的引脚上输出高电平。

CFORC:定时器强制输出比较寄存器相应位置1时,可以把相应通道的输出比较设为强制输出比较。

一般情况下不用。

OC7M:输出比较通道7屏蔽寄存器OC7D:输出比较通道7数据寄存器通道7上的连续输出比较会覆盖所有其他通道的引脚上的输出结果。

OC7M就是设置其他通道的哪些通道会受通道7控制的。

当OC7M的某位置1时,相应通道的输出比较就会受通道7控制,此时受控的通道在其通道上设置的OMx和OLx无效了,而是按照OC7D中对应的OC7Dx 中的值输出到相应的引脚上。

总的来说,OC7M是选择受通道7控制的其他通道,而OC7D 是受控的通道在通道7发生输出比较时的输出结果。

TTOV:定时器溢出翻转寄存器相应通道置1时,计数器溢出时,允许翻转输出比较引脚上的电平。

这个寄存器只在输出比较模式下才有效。

一般情况下,用不到这个寄存器,程序中不用做设置。

OCPD(OCPD0~OCPD7):当相应位置1时,标志位正常,但是输出比较的结果不能输出到引脚上,也就是输出比较的寄存器与引脚逻辑断开了。

当相应位设为0时,标志位正常,引脚输出也正常。

下面是相应的程序:#include <hidef.h> /* common defines and macros */#include "derivative.h" /* derivative-specific definitions */void main(void){DDRB=0XFF;PORTB=0X7F;//DisableInterrupts;TSCR2=0X07; //设置定时器分频TIOS=0X01;//通道0为输出比较TCTL2=0X01; //模式为翻转引脚输出电平TC0=0XAAAA; //设置输出引脚在一个周期内翻转的时间,//如果这个值保持不变的话,那总的来看,//引脚输出电平的周期是不变的,周期等于计数器计数一周的时间//TTOV=0X00; ////CFORC=0X01; //加上这一句,似乎没什么影响。

还没清这个寄存器的具体作用。

TIE=0X01; //相应通道中断允许TSCR1=0X80; //打开定时器//PORTB=PTT;EnableInterrupts;while(1);}#pragma CODE_SEG __NEAR_SEG NON_BANKED interruptvoid interrupt 8 CH0_ISR(void) //要特别注意中断函数的书写格式,我就在这里吃了大亏{DisableInterrupts;TFLG1=0x01; //清零标志位if(TC0==0xAAAA) //改变引脚输出的占空比。

输出的周期由计数器计数一//周的时间决定,要改变,只能改变定时器的时钟分频TC0=0xffff;elseTC0=0xAAAA;PORTB_PB7=~PORTB_PB7; //测试是否进入中断EnableInterrupts;}XS128中的脉冲累加器和DG128的很不一样。

相对DG128来说,XS128的脉冲累加器大大简化了,其中只有三个寄存器需要设置:PACTL、PAFLG、PACNT。

16位脉冲累加器PACT与IOC7共用一个引脚。

顾名思义,脉冲累加器就是对有效边沿(上升沿或下降沿)进行计数,然后把计数的值保存在寄存器PACNT中。

寄存器PACTL是16位脉冲累加器的核心,几乎所有的设置都是在这个寄存器中。

接下来解剖一下这个核心寄存器PACTL:PAEN:脉冲累加器允许位,置1,则工作。

置0,则禁止。

PAEN与TEN无关,定时器TEN禁止时,脉冲累加器仍可以工作。

PAMOD:工作方式选择位。

置1,为门控时间累加器方式。

置0,为事件计数器方式。

门控时间累加器方式:输入引脚上的有效电平会触发脉冲累加器对64分频后的时钟进行计数。

事件计数器方式:脉冲累加器对引脚上的每个有效边沿计数。

引脚上每产生一个有效边沿,脉冲累加器计数器的值就会加1。

PEDGE:边沿跳变控制位。

它的功能和脉冲累加器的工作方式有关。

相关文档
最新文档