?? frequence.c
字號:
//-----------------------------------------------------------------------------
// 版權歸新華龍電子公司所有
//-----------------------------------------------------------------------------
//
//文件名: Frequence.c
//
//編寫人: LC
//
//編寫時間:2005/03/10
//
//目標器件: C8051F02x
//
//編譯工具: Silicon Laboratories IDE
//
//程序說明: 此程序運行前將S3的第2和第4撥碼開關撥到ON,用跳線將T0和P00短接,撥碼開
// 關S1打開任一通道;定時器0作為外部計數器,定時器1作為定時器,在定時1ms
// 范圍內察看計數器0所計的數。
//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------
#include <c8051f020.h> // SFR declarations
#include <intrins.h>
//-----------------------------------------------------------------------------
// Global CONSTANTS
//-----------------------------------------------------------------------------
#define SYSCLK 11059200 /*外部晶振頻率*/
sbit P31 = P3^1;
//-----------------------------------------------------------------------------
// Function PROTOTYPES
//-----------------------------------------------------------------------------
void SYSCLK_Init (void); //系統時鐘初始化
void PORT_Init (void); //端口初始化
void Time01_Init(void); //定時器0/1初始化
unsigned int Frequence; //外部脈沖數變量
/*延時子程序*/
void sleep_ms(unsigned int count)
{
unsigned char ii,jj;
for(ii=0;ii<count;ii++)
{
for(jj=0;jj<250;jj++)
_nop_();
}
}
//-----------------------------------------------------------------------------
// MAIN Routine
//-----------------------------------------------------------------------------
void main (void) {
WDTCN = 0xde; /*無效看門狗*/
WDTCN = 0xad;
SYSCLK_Init (); /*初始化時鐘*/
PORT_Init (); /*初始化交叉開關和IO口*/
Time01_Init(); /*初始化定時器0/1*/
P31=0;
sleep_ms(250);
EA=1; // 開總中斷
TR1=1; // 開定時器1
TR0=1; // 開定時器0
while (1) {
}
}
//-----------------------------------------------------------------------------
// SYSCLK_Init
//-----------------------------------------------------------------------------
//
// This routine initializes the system clock to use an 11.0592MHz crystal
// as its clock source.
//
void SYSCLK_Init (void)
{
int i; /*延時計數器*/
OSCXCN = 0x67; /*啟動外部11.0592MHz晶振*/
for (i=0; i < 255; i++) ; /*等待外部晶體起振*/
while ((OSCXCN & 0x80)==0x00) ; /*查詢標志位*/
OSCICN = 0x08; /*選擇外部晶體作為系統時鐘并使能時鐘丟失檢測*/ // source and enable missing clock
}
//-----------------------------------------------------------------------------
// PORT_Init
//-----------------------------------------------------------------------------
//
// Configure the Crossbar and GPIO ports
//
void PORT_Init (void)
{
XBR0 = 0x00;
XBR1 = 0x02; /*交叉開關使能T0*/
XBR2 = 0x40; /*使能交叉開關和弱上拉*/
P3MDOUT |= 0xff; /*P3口推挽輸出*/
}
void Time01_Init(void)
{
EA=0; //關總中斷
TR0=0; //關定時器0
TR1=0; //關定時器1
IE=0x0A; /*允許TF1/TF0標志位(TCON.7/TCON.5)的中斷請求*/
/*定時器1/0發生溢出*/
TMOD=0x15; /*定時器1是16位定時器方式,定時器0是16為計數器(T0腳)方式*/
IP=0x08; /*定時器1是高優先級中斷*/
CKCON=0x00; /*定時器1的時基是系統的1/12*/
TH1=(-SYSCLK/12/1000)>>8; /*定時1ms,定時器1使用系統時鐘的1/12*/
TL1=-SYSCLK/12/1000;
}
void TIMER0_ISR (void) interrupt 1 using 0
{
//TR0=0;
TF0=0; /*清中斷標志*/
//TR0=1;
}
void TIMER1_ISR (void) interrupt 3 using 1
{
TF1=0; /*清中斷標志*/
TR1=0; /*關定時器1*/
Frequence=TH0*0x100+TL0; /*外部脈沖數 單位 KHz*/
TR0=0; /*清定時器0到零*/
TH0=0;
TL0=0;
TH1=(-SYSCLK/12/1000)>>8; /*定時器1使用系統時鐘的1/12分頻*/
TL1=-SYSCLK/12/1000;
TR1=1; /*開定時器1*/
TR0=1; /*開定時器0*/
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -