智能车制作

标题: 关于pit产生频率为100hz,占空比为15%的程序,求大神指点 [打印本页]

作者: asdgagsdgasdgd    时间: 2012-10-29 19:03
标题: 关于pit产生频率为100hz,占空比为15%的程序,求大神指点
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
unsigned i=0;        //定义为全局变量
void setbusclk_40M(void)   //设置总线频率为40兆,晶振频率为16兆
{
CLKSEL_PLLSEL=0X00;//寄存SRNR和REFDV只有在PLLSEL=0是才能够写入
PLLCTL_PLLON=1;  //打开PLL电路
SYNR=0X40|0X04;
REFDV=0X80|0X01; //f(vco)=(1+SYNR)/(1+REFDV)*f(osc)*2
POSTDIV=0X00;   //此时f(pll)=f(vco),即锁相环频率等于压控振荡器的频率,总线频率为f(pll)/2;
asm(nop);
asm(nop);   //空语句,等待锁相环频率稳定
while(!(CRGFLG_LOCK==1));    //表明锁相环频率已经稳定,时钟频率也稳定
CLKSEL_PLLSEL=1;   //使能锁相环时钟
}
void initioB(void)     //初始化B口
{
DDRP_DDRP0=0xff;
PTP_PTP0=0Xff;
DDRB=0xff;
}
void initpit(void)   //中断时间设置为5ms
{
PITCFLMT_PITE=0;   //关闭PIT模块
PITCE_PCE0=1;     //定时器通道0使能
PITMUX_PMUX0=0;    //定时器通道0使用微计数器0
PITMTLD0=200-1;     //8位定时器初值的设定
PITLD0=1000-1;      //16位定时器初值设定
PITINTE_PINTE0=1;   //定义器中断通道0中断使能
PITCFLMT_PITE=1;   //定时器通道0使能  time=(PITMTLD0+1)*(PITLD0+1)/f(bus)
}
//1MHZ等于1000000HZ

void main(void) {
  setbusclk_40M();
initioB();
initpit();
EnableInterrupts;

  for(;;) {
    _FEED_COP(); /* feeds the dog */
  } /* loop forever */
  /* please make sure that you never leave main */
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 66 PITO(void)
{ PORTB=0X00;
i++;
if(i<=3)
PTP_PTP0=0xff;
else if(i>3&&i<=20)
PTP_PTP0=0x00;
  if(i>20)
  i=0;
PITTF_PTF0=1;      //清除中断标志位
}  

作者: 蕞後1.页    时间: 2012-11-3 20:43
能解释下15%占空比和100HZ频率怎么算的吗?
作者: zhw08    时间: 2012-11-8 13:43
频率应该是10HZ吧,时间T=20*5ms,频率f=10HZ。占空比是if语句里面的3/20=15%。。。
作者: 愤怒的小丽丽    时间: 2013-8-8 10:44
,PIT能产生方波吗?它里面是用到产生方波的,不过是由PWM初始化产生的。
作者: 一粒尘埃    时间: 2013-8-12 18:20
用PIT可以产生方波啊,用IO的高低电平切换就可以啊,  还有为什么不用PWM模块直接产生呢?





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2