⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frequence.c

📁 C51LED显示、模数转换、液晶显示、直流电机等模块的程序代码
💻 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 + -