- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
买了本《嵌入式系统——使用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=~(17);
delay_us(1);
PORTB|=(17);
asm cli; //开总中断
}
输出比较看似不能,却磨折了我两天,其中大多都是些小细节问题在纠缠。现在终于想明白
其中一些道理。不过有些寄存器还是没有理解,如强制输出比较寄存器CFORC,测试了好久,
都未能得到想要的结果,希望路过的高手能指点一下。
接下来继续记一下学习输出比较的点点滴滴吧。
文档评论(0)