您的位置 首页 产品

Freescale 9S12 系列单片机使用笔记(ECT 模块) 3

实验3:输出比较7通道的特殊功能输出比较通道OC7具有特殊的权限,可以废止其他输出比较通道的动作,直接决定各个输出通道的状态。这种特权…

试验3:输出比较7通道的特别功用

输出比较通道OC7具有特别的权限,能够废止其他输出比较通道的动作,直接决议各个输出通道的状况。这种特权功用是经过装备两个额定的寄存器OC7M和OC7D来完成的。

OC7M寄存器(OutputCompare7MaskRegister)

使OC7Mx=1,OC7强行参加办理通道x的输出,但通道OC7对通道OC0~OC6的办理仅限于使其引脚PT0~PT6清0或置1,不能将引脚电平翻转,引脚的动作来自于输出比较7数据寄存器OC7D中的对应位OC7Dx界说的电平状况,有必要事前经过程序设置。

图11OC7M寄存器

OC7D寄存器(OutputCompare7DataRegister)

OC7Dx=0,则对应事情产生时相应PTx位将被输出为低电平,OC7Dx=1,则对应事情产生时相应PTx位将被输出为高电平。

图12OC7D寄存器

能够开端咱们的试验了。这个试验将在PT0管腿上输出一个占空比位1/4的方波。完成办法为在TCNT=10000时将PT0置为高电平,TCNT=26384时将PT0置为低电平。下面是程序片段。

  1. #include/*commondefinesandmacros*/

  2. #include”derivative.h”/*derivative-specificdefinitions*/
  3. #include”sci.h”

    voidECTInit(void)

  4. {
  5. //TSCR2_PR=7;//prescalefactoris8,busclock/128=8Mhz/8
  6. TIOS_IOS0=1;//channel0asoutputcompare
  7. TC0=10000;

    TCTL2_OL0=1;

  8. TCTL2_OM0=1;//使channel0输出高电平
  9. TIOS_IOS7=1;//channel7asoutputcompare
  10. TC7=26384;
  11. //TIE_C7I=1;//使能channel7中止
  12. OC7M_OC7M0=1;
  13. OC7D=0;//使channel0输出低电平
  14. TCTL1_OL7=0;
  15. TCTL1_OM7=0;
  16. TSCR2_TOI=1;//timeroverflowinterruptenable
  17. TSCR1_TEN=1;//timerenable
  18. }
  19. voidmain(void)
  20. {
  21. SCIInit();
  22. SCISetBaudRate(SCI0,9600,8192000L);
  23. ECTInit();
  24. DDRM_DDRM0=1;
  25. EnableInterrupts;
  26. for(;;)
  27. {
  28. _FEED_COP();/*feedsthedog*/
  29. }/*loopforever*/
  30. }
  31. interruptVectorNumber_VtimovfvoidECT_TimerOverflow_ISR(void)
  32. {
  33. TFLG2=TFLG2_TOF_MASK;//cleartimeroverflowinterruptflag
  34. PTM_PTM0=~PTM_PTM0;
  35. }

    interruptVectorNumber_Vtimch0voidECT_0_ISR(void)

  36. {
  37. TFLG1=TFLG1_C0F_MASK;//clearchannel0interruptflag
  38. }
  39. interruptVectorNumber_Vtimch1voidECT_1_ISR(void)
  40. {
  41. TFLG1=TFLG1_C1F_MASK;//clearchannel1interruptflag
  42. }

使用这种方法能够模仿个PWM功用出来。不过模仿出来的PWM周期只要8种挑选。

在第一篇使用笔记中,我提到过TCSR2寄存器有一位叫TCRE。TCRE位是TimerCounterResetEnable的简写。TCRE位为0一共TCNT自在运转,TCRE位为1一共当TCNT=OC7时复位。

下面将给出一个使用TCRE的比如。同样是占空比25%,可是一起还调整了波形的周期。这个比如中,TC0=1000,TC7=4000。PT0在1000时翻转一下,在4000时再翻转一下。一起4000时将TCNT值复位到0从头计数。这样波形的频率就成了4000/8192000=4.88ms。

  1. voidECTInit(void)
  2. {
  3. TSCR2_PR=7;//prescalefactoris8,busclock/128=8Mhz/8
  4. TIOS_IOS0=1;//channel0asoutputcompare
  5. TC0=1000;
  6. TIE_C0I=1;//使能channel0中止
  7. TCTL2_OL0=1;
  8. TCTL2_OM0=1;//使channel0输出高电平
  9. TIOS_IOS7=1;//channel7asoutputcompare
  10. TC7=4000;
  11. TIE_C7I=1;//使能channel7中止
  12. TCTL1=0x40;
  13. OC7M_OC7M0=1;
  14. OC7D=0;//使channel0输出低电平
  15. TCTL1_OL7=0;
  16. TCTL1_OM7=0;
  17. TSCR1_TEN=1;//timerenable
  18. }

上面是实践波形,这儿呈现了个有意思的现象。PM0一向为低电平,这表明TCNT的Overflow中止没有进去。阐明这个中止只要在TCNT为自在计数器时才有用,这点需求特别注意。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/chanpin/264166.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部