| 
 
| 刚刚接触这类模块,感觉好吃力,弄了好久了  还是不知道哪里配置不对,PWM模式那一块是成功的    但是中断就是进不去,LED灯那边就是没有信号到,我也不知道是不是PWM捕捉的配置弄错了,还是TIMER1的配置弄错了    求教,求指导:'(
 
 
 #include <htc.h>
 //配置芯片的功能
 //__CONFIG(0X3B71);
 #define WDTDIS 0x3FFB // 看门狗关闭
 #define PWRTDIS 0x3FFF // 上电延时定时器关闭
 #define BORDIS 0x3FBF // 低电压复位禁止
 #define RC 0x3FFF // RC振荡
 
 //定义某些功能端口
 #define LED                LATAbits.LATA0
 #define LED1        LATAbits.LATA1
 #define PWM_OUT LATAbits.LATA2
 #define PWM_IN  PORTAbits.RA4
 
 volatile unsigned char OutPwmCycle=0x9c,OutPwmDuty=0x06;//确定输出的PWM参数.(默认为脉宽100us,5Hz,1%).
 
 void pwd_out_init(unsigned char pwn_cycle,unsigned int pwm_duty);
 void pwm_in(void);
 void systeminit(void);
 void irt_init(void);
 void interrupt irt(void);
 
 int main(void)
 {
 //配置
 systeminit();
 //中断
 irt_init();
 //   pwd_out 持续输出;
 pwd_out_init(OutPwmCycle,OutPwmDuty);
 
 //主体功能
 while(1)
 {
 //pwm();
 //pwm_in();
 }
 return 0;
 }
 
 #if 1
 //  PIC12f1822 所有端口的配置方向
 void systeminit()
 {
 TRISAbits.TRISA0 = 0;        // RA0 = out led
 TRISAbits.TRISA1 = 0;        // RA1 = out 开关(负载)
 TRISAbits.TRISA2 = 0;        // RA2 = out 输出一个正弦波
 TRISAbits.TRISA3 = 0;        // RA3 = nc
 TRISAbits.TRISA4 = 1;        // RA4 = in  接受一个峰波
 TRISAbits.TRISA5 = 0;        // RA5 = nc
 LED =0;
 LED1= 0;
 }
 //开启中断的配置,初始化
 void irt_init()
 {
 GIE=1;       //开启总中断
 PEIE=1;      //外围中断允许
 TMR1IF=0;         //清零TMR1溢出中断标志位
 TMR1IE=1;         //开启TMR1溢出中断
 CCP1CON=0x05;            //设置CCP捕捉每个脉冲的上升沿
 T1CON=0x01;   //设置TMR1,以内部时钟并按1:1计时  //00000001
 TMR1H=0;                 //定时器清零
 TMR1L=0;
 CCP1IF=0;                //清除CCP1的中断标志,以免中断一打开就进入中
 CCP1IE=1;                //CCP中断允许
 /
 
 }
 
 //中断函数 处理的相对应的功能
 void interrupt irt(void)
 {
 if(CCP1IF&&CCP1IE)
 {
 CCP1IF=0;       //清除CCP中断标志位
 TMR1IF=0;         //清零TMR1溢出中断标志位
 LED1 = 1;
 LED = 1;                 //RA0输出高电平,灯亮,证明进入中断。
 TMR1H=0;                 //清定时器1重新定时
 TMR1L=0;
 }
 
 }
 #endif
 
 #if 1
 //配置PWD的首要端口 开关
 void pwd_out_init(unsigned char pwn_cycle,unsigned int pwm_duty)
 {
 //        RISIO2=1;                        //将GP2脚置为输入状态,来禁止PWM驱动电平输出.(爲了避免在設置PWM模塊時産生一個錯誤的驅動電平輸出).
 PR2=pwn_cycle;                //设置PWM周期.
 CCPR1L=(unsigned char)((pwm_duty>>2)&0x00ff);                        //設置PWM占空比.
 CCP1CON=(unsigned char)((pwm_duty<<4)&0x0030)|0x0c;                //bit5:bit4=pwm_duty<1:0>,CCP1设置为PWM方式.
 T2CON=0x07;                        //启动TMR2.(TMR2预分频比1:4).
 //        TRISIO2=0;                        //CCP1脚输出驱动电平.
 }
 #endif
 
 
 
 
 
 | 
 |