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

📄 sig125_100hz.c

📁 C语言代码
💻 C
字号:


/* 
		1、	3路120度相位差的信号,125Hz,高电平4.5ms,低电平3.5ms;
		2、	3路120度相位差的信号,100Hz,高电平6ms,低电平4ms;
		3、	CPU引脚RC2、RC3、RC4
		
	cpu -> 16f73
	osc @ 8MHz
*/


#include <pic.h>
__CONFIG(HS & WDTDIS & PWRTEN & BORDIS & PROTECT);



//***********************************************************
//pin diagram :
#define		sig0				RC2
#define		sig1				RC3
#define		sig2				RC4



//***********************************************************
//macro :
//proid_tmr2 = 100us,

//125Hz, high level 4.5ms, low level 3.5ms;
#define		Freq				125
#define		Duty				57
	//100Hz, high level 6ms, low level 4ms;
	//#define		Freq				100
	//#define		Duty				60
#define		proid_tmr2			100
#define		ticks				(1000000 / proid_tmr2)
#define		Period				(ticks / Freq)
#define		PulseWidth			(Period * Duty / 100)
#define		IdleWidth			(Period - PulseWidth)
#define		deltaPhase			(Period / 3)		



//***********************************************************
//variable :
unsigned char cnt[3];
unsigned char oBuf;					//output buffer



//***********************************************************
//function:
void ini(void)
{
unsigned int i,j;

	PORTC	= 0;					//portc is output
	TRISC	= 0;
	
	for (i=200;i;i--) {				//delay 1s
		for (j=1000;j;j--) {;}
	}
	
	T2CON	= 0b00000000;			//prescale=1:1;
	PR2		= 199;					//0.1ms
	TMR2	= 0;
	TMR2IF	= 0;
	TMR2IE	= 1;
	PEIE	= 1;
	GIE		= 1;

	oBuf	= 0;
	cnt[0]	= PulseWidth;
	cnt[2]	= Period - deltaPhase;
	cnt[1]	= cnt[2] - deltaPhase;
}

void interrupt isr(void)
{
unsigned char i,j;

	if (TMR2IF) {
		j = 0b00010000;
		for (i=3;i;i--) {
			if (! --cnt[i-1]) {
				oBuf ^= j;
				cnt[i-1] = (oBuf&j) ? PulseWidth : IdleWidth;
			}
			j >>= 1;
		}
		PORTC = oBuf;
		TMR2IF = 0;
	}
}

void main(void)
{
	ini();
	oBuf = 0b00000100;
	PORTC = oBuf;
	TMR2ON = 1;
	
	while (1) {;}
}




⌨️ 快捷键说明

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