电阻器调节占空比

  • 格式:doc
  • 大小:24.00 KB
  • 文档页数:2

下载文档原格式

  / 2
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ANSELbits.ANS3=1; //设置模拟输入
ADCON0bits.GO_DONE=1; //A/D转换启动
}
voidpwm_init(void)
{
CCPR2L=ADRESL;
CCP2CON=0x0C;
CCP2CON|=((ADRESH<<4)&0x30);
INTCON=0x00;
PR2=0xFF;
ADCON1 = 0x00; //选择VDD和地作为参考电压源,且把RA3口设置为模拟量输入方式
ADCON2 = 0x8D; //转换结果右对齐,在工作状态,且使AD转换时钟为16tosc
PIE1 = 0x00;
PIE2 = 0x00;
PIE1bits.ADIE = 0; //A/D转换中断禁止
INTCONbits.PEIE= 0; //外围中断禁止
T2CON=0x06; //设置预分频比为16
TRISCbits.TRISC1=0; //设置CCP2引脚为输出方式
}
void main(void)
{
while(1)
{
adinit();
pwm_iniLeabharlann Baidu();
}
}
呵呵,最后解决了,把主函数写成这个样子就好了:
void main(void)
{
pwm_init();
程序如下:
include <p18cxxx.h>
#pragmaconfigFOSC = HS
#pragmaconfigPWRT = OFF
#pragmaconfigWDTEN = OFF
voidadinit(void)
{
TRISAbits.TRISA3=1; //设置RA3为输入方式
ADCON0 = 0x0F; //选择A/D通道为RA3,打开A/D转换器
adinit();
while(1)
{
CCPR2L=ADRESL;
CCP2CON|=((ADRESH<<4)&0x30);
ADCON0bits.GO_DONE=1; //A/D转换启动
}
}
具体问题如下:我想实现用电阻器调节占空比,频率不变(需求的频率是1000Hz,用的是外部晶振16M, PR2设为255,TMER2预分频值设为16,这样算下来频率应该是976Hz),但是烧进程序后,用示波器测,调节占空比成功,但是发现方波的频率是892Hz(不变的),这是为什么呢?PR2和TMER2预分频值我都没有改。