测相位差.txt

来自「测试相位 基于C8051F330的相位测试源代码」· 文本 代码 · 共 118 行

TXT
118
字号
// 测相位差
// 直接用内部晶振产生的信号来测相位差

#include <c8051f330.h>                   
#include <stdio.h>
//------------------------------------------------------------------------------------
sbit   INT0     = P0^1;                        // P0.1 为/INT0引脚
// 定义函数
//------------------------------------------------------------------------------------
void   SYSCLK_Init (void);
void   PORT_Init   (void);
void   Timer0_Init (void);
void   Timer0_ISR  (void);
void   EX0_Init    (void);
void   EX0_ISR     (void);
//-----------------------------------------------------------------------------
//常量赋值
//-----------------------------------------------------------------------------
#define SYSCLK        24500000          
unsigned int i;
unsigned int j;   
float s; 
float t;      
// 主函数
//------------------------------------------------------------------------------------
void main (void)
{
    unsigned int i;
	i=2000;
    PCA0MD &= ~0x40;                   // 关闭看门狗   
    SYSCLK_Init ();                            
    PORT_Init ();                                  
    Timer0_Init ();                    // 定时器0 对T0引脚上的 与门脉冲 计数
	EX0_Init();
	while(--i);
	while(INT0==1);					  //INT0=1,wait;
	TR0=1;							  //INT0=0,T0 start
	while(INT0==0);					  //INT0=0,wait
    EA=1;    
	while(1);
	
}
//------------------------------------------------------------------------------------
// 端口初始化
//------------------------------------------------------------------------------------
//P0.1  数字输入   用来接/INT0引脚的信号    异或信号
//P0.0  数字输入   用来接T0引脚		    与门信号

void PORT_Init (void)
{
    P0MDIN  = 0xff;                // P0.0 为数字输入  P0.1为数字输入
	P0MDOUT = 0x00;                // P0.0  P0.1输出为推挽方式
    P0SKIP  = 0x03;                // P0.0  P0.1被交叉开关跳过
    XBR1    = 0x50;                // T0   连到端口引脚,交叉开关使能
	IT01CF  = 0x09;                // 高电平有效    /INT0端口引脚为P0.1
}
//-----------------------------------------------------------------------------
// 系统时钟初始化
//-----------------------------------------------------------------------------

void SYSCLK_Init (void)
{
   OSCICN |= 0x83;                 //SYSCLK为内部H—F振荡器输出24.5MHz            
   RSTSRC  = 0x04;
                     
}
//-----------------------------------------------------------------------------
// 定时器0初始化
//-----------------------------------------------------------------------------

void Timer0_Init ()
{
    CKCON= 0x04;                       // 定时器0 使用系统时钟24.5MHz
	TMOD = 0x09;                       // 对                                
    TH0  = 0x00;             
    TL0  = 0x00;                  
    ET0= 1;                     
   /// TR0=1;                     

}

//-----------------------------------------------------------------------------
//   /INT0初始化
//-----------------------------------------------------------------------------

void EX0_Init ()
{
    IT0 = 1;                     //   /INT0为下降沿触发方式 
	EX0 = 1;                     //   /INT0中断允许位
} 
//-----------------------------------------------------------------------------
//   /INT0中断服务子程序
//-----------------------------------------------------------------------------

void EX0_ISR ()	 interrupt 0
{
    TR0 = 0;					       //T0停止计数
	IE0 = 0;                           // /INT0中断标志位置 0
	EX0 = 0;					       //关中断
	                             
	j = TH0 *256 + TL0;
	//t = j/24500000.0;                //   高电平脉宽
	s = 360*50;
	s = s*j/1000.0;
	s = s/24500.0;                 
	EX0 = 1;					       //   开中断
	//TR0 = 1;
}

//-----------------------------------------------------------------------------
//  定时器0中断
//-----------------------------------------------------------------------------

void Timer0_ISR (void) interrupt 1
{
   TF0=0;                           

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?