智能车制作

 找回密码
 注册

扫一扫,访问微社区

12
返回列表 发新帖
楼主: dragon3040
打印 上一主题 下一主题

求PIT模块编程范例

[复制链接]

20

主题

139

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5459

论坛元老奖章

QQ
威望
969
贡献
3928
兑换币
4
注册时间
2011-7-25
在线时间
281 小时
11#
发表于 2011-10-19 21:09:13 | 只看该作者
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */




uchar count;

//*****************************************************************************************
//函 数 名:void PLL_Init(void)
//输    入:无
//输    出:无
//全局变量:无
//功能描述:锁相环倍频  初始化设置
//说    明:FPLLCLK=80MHz;  BusCLK=1/2PLLCLK=40MHZ
//程 序 员:
//时    间:2011年10月
//*****************************************************************************************
void PLL_Init(void)
{
    CLKSEL_PLLSEL=0;     //选择时钟源为外部晶振OSCCLK,在PLL程序执行前,内部总线频率为OSCCLK/2。
    PLLCTL_PLLON =0;     // 首先禁止锁相环等设置完毕在打开 当PLLCTL_PLLON=0时,关闭PLL电路。当PLLCTL_PLLON=1时,打开PLL电路。
    SYNR         =9;
    REFDV        =3;     //总线频率40M
    POSTDIV      =0x00;  //POSTDIV=0x00=0,则FPLL=FVCO=PLLCLK,
                         //所以PLLCLK=FVCO=2*16*(1+9)/(1+3)=80MHz;;
    //SYNR值   计算公式 POSTDIV=0x00=0,则FPLL=FVCO=PLLCLK
    //(pll clk时钟频率   Busclk总线频率)
    //REFDV值  pllclock=2*osc*(1+SYNR)/(1+REFDV) Busclk=pllcolock/2;                        
    PLLCTL_PLLON=1;     //设置完毕打开锁相环电路   
    _asm(nop);
    _asm(nop);         
    while(!CRGFLG_LOCK); //锁相环已经锁定了吗?没有就等待
    CLKSEL_PLLSEL=1;     //锁相环电路稳定饿了 选用锁相环
}

//*****************************************************************************************
//函 数 名:void PIT_Init(void)
//输    入:无
//输    出:无
//全局变量:无
//功能描述:PIT初始化
//说    明:TIME=(PITMTLD+1)*(PITLD+1)/FbusCLK= 200*PITLD0/40M=240*5000/12M=0.05S
//程 序 员:夏凯
//时    间:2011年10月
//*****************************************************************************************
void PIT_Init(void)
{
PITCFLMT_PITE=1;   //使能PIT
PITCE_PCE0=0;      //禁止定时器通道0
PITMTLD0=200-1;    //8位定时器初值设定。
PITLD0=10000-1;    //8位定时器初值设定.
PITMUX_PMUX0=0;    //16位定时器通道0与微定时器0相连
PITINTE_PINTE=1;   //定时器通道0中断使能
PITCE_PCE0=1;      //定时器通道0使能
}

void main(void) {
  /* put your own code here */
  DisableInterrupts;
  PLL_Init();
  PIT_Init();
        EnableInterrupts;
  DDRB=0XFF;
  PORTB=0XFF;
  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  PIT_INT()
{
  count++;
  PITTF_PTF0=1; //清中断标志位 写1清0
  if(count==20) //1S
  {
   PORTB=~PORTB;
   count=0;
  }

}
回复 支持 反对

使用道具 举报

5

主题

77

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
423
QQ
威望
232
贡献
131
兑换币
0
注册时间
2011-11-21
在线时间
30 小时
12#
发表于 2011-12-19 21:42:00 | 只看该作者
en ,收获不小。。。
回复 支持 反对

使用道具 举报

5

主题

139

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1119
QQ
威望
687
贡献
176
兑换币
31
注册时间
2011-8-22
在线时间
128 小时
13#
发表于 2011-12-19 23:59:17 | 只看该作者
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-29 22:11 , Processed in 0.067460 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表