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

📄 pwm.c

📁 很有用的CYGNAL C语言程序,
💻 C
字号:
/********************************************************************************
**
**	文		件:PWM.C
**	功		能:用于直流电机PWM调速
**	I  /  O   :PWM输出CEX0:P0.2
*********************************************************************************/
#include<c8051f020.h>
sbit		k1=P0^3;
sbit		k2=P0^4;
sbit		k4=P1^4;
sbit		k5=P1^5;
sbit		k6=P1^6;
sbit		k7=P1^7;
void clock(void);
void pwms(void);
void xbrs(void);
void tint(void);
void setoff(void);
void delay(long int);
void senddata(unsigned char,unsigned char);
unsigned char f=0,f1;
unsigned char i=1;
unsigned long int c=0,c1,c2,c3,c4,c5;
unsigned int a[10];
unsigned long int s=0;
unsigned int m=0;
unsigned char n;
/*************************************************************************
void int0(void)	interrupt 0
{	//外部中断0
`	//T0为脉宽测量用
	s=TH0*256;
	s=s+TL0;
	TH0=0x00;
	TL0=0x00;
	c5=s/10000;
	c4=s%10000/1000;
	c3=s%1000/100;
	c2=s%100/10;
	c1=s%10;
	senddata(1,c1);
	senddata(2,c2);
	senddata(3,c3);
	senddata(4,c4);
	senddata(5,c5);
}
/*******************************16位PWM匹配中断********************************/
void pwmint(void)interrupt 9
{
	f++;
	if(f>14)
	{
		m=PCA0CPH0*256;
		m=m+PCA0CPL0;
		if(f1==0)
		{
		if(m<65000)
			m=m+1000;
		else
			m=65535;
		}
		if(f1>0)
		{
		if(m>20000)
			m=m-1000;
		else if(m>4000)
			m=m-100;
		else 
			m=0;
		}
		c=m;
		n=m/256;
		m=m-(n*256);
		PCA0CPL0=m;
		PCA0CPH0=n;
		c=c*1000/65536;
		f=0;
	}
	senddata(1,c%10);
	senddata(2,(0x80+c%100/10));
	senddata(3,c%1000/100);
	CCF0=0;
}	
/*********************************定时器1中断**********************************
void t1int(void)interrupt 3
{
	i++;
	if(i>19)
	{
		f=1;
		i=1;
	senddata(1,1);
	senddata(2,2);
	senddata(3,3);
	senddata(4,4);
	senddata(5,5);
	}
	TH1=0x3C;
	TL1=0xB0;	
}		
/*********************************   MAIN()	*************************************/
main()
{
	clock();
	tint();
	xbrs();
	setoff();
	pwms();
	CR=1;
	f1=0;
//	TR1=1;
	TH0=0x00;
	TL0=0x00;
	TCON=0x11;
	TMOD=0x09;
	k1=0;k2=1;
	while(1)
	{
	while(k4);
	f1=1;
	while(k5);
	k1=1;k2=0;
	while(k6);
	f1=0;
	k1=0;k2=0;
	}
}
/*********************************CLOCK SET**************************************/
void clock(void)			//clock det
{
	unsigned char e;
	WDTCN=0xde;				//CLOSE WDOG
	WDTCN=0xad;
	OSCXCN=0x67;			//ENABLE EXTERNAL CLK
	delay(10000);
    delay(10000);
	e=!OSCXCN&0x80;
	while(e); 
    OSCICN|=0x08;
}
/*********************************PWM SET**************************************/
void pwms(void)				//enable ecf ccf0,16pwm
{
	PCA0CN=0x00;		
	PCA0MD=0x00;			//SYSTEM CLOCK 1/12
	PCA0CPL0=0xb0;
	PCA0CPH0=0x3c;
	PCA0CPM0=0xCB;			//ENABLE CCF0 INT
}
/*********************************XBR SET**************************************/
void xbrs(void)				//ENABLE XBR,CEX0,INT0
{
	XBR2=0x40;
	XBR1=0x00;
	XBR0=0x0c;
	P0MDOUT=0xFF;
	P1MDOUT=0xFF;
}
/**********************************INT T1*************************************/
void tint(void)				//ENABLE EA,EX0,TR0,GATE0,T0 METHOD 1
{
	EA=1;
/*	EX0=1;
	PX0=0;
	ET1=1;
	PT1=1;	*/
	EIE1|=0x08;	
	EIP1|=0x08;			//pwm16 pipei int
}

⌨️ 快捷键说明

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