1、头文件derivative.h中包含为: #include
#pragma LINK_INFO DERIVATIVE \这是Codewarrior5.0版本中的默认设置。
2、设置PLL时钟时SYNR和REFDV须按照给的程序当中来设置,若按照程序注释中来设置的话时钟将出现很大误差,原因我不知道,我是不断测试得到的。
3、具体的寄存器要根据给定的对应的头文件,不同的IDE版本中xs128的头文件可能不同,应根据实际情况来写。
代码如下:
#include
#define PITTIME 1000//设定为5ms定时 uchar count=0;
void setbusclock(void) //32MHz 外部时钟16MHz {
CLKSEL=0X00; // disengage PLL to system PLLCTL_PLLON=1; // turn on PLL
SYNR =0x40 | 0x03; REFDV=0x80 | 0x01;
//SYNR =1; //PLLCLK=2*fOSC*(SYNR + 1)/(REFDV + 1) //REFDV=1;
POSTDIV=0x00; // 4:0, fPLL= fVCO/(2xPOSTDIV)
// If POSTDIV = $00 then fPLL is identical to fVCO (divide by one). _asm(nop); // BUS CLOCK=16M _asm(nop);
while(!(CRGFLG_LOCK==1)); //when pll is steady ,then use it; CLKSEL_PLLSEL =1; //engage PLL to system; }
void PORTB_init(void)//IO口初始化,B口为输出 {
DDRB=0xFF; PORTB=0x00; }
void PIT_init(void)//定时中断初始化函数 5MS定时中断设置 {
PITCFLMT_PITE=0; //定时中断通道0关 PITCE_PCE0=1;//定时器通道0使能
PITMTLD0=160-1;//8位定时器初值设定,160分频,在32MHzBusClock下,为0.2MHz。即5us
PITLD0=PITTIME-1;//16位定时器初值设定。PITTIME*0.005MS PITINTE_PINTE0=1;//定时器中断通道0中断使能 PITCFLMT_PITE=1;//定时器通道0使能 }
void main(void) {
/* put your own code here */
setbusclock(); PORTB_init(); PIT_init(); 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 PIT0(void) { count++; if(count==200) {
PORTB=~PORTB;//输出取反 count=0; }
PITTF_PTF0=1;//清中断标志位 }
相关推荐: