今天发现CCP开启PWM模式后,输出是固定的引脚,以PIC16F690为例,RC5为固定PWM输出脚。
/****************************************************************/
//开启CCP1 使用PWM RC5脚输出 20KHz 占空比为50% 的波形
//
//
/****************************************************************/
#include #include __CONFIG(WDTEN & PWRTEN & MCLREN & BOREN & IESODIS & FCMDIS & INTIO); //-------------中断服务程序------------------------------------ void interrupt isr() { if(TMR2IE==1&&TMR2IF==1) { TMR2IF=0; } } void SpwmInit() { OSCCON=0x7f; TRISC5=1; PR2=0x63; CCP1CON=0b00001111; CCPR1L= 0b00110010; TMR2IF=0; T2CON=0; GIE=0; TMR2IE=1; PEIE=1; TMR2ON=1; } main() { SpwmInit(); TRISC5=0; while(1) { } } /* PWM周期 = [(PR2) + 1] * 4 * TOSC *(TMR2预分频值) 注: TOSC = 1/FOSC 脉冲宽度= (CCPR1L:CCP1CON<5:4>) * TOSC * (TMR2预分频值) 占空比= (CCPR1L:CCP1CON<5:4>)/4(PR2 + 1) 分辨率= log[4(PR2 + 1)]/log(2)位 ------------ PWM 频率 1.22 kHz 4.90 kHz 19.61 kHz 76.92 kHz 153.85 kHz 200.0 kHz 定时器预分频值(1、4和16) 16 4 1 1 1 1 PR2 值 0x65 0x65 0x65 0x19 0x0C 0x09 最大分辨率(位) 8 8 8 6 5 5 OSCCON=0x7f; //8MHZ PR2= 0x63 =99 PWM周期 = 50us = (99+1)* 4 * TOSC *(TMR2预分频值) = 400* 1/8MHZ = 50 (CCPR1L:CCP1CON<5:4>) =(0b00110010 :0b00001111)= 0b0011001000 = 200 //CCP1CON<5:4> 取5,4位 =00 即 0b00“00”1111 脉冲宽度 = (CCPR1L:CCP1CON<5:4>) * TOSC * (TMR2预分频值) =(0b00110010 :0b00001111)* 1/8 = 200 * 1/8=25us 占空比= 50% = (CCPR1L:CCP1CON<5:4>)/4(PR2 + 1) = 200 /4* (99+1) =200/400 = 1/2 分辨率= 8= log[4(PR2 + 1)]/log(2) = log(400)/log(2) */
上一篇:PIC16F + PICC9.50 学习笔记(二)
下一篇:PIC之休眠问题
推荐阅读最新更新时间:2024-11-12 16:49
设计资源 培训 开发板 精华推荐
- 使用 NKK Switches 的 74HC164 的参考设计
- LTC2656BUFD-H16 八通道、16 位数模转换器的典型应用
- LT6654BMPS6-5、16 位 ADC 电压基准的典型应用
- LTM4632EY 2 模块并联、3.6V 至 15V 输入、1.2V/6A VDDQ、0.6V/±6A VTT 和 10mA VTTR 设计的典型应用电路
- 可调光控开关
- M8030_GPS模块30孔
- AM1/4S-1215SZ 15V 0.25 瓦 DC/DC 转换器的典型应用
- PCB名片
- NTAG I²C plus Flex Kit containing additional flex antennas
- LTC1479CG 3A 双路锂离子电池电源管理系统的典型应用电路