📄 epwm.c
字号:
#include <pic18.h>
#include <stdio.h>
void get_dutycycle(void);
void get_period(void);
void update_pwm(void);
extern void putch(unsigned char);
unsigned int DUTYCYCLE=0x0080;
unsigned char PERIOD=0xFF;
void get_dutycycle(void)
{
ADFM=1; /* need 10 bit result, right justify */
ADCON0=0xC9; /* select the channel of the duty cycle input pot */
GODONE=1;
while(!ADIF)continue;
ADIF=0;
DUTYCYCLE=ADRES; /*right justified 10 bit result */
}
void get_period(void)
{
ADFM=0; /* period is an 8 bit value, left justify to get result from ADRESH */
ADCON0=0xC1; /* select the channel of the period input pot */
GODONE=1; /* start A2D */
while(!ADIF)continue;
ADIF=0;
PERIOD=ADRESH; /* Return 8 most signifigant bits of result */
}
void update_pwm(void)
{
unsigned int percentage;
static unsigned int old_percentage;
get_period();
get_dutycycle();
/* update the PWM period SFR */
PR2=PERIOD;
/* update the PWM duty cycle SFRs */
EDC1B0=(bit)DUTYCYCLE;
EDC1B1=(bit)(DUTYCYCLE>>1);
ECCPR1L=(DUTYCYCLE>>2);
/* update results */
if (PERIOD==0) percentage=0xFFFF;
else percentage=(DUTYCYCLE*100/PERIOD);
if (percentage!=old_percentage)
printf("\rPeriod: %X, Duty: %X \r",PERIOD,DUTYCYCLE);
old_percentage=percentage;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -