搜索
bottom↓
回复: 0

请教:新塘N76E003 PWM无法设置成推挽输出

[复制链接]

出55入0汤圆

发表于 2019-10-4 22:53:17 | 显示全部楼层 |阅读模式
本帖最后由 mo812 于 2019-10-4 22:56 编辑

我这边使用新塘N76E003 的单片机设计产品,PWM设置成推挽输出模式时,无法输出PWM波形。
原理图如下:

程序如下:
#include <stdio.h>
#include "N76E003.h"
#include "Define.h"
#include "Common.h"
#include "Delay.h"
#include "SFR_Macro.h"
#include "Function_define.h"


//*****************  The Following is in define in Fucntion_define.h  ***************************
//****** Always include Function_define.h call the define you want, detail see main(void) *******
//***********************************************************************************************
#if 0
//#define Enable_ADC_AIN0                        ADCCON0&=0xF0;P17_Input_Mode;AINDIDS=0x00;AINDIDS|=SET_BIT0;ADCCON1|=SET_BIT0                                                                        //P17
//#define Enable_ADC_AIN1                        ADCCON0&=0xF0;ADCCON0|=0x01;P30_Input_Mode;AINDIDS=0x00;AINDIDS|=SET_BIT1;ADCCON1|=SET_BIT0                //P30
//#define Enable_ADC_AIN2                        ADCCON0&=0xF0;ADCCON0|=0x02;P07_Input_Mode;AINDIDS=0x00;AINDIDS|=SET_BIT2;ADCCON1|=SET_BIT0                //P07
//#define Enable_ADC_AIN3                        ADCCON0&=0xF0;ADCCON0|=0x03;P06_Input_Mode;AINDIDS=0x00;AINDIDS|=SET_BIT3;ADCCON1|=SET_BIT0                //P06
//#define Enable_ADC_AIN4                        ADCCON0&=0xF0;ADCCON0|=0x04;P05_Input_Mode;AINDIDS=0x00;AINDIDS|=SET_BIT4;ADCCON1|=SET_BIT0                //P05
//#define Enable_ADC_AIN5                        ADCCON0&=0xF0;ADCCON0|=0x05;P04_Input_Mode;AINDIDS=0x00;AINDIDS|=SET_BIT5;ADCCON1|=SET_BIT0                //P04
//#define Enable_ADC_AIN6                        ADCCON0&=0xF0;ADCCON0|=0x06;P03_Input_Mode;AINDIDS=0x00;AINDIDS|=SET_BIT6;ADCCON1|=SET_BIT0                //P03
//#define Enable_ADC_AIN7                        ADCCON0&=0xF0;ADCCON0|=0x07;P11_Input_Mode;AINDIDS=0x00;AINDIDS|=SET_BIT7;ADCCON1|=SET_BIT0                //P11
//#define Enable_ADC_BandGap        ADCCON0|=SET_BIT3;ADCCON0&=0xF8;                                                                                                                                                                                                                                                        //Band-gap 1.22V

//#define PWM0_FALLINGEDGE_TRIG_ADC                ADCCON0&=~SET_BIT5;ADCCON0&=~SET_BIT4;ADCCON1&=~SET_BIT3;ADCCON1&=~SET_BIT2;ADCCON1|=SET_BIT1
//#define PWM2_FALLINGEDGE_TRIG_ADC                ADCCON0&=~SET_BIT5;ADCCON0|=SET_BIT4;ADCCON1&=~SET_BIT3;ADCCON1&=~SET_BIT2;ADCCON1|=SET_BIT1
//#define PWM4_FALLINGEDGE_TRIG_ADC                ADCCON0|=SET_BIT5;ADCCON0&=~SET_BIT4;ADCCON1&=~SET_BIT3;ADCCON1&=~SET_BIT2;ADCCON1|=SET_BIT1
//#define PWM0_RISINGEDGE_TRIG_ADC                ADCCON0&=~SET_BIT5;ADCCON0&=~SET_BIT4;ADCCON1&=~SET_BIT3;ADCCON1|=SET_BIT2;ADCCON1|=SET_BIT1
//#define PWM2_RISINGEDGE_TRIG_ADC                ADCCON0&=~SET_BIT5;ADCCON0|=SET_BIT4;ADCCON1&=~SET_BIT3;ADCCON1|=SET_BIT2;ADCCON1|=SET_BIT1
//#define PWM4_RISINGEDGE_TRIG_ADC                ADCCON0|=SET_BIT5;ADCCON0&=~SET_BIT4;ADCCON1&=~SET_BIT3;ADCCON1|=SET_BIT2;ADCCON1|=SET_BIT1

//#define P04_FALLINGEDGE_TRIG_ADC                ADCCON0|=0x30;ADCCON1&=0xF3;ADCCON1|=SET_BIT1;ADCCON1&=~SET_BIT6
//#define P13_FALLINGEDGE_TRIG_ADC                ADCCON0|=0x30;ADCCON1&=0xF3;ADCCON1|=SET_BIT1;ADCCON1|=SET_BIT6
//#define P04_RISINGEDGE_TRIG_ADC                        ADCCON0|=0x30;ADCCON1&=~SET_BIT3;ADCCON1|=SET_BIT2;ADCCON1|=SET_BIT1;ADCCON1&=~SET_BIT6
//#define P13_RISINGEDGE_TRIG_ADC                        ADCCON0|=0x30;ADCCON1&=~SET_BIT3;ADCCON1|=SET_BIT2;ADCCON1|=SET_BIT1;ADCCON1|=SET_BIT6
#endif

//#define unsigned char uint8_t;
//#define unsigned int  uint16_t;
//#define unsigned long uint32_t;

void Led_Mode(UINT8 led_modes);

/************************************************************************************************************
*   PWM interrupt subroutine
************************************************************************************************************/
void PWM_ISR (void) interrupt 13
{
    clr_PWMF;               // clear PWM interrupt flag
    //P12 = ~P12;                                                        // GPIO1 show PWM INT
}

void main(void)
{
                //P11_OpenDrain_Mode;
        //Set_All_GPIO_Quasi_Mode;
        //P01_Quasi_Mode;
        //P05_Quasi_Mode;
        P01_PushPull_Mode;
        P05_PushPull_Mode;
        P11_PushPull_Mode;        //LEDG_A P11推挽输出
        P12_PushPull_Mode;        //LEDR_A P12推挽输出
        P13_PushPull_Mode;        //LEDG_B P13推挽输出
        P14_PushPull_Mode;        //LEDR_B P14推挽输出

        PWM0_P12_OUTPUT_DISABLE;
        PWM2_P05_OUTPUT_ENABLE; //使能PWM2 通过P05引脚输出
        PWM4_P01_OUTPUT_ENABLE;        //使能PWM4 通过P01引脚输出
        PWM5_P03_OUTPUT_DISABLE;

        PWM_INT_PWM2;
        PWM_INT_PWM4;       
        PWM_FALLING_INT;                                        //Setting Interrupt happen when PWM0 falling signal
       
        set_PWMTYP;
        clr_PWMMOD0;
        clr_PWMMOD1;

        PWM_CLOCK_DIV_8;
        PWMPH = 0x07;
        PWMPL = 0xCF;

        PWM2H = 0x03;                                               
        PWM2L = 0xE8;
       
        set_SFRPAGE;                                                //PWM4 and PWM5 duty seting is in SFP page 1
        PWM4H = 0x03;                                               
        PWM4L = 0xE8;
        clr_SFRPAGE;


        LEDG_A_OFF;
        LEDG_B_OFF;
        LEDR_A_OFF;
        LEDR_B_OFF;

        set_EPWM;                                                                        //Enable PWM interrupt
        set_EA;       
        set_LOAD;
    set_PWMRUN;
        while(1)
        {
               
                UINT8 i;       
                for(i=0;i<4;i++)
                {
                  //set_EPWM;                                                                        //Enable PWM interrupt
                  //set_EA;       
                  //set_LOAD;
              //set_PWMRUN;
                  Led_Mode(i);
                  Timer0_Delay1ms(2000);
                }
        }               
}

void Led_Mode(UINT8 led_modes)
{
        switch (led_modes)
        {
        case 0:
                LEDG_A_ON;
                LEDG_B_ON;
                LEDR_A_OFF;
                LEDR_B_OFF;
                break;
        case 1:
                LEDG_A_ON;
                LEDR_B_ON;
                LEDR_A_OFF;
                  LEDG_B_OFF;
                break;
        case 2:
                LEDR_A_ON;
                LEDG_B_ON;
                LEDG_A_OFF;
                LEDR_B_OFF;
                break;
        case 3:
                LEDR_A_ON;
                LEDR_B_ON;               
                LEDG_A_OFF;
                LEDG_B_OFF;
                break;
        default:
                break;
        }
}

补充原理图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 13:13

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表