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

📄 2006222212418.c

📁 c8051f120电机PCA0测速及PWM调速.rar一个比较有趣的程序,PWM技术很时髦.
💻 C
字号:
#include<c8051f120.h>
#define uint unsigned int
#define uchar unsigned char
uchar num1 = 0;
xdata uint pcacap2[10];
xdata uchar dutycycle;
//float A=10,B=0.04,C=5;
//float xdata e0=0,e1=0,e2=0;
//float xdata pwm=0;
bit isnewdata;
bit DIRECTON;
#define POSITIVE DIRECTON = 1
#define NEGATIVE DIRECTON = 0

void Oscillator_Init()
{
    SFRPAGE   = CONFIG_PAGE;
    OSCICN    = 0x83;
}

void Port_IO_Init()
{
    SFRPAGE   = 0x0F;
    XBR0      = 0xF7;
    XBR2      = 0x40;
}

void PCA_Init()
{
    SFRPAGE=0x00;
    PCA0CPM0=0x02;
    PCA0CPM1=0x02;
	PCA0CPM2=0x21;
 	PCA0CPL2=0x00;    
 	PCA0CPH2=0x00;
	PCA0MD=0x00;
	PCA0CN=0x40;
	EIE1|=0x08;
}

void PWM_set(uchar low)
{//占空比设置,高电平占空比为(256-low)/256
	SFRPAGE = PCA0_PAGE;
	if (DIRECTON == 1) {PCA0CPH0 = low;PCA0CPM1 = 0x02;PCA0CPM0 = 0x42;}
	else               {PCA0CPH1 = low;PCA0CPM0 = 0x02;PCA0CPM1 = 0x42;}
}

void PCA_ISR(void) interrupt 9 using 1 {
    static xdata uint tmpcnt=0;
	static xdata uint PCA0CP2=0;
	xdata uint tmpcnt2;
    if(CCF2){
		tmpcnt2 = PCA0CPH2;
		tmpcnt2 = tmpcnt2<<8;
		PCA0CP2 = tmpcnt2 + PCA0CPL2;
		pcacap2[num1]=PCA0CP2-tmpcnt;
		tmpcnt = PCA0CP2;
		num1++;
		CCF2=0;
	}
	isnewdata=1;
  }

/*PID_SC(uint speed)
{
e0 = v - v_set;
e1 = v1 - v_set;
e2 = v2 - v_set;
v2 = v1;
v1 = v;
Uk_z = A*(e0 - e1) + B*e0 + C*(e0 - 2*e1 + e2);
Uk0 = Uk1 + Uk_z;
Uk1 = Uk0;
PWM = (int)(Uk0);
if(PWM>256)
	DutyCycle=256;
 if(pwm<1||(setT<AD_result))
	DutyCycle=1;
}*/

void main()
{
//Oscillator_Init();
WDTCN = 0x07;
WDTCN = 0xDE;
WDTCN = 0xAD;
Port_IO_Init();
EA=1;
num1=0;
isnewdata=0;
PCA_Init();
dutycycle = 200;
POSITIVE;
PWM_set(dutycycle);
while(1)
     {
		if(isnewdata)
		   {
			isnewdata=0;
			if(num1>=10)
				num1=0;
		   }
	 }
}

⌨️ 快捷键说明

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