?? freqtest.txt
字號:
// 頻率因數監測與補償實驗系統
// 電源頻率的測定
#include <c8051f330.h>
#include <stdio.h>
//-----------------------------------------------------------------------------
// 定義16位寄存器
//-----------------------------------------------------------------------------
sfr16 TMR2RL = 0xca; // 定時器2數據寄存器地址
sfr16 TMR2 = 0xCC; // 定時器2計數寄存器
//-----------------------------------------------------------------------------
//常量賦值
//-----------------------------------------------------------------------------
#define SYSCLK 24500000
//------------------------------------------------------------------------------------
// 定義函數
//------------------------------------------------------------------------------------
void SYSCLK_Init (void);
void PORT_Init (void);
void Timer0_Init ();
void Timer2_Init ();
void Timer0_ISR (void);
void Timer2_ISR (void);
//-----------------------------------------------------------------------------
// 定義全局變量
//-----------------------------------------------------------------------------
int k=0;
float fre=0;
//------------------------------------------------------------------------------------
// 主函數
//------------------------------------------------------------------------------------
void main (void)
{
PCA0MD &= ~0x40; // 關閉看門狗
SYSCLK_Init (); // 系統時鐘初始化
PORT_Init (); // I/O口初始化
Timer0_Init (); // 定時器0對計數脈沖進行計數
Timer2_Init (); // 定時器2計時1s
TR0 = 1;
EA=1;
while(1)
{
if(k==600)
{
TR0 = 0; // 計時達1s,計數器停止計時
fre = TH0*256+TL0; // 計數值即為頻率
}
}
}
//------------------------------------------------------------------------------------
// 端口初始化
//------------------------------------------------------------------------------------
//P0.1 為電源電壓輸入
void PORT_Init (void)
{
P0MDIN = 0xff; // P0 為數字輸入
P0MDOUT = 0x00; // P0 漏極開路
P0SKIP = 0x02; // P0.1 需要被交叉開關跳過
XBR1 = 0x50; // T0接到端口引腳 P0.1
}
//-----------------------------------------------------------------------------
// 系統時鐘初始化
//-----------------------------------------------------------------------------
void SYSCLK_Init (void)
{
OSCICN |= 0x83; // SYSCLK為24.5MHz
RSTSRC = 0x04;
}
//-----------------------------------------------------------------------------
// 定時器0初始化
//-----------------------------------------------------------------------------
void Timer0_Init ()
{
TMOD = 0x05; // 對 計數脈沖0 計數
TH0 = 0x00;
TL0 = 0x00;
ET0= 1;
//TR0=1;
}
//-----------------------------------------------------------------------------
// 定時器2初始化
//-----------------------------------------------------------------------------
void Timer2_Init ()
{
unsigned int counts;
TMR2CN = 0x00; // TR2 關閉 定時器2外部時鐘為系統時鐘/12
CKCON |= 0x10; // 高字節使用系統時鐘/12 , 低字節使用系統時鐘
counts = 40833; // 每次計時 20 ms
TMR2RL = -counts;
TMR2 = TMR2RL;
ET2= 1; // 中斷允許
TR2=1;
}
//-----------------------------------------------------------------------------
// 定時器2中斷
//-----------------------------------------------------------------------------
void Timer2_ISR (void) interrupt 5
{
TMR2CN &= ~0x80; // 定時器2高字節溢出位置 0
k = k+1;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -