测相位差.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 + -
显示快捷键?