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

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

例二:输入捕捉 初始化,需要在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(); //初始化函数调用 asm_main(); TCTL2_OM0=1; TCTL2_OL0=1; //OC0输出电平为高电平 CFORC_FOC0=1; //OC0强制输出比较 TC0=TCNT+40000; //设置脉冲宽度,在自由计数器TCNT的基础上加上脉冲宽度的计数值 TCTL2_OM0=1; TCTL2_OL0=0; //OC0输出电平为低电平 for(;;){/*其他代码*/} } * 强制输出比较寄存器--CFORC FOCx—x通道强制输出比较 在相应的寄存器位写入强制输出比较命令,会立即使相应的通道处于输出比较状态。 * 定时器控制寄存器1/2—TCTL1/2 OMn:输出模式 OLn:输出等级 这8 对控制位是用来指定输出比较的输出动作的,当OMn 和OLn 二者任意一个为1 时,OCn 对应的端口会有相应的输出。 * 定时器溢出中断例程(可在实验板上运行) #include hidef.h /* common defines and macros */ #include mc9s12dg128.h /* derivative information */ #pragma LINK_INFO DERIVATIVE mc9s12dg128b #pragma CODE_SEG NON_BANKED //9S12中断程序必须定位于non-banked 区域 interrupt 16 void Int_TimerOverFlow(void) { TFLG2_TOF = 1; //clear timer overflow flag //用户自己的代码 PORTA=~PORTA; } #pragma CODE_SEG DEFAULT //9S12中断程序必须定位于/

文档评论(0)

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

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

1亿VIP精品文档

相关文档