第7章IO接口及增强型捕捉定时器模块祥解.ppt

第7章IO接口及增强型捕捉定时器模块祥解.ppt

  1. 1、本文档共76页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章IO接口及增强型捕捉定时器模块祥解.ppt

例二:输入捕捉 IC0的初始化: void ic_init(void) { TSCR1= 0x90; //主定时器使能 TSCR2=0x07; //分频因子=128 ICSYS=0x02; //IC缓冲使能 TIOS=0; //通道设置为输入捕获 TCTL4= 0xff; //采用上升、下降沿触发 TIE=0 //通道0开中断 } 本例使用了例一未使用过的寄存器:ICSYS、TIOS、TCTL4和TIE。 输入控制系统寄存器-ICSYS SHxy=0:正常操作。1=x通道和y通道将产生一样的输入动作,x通道的设置同样适用于y。 TFMOD=0:只要产生正确的输入捕获事件,TFLG1中的CxF位就置一。1=队列模式时才使用。 PACMX=0:8位脉冲累加器溢出后自动回0。1=不自动回0,停留在0XFF。脉冲累加器对IC通道捕获的有效边沿数量进行计数。 BUFEN=1:使用输入捕获缓冲区。0=不使用。 LATQ=0:输入捕获队列模式使能。产生一次成功的输入捕获时,IC通道寄存器中保留的计数值会被送到保持器中,然后IC寄存器会接收新的计数值。1=锁存模式使能。 IC/OC通道选择寄存器--TIOS TIOS=0: 设置相应的通道为输入捕获。 IOSx: 1=通道x为输出比较; 0=通道x为输入捕获。 控制寄存器3/4 — TCTL3/4 EDGnA/B:输入捕捉边沿控制。 本例设置EDG0A=1,EDG0B=1。即IC0通道采用上升,下降沿都触发。 n代表通道序号。 定时器中断使能寄存器-TIE CxI:1=第x个通道中断允许;0=第x个通道中断禁止。 本例设置C0I=1,把通道0的中断打开,这样能够使外部信号引发IC0中断,并进入相应的服务程序进行处理。 例二:输入捕捉 初始化,需要在main函数中调用初始化函数ic_init()。 以下是在main函数中,如何使用PORTA_BIT6来产生一个方波信号。 DDRA=0xff; //设置PORTA的方向寄存器,为输出 PORTA=0x00; //PORTA的输出初始化为低电平 DDRB=0xff; //PORTB设置为LED灯的控制信号 PORTB=0xff; //LED全灭 for(;;) { for(i=0;i6000;i++) { PORTA_BIT6=1;//循环中设置信号为高电平 } for(i=0;i6000;i++) { PORTA_BIT6=0; //循环中设置信号为低电平,产生方波 } } 例二:输入捕捉 方波信号已经成功得产生了,下面是中断服务程序: void interrupt 8 ic0_int(void) { TFLG1_C0F=1;//中断标志清除 ic4=TC0; //通过读TC0寄存器来响应中断,ic4 PORTB=0x55; //用LED灯来指示已经进入了中断 /*以下放置其他代码*/ } 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指示了中断发生在哪个通道,需要对相应位清零时,可以对它进行置一操作。 C7F-C0F:IC/OC的中断标志。 TCx:定时器输入捕捉和输出比较寄存器0-7 BIT 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 R TCx 15-0 W RESET 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 TC0-TC7寄存器用来锁存自由计数计数器的值,当得到有效的边沿触发时,我们可以通过读这些寄存器来获得输入捕捉计数值;通过写这些寄存器来设置输出比较的计数值。 任意时刻可读。在输出比较模式任何时刻可写。在输入捕捉模式对寄存器的写操作没有意义。当寄存器复位后,寄存器值等于$0000。 例三:输出比较 这里讲一个输出比较例子,目的是通过OC0通道输出一个有一定宽度的脉冲。 OC0的初始化: void oc_init() { TSCR2 = 0x07;//128分频,定时器溢出中断禁止 TIOS = 0xff; //所有通道作为输出比较通道 TIE = 0x00; //中断全部禁止 TSCR1= 0x90; //主定时器使能 TCTL2=0xaa; // OC0输出电平为低电平 CFORC=0xff; //强制输出比较 } 例三:输出比较 void main(void) { EnableInterrupts; oc_init(); //初始

文档评论(0)

四娘 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档