打印
[DemoCode下载]

N76E003通过PWM触发ADC采样

[复制链接]
2896|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yiy|  楼主 | 2017-11-9 21:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2016 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

//***********************************************************************************************************
//  Nuvoton Technoledge Corp.
//  Website: http://www.nuvoton.com
//  E-Mail : MicroC-8bit@nuvoton.com
//  Date   : Apr/21/2016
//***********************************************************************************************************

//***********************************************************************************************************
//  File Function: N76E003 ADC demo code
//***********************************************************************************************************

#include "N76E003.h"
#include "SFR_Macro.h"
#include "Function_define.h"
#include "Common.h"
#include "Delay.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|=0x0F;ADCCON1|=SET_BIT0                                                                                                                                                                                                                                                                //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 PWM0_CENTRAL_TRIG_ADC                                ADCCON0&=~SET_BIT5;ADCCON0&=~SET_BIT4;ADCCON1|=SET_BIT3;ADCCON1&=~SET_BIT2;ADCCON1|=SET_BIT1
//#define PWM2_CENTRAL_TRIG_ADC                                ADCCON0&=~SET_BIT5;ADCCON0|=SET_BIT4;ADCCON1|=SET_BIT3;ADCCON1&=~SET_BIT2;ADCCON1|=SET_BIT1
//#define PWM4_CENTRAL_TRIG_ADC                                ADCCON0|=SET_BIT5;ADCCON0&=~SET_BIT4;ADCCON1|=SET_BIT3;ADCCON1&=~SET_BIT2;ADCCON1|=SET_BIT1
//#define PWM0_END_TRIG_ADC                                                ADCCON0&=~SET_BIT5;ADCCON0&=~SET_BIT4;ADCCON1|=SET_BIT3;ADCCON1|=SET_BIT2;ADCCON1|=SET_BIT1
//#define PWM2_END_TRIG_ADC                                                ADCCON0&=~SET_BIT5;ADCCON0|=SET_BIT4;ADCCON1|=SET_BIT3;ADCCON1|=SET_BIT2;ADCCON1|=SET_BIT1
//#define PWM4_END_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

/******************************************************************************
* FUNCTION_PURPOSE: ADC interrupt Service Routine
******************************************************************************/
void ADC_ISR (void) interrupt 11
{
    clr_ADCF;                               // Clear ADC interrupt flag
                printf ("\n Value = 0x%bx",ADCRH);                // printf display will cause delay in ADC interrupt
                P30 ^= 1;                                                                                                                                // Check the P3.0 toggle at falling edge of PWM
}

/******************************************************************************
The main C function.  Program execution starts
here after stack initialization.
******************************************************************************/
void main (void)
{
    Set_All_GPIO_Quasi_Mode;
                InitialUART0_Timer1(9600);
       
/*-------------------------------------------------
        ADC trig initial setting
        Please modify #if value to open diffent type
--------------------------------------------------*/
#if 1
// By PWM falling edge
                PWM0_P12_OUTPUT_ENABLE;                               
                Enable_ADC_AIN0;                                                                                                                // Enable AIN0 P1.7 as ADC input
                PWM0_FALLINGEDGE_TRIG_ADC;       
#endif               
#if 0
// By PWM rising edge
                PWM0_P12_OUTPUT_ENABLE;                               
                Enable_ADC_AIN0;                                                                                                                // Enable AIN0 P1.7 as ADC input
                PWM0_RISINGEDGE_TRIG_ADC;
#endif               
#if 0
// By PWM central point
                PWM0_P12_OUTPUT_ENABLE;                               
                Enable_ADC_AIN0;                                                                                                                // Enable AIN0 P1.7 as ADC input
                PWM_CENTER_TYPE;
                PWM0_CENTRAL_TRIG_ADC;       
#endif       
#if 0
// By PWM end point
                PWM0_P12_OUTPUT_ENABLE;                               
                Enable_ADC_AIN0;                                                                                                                // Enable AIN0 P1.7 as ADC input
                PWM_CENTER_TYPE;
                PWM0_END_TRIG_ADC;
#endif       
       
// Setting PWM value
                PWMPH = 0x07;                                                                                                                                //Setting PWM value         
    PWMPL = 0xFF;
    PWM0H = 0x02;
    PWM0L = 0xFF;
          set_LOAD;                                                                                                                                                // PWM run
    set_PWMRUN;
// Setting ADC
          set_EADC;                                                                                                                                                // Enable ADC interrupt (if use interrupt)
                EA = 1;       
                while(1);

}




沙发
yiy|  楼主 | 2017-11-9 21:27 | 只看该作者
之前是不是有朋友要这个例子的?现在有了,拿去不谢。

使用特权

评论回复
板凳
jiekou001| | 2017-11-9 22:27 | 只看该作者
是不是也可以颠倒一下,通过ADC的值设置PWM的占空比

使用特权

评论回复
地板
jiekou001| | 2017-11-9 22:27 | 只看该作者
这样可以通过一个电位器旋钮调整PWM。

使用特权

评论回复
5
zl1211| | 2018-1-24 14:00 | 只看该作者
请问如果我想用串口将采集到的电压值输出该怎样改

使用特权

评论回复
6
smilefenfen| | 2018-4-18 10:14 | 只看该作者
ADCCON1&=~SET_BIT6;
这是什么意思,谁能给解答一下

使用特权

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

本版积分规则

yiy

106

主题

1781

帖子

4

粉丝