?? main.c
字號:
///////////////////////////////////////////////////////////////////
//PT4輸入捕捉測速程序,PT4口輸入脈沖
//每次記錄脈沖時間可修改宏:TIME_INTER
//說明此程序用于總線時鐘在32M情況下,若總線時鐘有變化,改分頻參數和模數常數以得到精確定時
//author:whut_wj
///////////////////////////////////////////////////////////////////
#include <hidef.h> /* common defines and macros */
#include <mc9s12dg128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
#define TIME_INTER 1000 //1000個ms=1s
unsigned int Get_pulse; //脈沖個數
unsigned int number_count;
void Start_PLL(void) //busCLK=32M
{
REFDV=0x01; // PLLCLK =2*OSCCLK*(SYNR + 1)/(REFDV + 1)
SYNR=0x03; // =2*16M*3/2=64M
asm{
BRCLR CRGFLG,#$08,*
BSET CLKSEL,#$80
}
}
void MDCInit(void)
{
MCCTL = MCCTL&0Xfb; //模數計數器禁止運行
MCCTL = 0Xe3; //允許中斷,模數計數方式
//返回時重新加載所用的常數,分頻常數為16
MCCTL = MCCTL|0X04; //模數計數器使能
MCCNT = 2000; //(1/32M)*16*2000= 1ms
MCCTL = MCCTL|0X08 ; //把模數常數寄存器的值加載到模數計數器FLMC;
}
void Init_PT4_Capture()
{
TIOS=0x00; //輸入捕捉
TCTL3=0x02; //通道4下降沿觸發
TSCR2=0X07; //分頻,用來給TCNT作時間參考,這里沒有意義
TSCR1=0x80; //Timer Enable
TIE=0X10; //初始化定時器開啟
}
void main(void)
{
DisableInterrupts;
Start_PLL();
Init_PT4_Capture();
MDCInit();
EnableInterrupts;
DDRB=0xff;
PORTB=0XAA;
for(;;)
{
}
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 26 MDC_ISR(void)
{
static unsigned int count=0;
count++;
if( count==TIME_INTER) //1秒取一次
{
Get_pulse = number_count;
number_count=0;
count=0;
PORTB^=0Xff;
}
MCFLG = 0x80;
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 12 PT4_Capture(void)
{
TFLG1=0x10;
number_count++;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -