📄 sig125_100hz.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 + -