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

📄 t4cap.c

📁 Cygnal公司的著名产品C8051f系列单片机
💻 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频率设置,计算公式为:(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采用系统时钟,TOG3=1,T3不计数时输出为1,DCEN=1,自减使能
	SFRPAGE=temppage;
}
void t4_ini(){//T4为捕捉模式
	temppage=SFRPAGE;
	SFRPAGE=0x02;
	TMR4CF=0X08;//T4采用系统时钟,DCEN=0,向下计数禁止
	TMR4CN=0X09;//T4为捕捉模式,且EXEN4=1,使得外部端口T4EX生效
	SFRPAGE=0X00;
	EIE2|=0X04;//T4中断使能
	SFRPAGE=temppage;
}
void config(){
//看门狗禁止
	WDTCN = 0x07;	
    WDTCN = 0xDE;   
   	WDTCN = 0xAD;
	SFRPAGE = 0x0F;
//交叉开关配置,T3=P0.0,T3EX=P0.1,T4EX=P0.2,将T3EX接地,使T3自减计数,T3与T4相连
	XBR0 = 0x00;	
	XBR1 = 0x00;	
	XBR2 = 0x50;
 	XBR3 = 0x03;   
//管脚输出配置,P0口为开漏输出,其中P0.0接上拉电阻,P0为数字输入口
 	SFRPAGE = 0x0F;
 	P0MDOUT = 0x00; 
 	P1MDIN = 0xFF;  
//晶振配置,采用内部晶振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波形输出稳定
	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溢出次数
	}
	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;
}*/

	

		


⌨️ 快捷键说明

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