高级会员
- 积分
- 661
- 威望
- 354
- 贡献
- 95
- 兑换币
- 4
- 注册时间
- 2010-9-29
- 在线时间
- 106 小时
|
1贡献
程序如下:
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#include<mc9s12xs128.h>
#define uint unsigned int
#define uchar unsigned char
//锁相环倍频至80MHz 总线频率为40MHz
//fPLLCLK=2*fOSCCLK*(SYNR+1)/(REFDV+1)
void PLL_init(void)
{
CLKSEL=0X00; //disengage PLL to system
PLLCTL_PLLON=1; //turn on PLL
SYNR =0xc0 | 0x04; //SYNR=4
REFDV=0x80 | 0x01; //REFDV=1
POSTDIV=0x00; //pllclock=2*osc*(1+SYNR)/(1+REFDV); 2*16*5/2=80M
_asm(nop); //BUS CLOCK=pllclock/2
_asm(nop);
while(!(CRGFLG_LOCK==1)); //when pll is steady ,then use it;
CLKSEL_PLLSEL =1; //engage PLL to system;
}
//延时10us以上函数
void Delay1()
{
uchar a,b,c;
for(a=0;a<1;a++)
for(b=0;b<1;b++)
for(c=0;c<8;c++);
}
//延时250ms
void Delay2()
{
uchar a,b,c;
for(a=0;a<250;a++)
for(b=0;b<3;b++)
for(c=0;c<220;c++);
}
void A1output()
{
DDRA_DDRA1=1;//A0口设为输出
PORTA_PA1=1;
Delay1(); //延时10us以上
PORTA_PA1=0;
}
//--------------------定时器0初始化------------------//
void Time0_Init()
{
TIOS=0x00; //通道0输入捕捉
TCTL4=0x03; //上升下降沿均捕捉
TSCR2=0X05; //32分频 总线频率40M
TIE=0x01; //通道0开中断
TSCR1_TEN=1;//启动定时器
}
void main(void)
{
/* put your own code here */
PLL_init();
Time0_Init();
DDRB=0xff;
PORTB=0xff;
for(;;) {
_FEED_COP(); /* feeds the dog */
EnableInterrupts;
A1output();
Delay2();
}
}
//定时器通道0输入捕捉中断
#pragma CODE_SEG NON_BANKED
void interrupt 8 Timer0_interrupt()
{
DisableInterrupts;
PORTB=~PORTB;
TFLG1_C0F=1; //清中断标志位
}
A1脚用杜邦线接至T0脚,如果响应中断的话灯应该一闪一闪的,可是灯一直是灭的,就是说没有进入中断,求大侠指导。谢谢。 |
|