[PIC®/AVR®/dsPIC®产品]

一个关于pic12f1822单片机pwm捕捉信号和中断的问题

[复制链接]
3173|5
手机看帖
扫描二维码
随时随地手机跟帖
DFH|  楼主 | 2015-7-29 20:13 | 显示全部楼层 |阅读模式

刚刚接触这类模块,感觉好吃力,弄了好久了  还是不知道哪里配置不对,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




JY-DX-JY| | 2015-7-30 13:12 | 显示全部楼层
感觉你没说清楚,你是在搞输入捕捉吗?是不是输入捕捉中断进不去?

使用特权

评论回复
DFH|  楼主 | 2015-7-30 15:27 | 显示全部楼层
恩 我想弄的是输入捕捉  也就是捕捉中断进不去   不知道是哪里配置出问题了  或者我弄的这个程序有大错误  :'(  是什么原因啊     万分感谢

使用特权

评论回复
fengrenjie| | 2017-9-19 09:54 | 显示全部楼层
刚刚我也在用PIC12F1822 ,他有两个配置字,楼主只配置了一个,另外一个我还不知道怎么配置

使用特权

评论回复
15614| | 2023-5-21 16:43 | 显示全部楼层
楼主最后怎么解决的啊,我也是输入捕捉进不去

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

DFH

7

主题

40

帖子

0

粉丝