/*---------------------------------------------------------------------------------------------------------*/ /* */ /* Copyright(c) 2015 Nuvoton Technology Corp. All rights reserved. */ /* */ /*---------------------------------------------------------------------------------------------------------*/ //*********************************************************************************************************** // Nuvoton Technoledge Corp. // Website: http://www.nuvoton.com // E-Mail : MicroC-8bit@nuvoton.com // Date : Sep/1/2015 //*********************************************************************************************************** //*********************************************************************************************************** // File Function: N76E616 ADC demo code //*********************************************************************************************************** #include <stdio.h> #include "N76E616.h" #include "Version.h" #include "Typedef.h" #include "Define.h" #include "SFR_Macro.h" #include "Common.h" #include "Delay.h" /* //-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ // //<e0> System Clock Source Configuration // <o1> System Clock Source Selection // <0=> 2~16MHz XTAL // <1=> 32.768KHz XTAL // <2=> 11.0592MHz Internal // <3=> 10KHz Internal // <4=> OSC-In External //</e> // //<e2> Clock Divider Configuration // <o3.0..7> System Clock Source Devider <1-255:1> // <i> Fsys = (System Clock Source) / (2 * Devider) //</e> // //<h> ADC Option // <o4.0..3> ADC Pin Selection // <0=> AIN0 (P00) <1=> AIN1 (P01) <2=> AIN2 (P02) <3=> AIN3 (P03) // <4=> AIN4 (P04) <5=> AIN5 (P05) <6=> AIN6 (P06) <7=> AIN7 (P07) // <8=> AIN8 (P26) <9=> AIN9 (P20) <10=> Band-Gap // // <o5.0..2> ADC Divider Selection // <0=> Fsys/1 <1=> Fsys/2 <2=> Fsys/4 <3=> Fsys/8 // <4=> Fsys/16 <5=> Fsys/32 <6=> Fsys/64 <7=> Fsys/128 // //</h> // //-------- <<< end of configuration section >>> ------------------------------ */ #define SYS_CLK_EN 0 #define SYS_SEL 2 #define SYS_DIV_EN 0 //0: Fsys=Fosc, 1: Fsys = Fosc/(2*CKDIV) #define SYS_DIV 1 #define ADC_PIN 0 #define ADC_DIV 2 bit BIT_TMP; /****************************************************************************** * FUNCTION_PURPOSE: ADC interrupt Service Routine ******************************************************************************/ void ADC_ISR (void) interrupt 11 { clr_ADCF; //clear ADC interrupt flag } /****************************************************************************** * FUNCTION_PURPOSE: ADC Pin Select ******************************************************************************/ void ADC_Pin_Select (void) { #if ADC_PIN == 0 //P0.0 ADCCON0 = 0x00; //select ADC pin set_P0M1_0; //set ADC pin is input only mode clr_P0M2_0; set_P00DIDS; //disable digital connection #elif ADC_PIN == 1 //P0.1 ADCCON0 = 0x01; //select ADC pin set_P0M1_1; //set ADC pin is input only mode clr_P0M2_1; set_P01DIDS; //disable digital connection #elif ADC_PIN == 2 //P0.2 ADCCON0 = 0x02; //select ADC pin set_P0M1_2; //set ADC pin is input only mode clr_P0M2_2; set_P02DIDS; //disable digital connection #elif ADC_PIN == 3 //P0.3 ADCCON0 = 0x03; //select ADC pin set_P0M1_3; //set ADC pin is input only mode clr_P0M2_3; set_P03DIDS; //disable digital connection #elif ADC_PIN == 4 //P0.4 ADCCON0 = 0x04; //select ADC pin set_P0M1_4; //set ADC pin is input only mode clr_P0M2_4; set_P04DIDS; //disable digital connection #elif ADC_PIN == 5 //P0.5 ADCCON0 = 0x05; //select ADC pin set_P0M1_5; //set ADC pin is input only mode clr_P0M2_5; set_P05DIDS; //disable digital connection #elif ADC_PIN == 6 //P0.6 ADCCON0 = 0x06; //select ADC pin set_P0M1_6; //set ADC pin is input only mode clr_P0M2_6; set_P06DIDS; //disable digital connection #elif ADC_PIN == 7 //P0.7 ADCCON0 = 0x07; //select ADC pin set_P0M1_7; //set ADC pin is input only mode clr_P0M2_7; set_P07DIDS; //disable digital connection #elif ADC_PIN == 8 //P2.6 ADCCON0 = 0x08; //select ADC pin set_P2M1_6; //set ADC pin is input only mode clr_P2M2_6; set_P26DIDS; //disable digital connection #elif ADC_PIN == 9 //P2.0 ADCCON0 = 0x09; //select ADC pin set_P2M1_0; //set ADC pin is input only mode clr_P2M2_0; set_P20DIDS; //disable digital connection #else ADCCON0 |= 0x0F; //band-gap 1.25V #endif } /****************************************************************************** * FUNCTION_PURPOSE: ADC Clock Divider Select ******************************************************************************/ void ADC_DIV_Select (void) { #if ADC_DIV == 0 clr_ADCDIV2; clr_ADCDIV1; clr_ADCDIV0; #elif ADC_DIV == 1 clr_ADCDIV2; clr_ADCDIV1; set_ADCDIV0; #elif ADC_DIV == 2 //Default clr_ADCDIV2; set_ADCDIV1; clr_ADCDIV0; #elif ADC_DIV == 3 clr_ADCDIV2; set_ADCDIV1; set_ADCDIV0; #elif ADC_DIV == 4 clr_ADCDIV2; clr_ADCDIV1; set_ADCDIV0; #elif ADC_DIV == 5 set_ADCDIV2; clr_ADCDIV1; clr_ADCDIV0; #elif ADC_DIV == 6 set_ADCDIV2; clr_ADCDIV1; set_ADCDIV0; #elif ADC_DIV == 7 set_ADCDIV2; set_ADCDIV1; clr_ADCDIV0; #elif ADC_DIV == 8 set_ADCDIV2; set_ADCDIV1; set_ADCDIV0; #endif } /****************************************************************************** * FUNCTION_PURPOSE: ADC Initial ******************************************************************************/ void ADC_Initial (void) { set_ADCEN; ADC_Pin_Select(); //Select ADC Pin ADC_DIV_Select(); //Set ADC Clock Divider } /****************************************************************************** The main C function. Program execution starts here after stack initialization. ******************************************************************************/ void main (void) { UINT8 i; /* Note MCU power on system clock is HIRC (11.0592MHz), so Fsys = 11.0592MHz */ Set_All_GPIO_Quasi_Mode(); #if DEBUG_PORT == 0 InitialUART0_Timer1_Type1(9600); /* 9600 Baud Rate*/ #elif DEBUG_PORT == 1 InitialUART1_Timer3(9600); /* 9600 Baud Rate*/ #endif Show_FW_Version_Number_To_PC(); printf ("\n*==================================================================="); printf ("\n* Name: N76E616 ADC Demo Code."); printf ("\n*===================================================================\n"); /* Change system closk source */ #if SYS_CLK_EN == 1 #if SYS_SEL == 0 System_Clock_Select(E_HXTEN); //Fosc = 2~16MHz XTAL #elif SYS_SEL == 1 System_Clock_Select(E_LXTEN); //Fosc = 32.768KHz XTAL #elif SYS_SEL == 2 System_Clock_Select(E_HIRCEN); //Fosc = 11.0592MHz Internal RC #elif SYS_SEL == 3 System_Clock_Select(E_LIRCEN); //Fosc = 10KHz Internal RC #elif SYS_SEL == 4 System_Clock_Select(E_OSCEN); //Fosc = OSC-In External OSC #endif #endif #if SYS_DIV_EN == 1 CKDIV = SYS_DIV; //Fsys = Fosc / (2* CLKDIV) = Fcpu #endif for(i=0;i<3;i++) { P02 = 0; Timer0_Delay1ms(200); P02 = 1; Timer0_Delay1ms(200); } ADC_Initial(); while(1) { clr_ADCF; set_ADCS; //Trigger ADC start conversion #if 0 //Polling while(ADCF == 0); ADCF = 0; #else //Interrupt EADC = 1; EA = 1; set_IDLE; //Enter idle mode #endif printf ("\n* ADC conver value = %d",(UINT16)ADCRH); Timer0_Delay1ms(100); } }
收藏0 举报
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
人才类勋章
发帖类勋章
等级类勋章
时间类勋章
303
4972
24
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注电源系统设计
扫码关注21ic项目外包
扫码浏览21ic手机版
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才
京公网安备 11010802024343号