打印

12F615在proteus里没输出什么情况

[复制链接]
1868|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
socareyou|  楼主 | 2013-9-10 17:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很简单的PWM输出(就是外面那个把配置位改了),proteus里VDD,VSS已经默认了,直接测的PWM输出引脚,没有外部电路了,但是没有信号啊。程序应该没问题...
#include <pic.h>
__CONFIG(0x3FE5);
main()
{  
       CCP1CON=0;
       TMR2=0;
       PR2=0X31;
       CCPR1L=0X1F;
       INTCON=0;
       TRISIO=0X00;
        PIE1=0;
        PIR1=0;
        CCP1CON=0X2C;
        TMR2ON=1;
        while(1)
    {
         while(TMR2IF==1)
             {
                   TMR2IF=0;
             }
     }
}

沙发
opal11| | 2013-9-10 22:53 | 只看该作者
给一个测试过的PWM 程序:
#include<pic.h>
#define uint unsigned int
#define uchar unsigned char
__CONFIG(0x0004);                        //WDT关 & MCRL用作IO & CP开 & 内部4M & BOD & 上电延时开
#define out    RC5                        //pwm输出
#define sw1    RA0

/*** pwm初始化 ***/
void pwm_init()
{
        T2CON =         0b00000101;                //TMR2时钟4分频
//        CCP1CON =         0b00001100;                //单输出       P1A被调制&PWM占空比低2位&高电平有效
        CCP1CON =         0b10001100;                //半桥输出;    P1A和P1B被调制&PWM占空比低2位&高电平有效
//        CCP1CON =         0b01001100;                //全桥正向输出;P1A有效和P1D被调制&PWM占空比低2位&高电平有效
//        CCP1CON =         0b11001100;                //全桥反向输出;P1C有效和P1B被调制&PWM占空比低2位&高电平有效
        PWM1CON =         0b01100100;                //死区时间(半桥输出有效) = 4 * TOSC * (PWM1CON<6:0>) 100us
        ECCPAS =         0b00000000;                //ECCP 输出正常工作&禁止自动关闭& 关闭时为低电平
        CCPR1L =         0b11001000;                //PWM脉宽=CCPR1L:CCPR1CON(5:4)×Tosc×(TMR2预分频值)
        PR2=249;                                        //PWM周期=(PR2+1)×4Tosc×(TMR2预分频值) (249+1)*1us*4分频=1000us
       
}
/*** IO初始化 ***/
void sys_init()
{
        TRISA  = 0x01;                                //RA0输入
        ANSEL = 0x00;                                //RA为数字IO
        OPTION_REG &= 0x7f;                        //PORTA上拉使能
        WPUA = 0x01;                                //RA0上拉
        PORTA = 0x00;                                //PORTA输出电平

        TRISC  = 0x00;                                //RC输出
//        ANSEL = 0x20;                                //RC0为数字IO
        PORTC = 0x00;                                //PORTC输出电平

}
/*** 主函数 ***/
main()
{                                                                                                    
        sys_init();
        pwm_init();
        while(1)
        {
                if(!sw1)         ECCPASE = 1;        //关闭PWM
                else                 ECCPASE = 0;        //打开PWM
        }
}       

使用特权

评论回复
板凳
NE5532| | 2013-9-11 08:41 | 只看该作者
PWM输出需要清中断标志?楼主需要重新看数据手册里PWM相关章节。

另外,楼主别仿真了,用实物吧,仿真害死人啊。

使用特权

评论回复
地板
Rain_King| | 2013-9-15 19:11 | 只看该作者
为这个PWM程序标记一下........即将用到.....

使用特权

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

本版积分规则

2

主题

6

帖子

1

粉丝