?? t4cap.c
字號:
/////////t3 頻率方波輸//////////////
/////////t4捕捉測試程序///////////
/////////t4cap.c//////////////////////////
#include <C8051F040.h>
#define T3RUN temppage=SFRPAGE;SFRPAGE=0x01;TR3=1;SFRPAGE=temppage
#define T4RUN temppage=SFRPAGE;SFRPAGE=0x02;TR4=1;SFRPAGE=temppage
#define T4STOP temppage=SFRPAGE;SFRPAGE=0x02;TR4=0;SFRPAGE=temppage
#define T3STOP temppage=SFRPAGE;SFRPAGE=0x01;TR3=0;SFRPAGE=temppage
typedef unsigned int uint;
typedef unsigned char uchar;
typedef unsigned long ulong;
sfr16 RCAP2=0xca;
sfr16 RCAP3=0xca;
sfr16 RCAP4=0xca;
sfr16 TMR4=0xcc;
sfr16 TMR3=0xcc;
sfr16 TMR2=0xcc;
uchar temppage;
uchar tf4num;
bit isnewdata;
ulong freTime;
void delay1ms(uint time){//延遲1ms
uint i;
uint j;
for (i=0;i<time;i++){
for(j=0;j<300;j++);
}
}
void t3_fre_set(uint val){//T3頻率設(shè)置,計算公式為:(T3時鐘頻率/(2*val))
temppage=SFRPAGE;
SFRPAGE=0x01;
RCAP3=~val+1;
TMR3=RCAP3;
SFRPAGE=temppage;
}
void t3_ini(){//t3為頻率輸出模式
temppage=SFRPAGE;
SFRPAGE=0x01;
TMR3CN=0x08;//TR3=0,T3尚未啟動,EXEN4=1,T3EX生效
TMR3CF=0x0f;//T3采用系統(tǒng)時鐘,TOG3=1,T3不計數(shù)時輸出為1,DCEN=1,自減使能
SFRPAGE=temppage;
}
void t4_ini(){//T4為捕捉模式
temppage=SFRPAGE;
SFRPAGE=0x02;
TMR4CF=0X08;//T4采用系統(tǒng)時鐘,DCEN=0,向下計數(shù)禁止
TMR4CN=0X09;//T4為捕捉模式,且EXEN4=1,使得外部端口T4EX生效
SFRPAGE=0X00;
EIE2|=0X04;//T4中斷使能
SFRPAGE=temppage;
}
void config(){
//看門狗禁止
WDTCN = 0x07;
WDTCN = 0xDE;
WDTCN = 0xAD;
SFRPAGE = 0x0F;
//交叉開關(guān)配置,T3=P0.0,T3EX=P0.1,T4EX=P0.2,將T3EX接地,使T3自減計數(shù),T3與T4相連
XBR0 = 0x00;
XBR1 = 0x00;
XBR2 = 0x50;
XBR3 = 0x03;
//管腳輸出配置,P0口為開漏輸出,其中P0.0接上拉電阻,P0為數(shù)字輸入口
SFRPAGE = 0x0F;
P0MDOUT = 0x00;
P1MDIN = 0xFF;
//晶振配置,采用內(nèi)部晶振8分頻
SFRPAGE = 0x0F;
CLKSEL = 0x00;
OSCXCN = 0x00;
OSCICN = 0x84;
}
void main(void){
xdata ulong t3val[10];//存放捕捉值
xdata uint freset;
uchar t3index=0;
freset=32789;
config();
t3_ini();
t4_ini();
EA=1;
t3_fre_set(freset);
T3RUN;
delay1ms(1000);//延時1s,使T3波形輸出穩(wěn)定
isnewdata=0;
T4RUN;
while(1){
if(isnewdata){
t3val[t3index]=freTime;
t3index++;
if(t3index>9)
t3index=0;
isnewdata=0;
}
}
}
void t4ISR() interrupt 16 {//T4捕捉中斷處理
if(TF4){
TF4=0;
tf4num++;//記錄T4溢出次數(shù)
}
if(EXF4){
TMR4=0;
EXF4=0;
freTime=65536L*tf4num;
freTime+=RCAP4;
tf4num=0;
}
TF4=0;
isnewdata=1;
}
/*
void t4ISR() interrupt 16 {//T4捕捉中斷處理
bit isSameTime;
if(TF4){
TF4=0;
tf4num++;
isSameTime=1;
}
if(EXF4){
if(TMR4<RCAP4){
if(isSameTime)
tf4num--;
}
TMR4=TMR4-RCAP4;
EXF4=0;
freTime=65536L*tf4num;
freTime+=RCAP4+6;
tf4num=0;
}
TF4=0;
isnewdata=1;
isSameTime=0;
}*/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -