[DemoCode下载] ML51的ADC使用案例

[复制链接]
1948|8
 楼主| 734774645 发表于 2019-8-31 23:06 | 显示全部楼层 |阅读模式
PWM触发
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2019 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/

  6. //***********************************************************************************************************
  7. //  Website: http://www.nuvoton.com
  8. //  E-Mail : MicroC-8bit@nuvoton.com
  9. //***********************************************************************************************************

  10. //***********************************************************************************************************
  11. //  File Function: ML51 ADC GPIO tirg demo code
  12. //***********************************************************************************************************
  13. #include "ML51.h"

  14. /******************************************************************************
  15. * FUNCTION_PURPOSE: ADC interrupt Service Routine
  16. ******************************************************************************/
  17. void ADC_ISR (void) interrupt 11
  18. {
  19.     clr_ADCCON0_ADCF;                               //clear ADC interrupt flag
  20.     printf ("\n PWM trig ADC = 0x%bx",ADCRH);
  21. }

  22. /******************************************************************************
  23. The main C function.  Program execution starts
  24. here after stack initialization.
  25. ******************************************************************************/
  26. void main ()
  27. {
  28.     MFP_P31_UART0_TXD;
  29.     P31_QUASI_MODE;
  30.     UART_Open(24000000,UART0_Timer1,115200);
  31.     ENABLE_UART0_PRINTF;
  32.   
  33. /*-------------------------------------------------------------------------------
  34.   ADC trig by PWM channel 0 falling edge
  35.   Step 1: Setting P2.5 as PWM0 channel 0 output
  36.   Step 2: Enable ADC channel 1 P2.4 input hardware trigger by PWM0 channel0 and FALLING EDGE trig
  37.   Step 3: Enable ADC AIN0
  38. --------------------------------------------------------------------------------*/
  39. // PWM initial setting
  40.     MFP_P25_PWM0_CH0;                                                    //setting P2.5 multi function pin as GPIO
  41.     P25_PUSHPULL_MODE;                                                  //setting P2.5 GPIO as output mode
  42.     PWM0_ConfigOutputChannel(0,Independent,EdgeAligned,0x6FF,10);        //setting PWM0 channel 0 output
  43.     PWM0_RUN();
  44.   
  45. // ADC initial setting  
  46.     ADC_EnableHWTrigger(ADC_HWT_PWM0CH0, ADC_HWT_FALLINGEDGE,0);        //Enable ADC hardware trigger by PWM0 channel 0 FALLING EDGE trig
  47.     ADC_Open(ADC_SINGLE,1);                                              //Enable ADC AIN0
  48.     ADC_Interrupt(Enable,ADC_INT_SINGLE);                                //Enable ADC interrupt
  49.     ENABLE_GLOBAL_INTERRUPT;                                           //Enable global interrupt
  50.   
  51. /* find ADC result in ADC interrupt*/
  52.     while(1);                                                            // Wait GPIO trig and ADC interrupt to check result
  53. }




 楼主| 734774645 发表于 2019-8-31 23:07 | 显示全部楼层
GPIO触发
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2019 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/

  6. #include "ML51.h"


  7. void ADC_ISR (void) interrupt 11
  8. {
  9.     clr_ADCCON0_ADCF;                               //clear ADC interrupt flag
  10.     printf ("\n ADCRH = 0x%bx",ADCRH);
  11. }

  12. /******************************************************************************
  13. The main C function.  Program execution starts
  14. here after stack initialization.
  15. ******************************************************************************/
  16. void main ()
  17. {
  18.     MFP_P31_UART0_TXD;
  19.     P31_QUASI_MODE;
  20.     UART_Open(24000000,UART0_Timer1,115200);
  21.     ENABLE_UART0_PRINTF;;
  22. /*-------------------------------------------------------------------------------
  23.   ADC port trig initial setting toggle P0.3 to start ADC AIN0 channel convert
  24.   * include gpio.c
  25.   * include adc.c
  26.   Step 1: setting P0.3 multi function pin as GPIO
  27.   Step 2: setting P0.3 GPIO as input mode
  28.   Step 3: Enable ADC hardware trigger as STADC and FALLING EDGE trig
  29.   Step 4: enable ADC AIN0
  30. --------------------------------------------------------------------------------*/
  31.     MFP_P03_STADC;                                                   //setting P0.3 multi function pin as start ADC.
  32.     P03_INPUT_MODE;                                                  //setting P0.3 GPIO as input mode
  33.     ADC_EnableHWTrigger(ADC_HWT_STADC, ADC_HWT_FALLINGEDGE,0);       //Enable ADC hardware trigger as STADC and FALLING EDGE trig
  34.     ADC_Open(ADC_SINGLE,0);                                          //Enable ADC AIN0
  35.     ADC_Interrupt(Enable,ADC_INT_SINGLE);                            //Enable ADC interrupt
  36.     ENABLE_GLOBAL_INTERRUPT;                                         // Enable global interrupt
  37. /* find ADC result in ADC interrupt*/
  38.     while(1);                                                        // Wait GPIO trig and ADC interrupt to check result
  39. }




 楼主| 734774645 发表于 2019-8-31 23:08 | 显示全部楼层
ADC的内部参考设置
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2019 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/

  6. //***********************************************************************************************************
  7. //  Website: http://www.nuvoton.com
  8. //  E-Mail : MicroC-8bit@nuvoton.com
  9. //***********************************************************************************************************

  10. //***********************************************************************************************************
  11. //  File Function: ML51 series ADC software trigger on shot demo code
  12. //***********************************************************************************************************
  13. #include "ML51.h"

  14. /******************************************************************************
  15. The main C function.  Program execution starts
  16. here after stack initialization.
  17. ******************************************************************************/
  18. void main ()
  19. {
  20.   unsigned int ADCRESULT;
  21. /*
  22. For UART0 P0.5 TXD output setting
  23. * include gipo.c in Library for GPIO mode setting
  24. * include uart.c in Library Setting for UART0
  25. */
  26.     MFP_P31_UART0_TXD;                              // UART0 TXD use P0.5
  27.     P31_QUASI_MODE;                                 // set P0.5  as Quasi mode for UART0 trasnfer
  28.     UART_Open(24000000,UART0_Timer3,115200);        // Open UART0 use timer1 as baudrate generate and baud rate = 115200
  29.     ENABLE_UART0_PRINTF;  
  30. /*
  31.   ADCS to trig ADC convert
  32.   * include adc.c in Library for ADC initial setting
  33. */  
  34.     VREF_Reload(LEVEL1);
  35.     VREF_Open(LEVEL1);
  36.     ADC_Open(ADC_SINGLE,1);                                        //Enable ADC_CH4
  37.     ADC_ConvertTime(3,7);
  38.   
  39. /* find ADC result in ADC interrupt*/
  40.                                             
  41.     while(1)
  42.     {
  43.         set_ADCCON0_ADCS;                           // Software trig adc start
  44.         while((ADCCON0|CLR_BIT7)==CLR_BIT7);         // wait ADCF = 1;
  45.         ADCRESULT = (ADCRH<<4)+ADCRL;
  46.         printf("\n ADC result = 0x%X  ", ADCRESULT);
  47.         Timer0_Delay(24000000,100,1000);
  48.     }
  49.   
  50. }

 楼主| 734774645 发表于 2019-8-31 23:08 | 显示全部楼层
ADC的中断
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2019 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/

  6. //***********************************************************************************************************
  7. //  Website: http://www.nuvoton.com
  8. //  E-Mail : MicroC-8bit@nuvoton.com
  9. //***********************************************************************************************************

  10. //***********************************************************************************************************
  11. //  File Function: ML51 series ADC software trigger on shot demo code
  12. //***********************************************************************************************************
  13. #include "ML51.h"

  14. /******************************************************************************
  15. * FUNCTION_PURPOSE: ADC interrupt Service Routine
  16. ******************************************************************************/
  17. void ADC_ISR (void) interrupt 11
  18. {
  19.     clr_ADCCON0_ADCF;                               //clear ADC interrupt flag
  20.                 printf ("ADCRH = 0x%BX  ",ADCRH);                                                   //include uart.c before use printf function.
  21.                 printf ("ADCRL = 0x%BX \n ",ADCRL);                                                //include uart.c before use printf function.
  22. }

  23. /******************************************************************************
  24. The main C function.  Program execution starts
  25. here after stack initialization.
  26. ******************************************************************************/
  27. void main ()
  28. {
  29. /*
  30. For UART0 P0.5 TXD output setting
  31. * include gipo.c in Library for GPIO mode setting
  32. * include uart.c in Library Setting for UART0
  33. */
  34.                 MFP_P31_UART0_TXD;                                                                                                                        // UART0 TXD use P0.5
  35.                 P31_QUASI_MODE;                                                                           // set P0.5  as Quasi mode for UART0 trasnfer
  36.                 UART_Open(24000000,UART0_Timer3,115200);                                // Open UART0 use timer1 as baudrate generate and baud rate = 115200
  37.                 ENABLE_UART0_PRINTF;       
  38. /*
  39.         ADCS to trig ADC convert
  40.         * include adc.c in Library for ADC initial setting
  41. */
  42.                 ADC_Open(ADC_SINGLE,1);                                                                                                                                                                //Enable ADC_CH4
  43.                 ADC_ConvertTime(2,7);
  44.                 ADC_Interrupt(Enable,ADC_INT_SINGLE);                                                                                                        //Enable ADC interrupt
  45.                 ENABLE_GLOBAL_INTERRUPT;                                                                                                                                                  // Enable global interrupt
  46. /* find ADC result in ADC interrupt*/
  47.                                                                                                                                                                                
  48.                 while(1)
  49.                 {
  50.                                 set_ADCCON0_ADCS;                                             // Software trig adc start
  51.                                 Timer0_Delay(24000000,100,1000);
  52.                 }
  53.        
  54. }

mintspring 发表于 2019-9-9 00:06 | 显示全部楼层
新出的ML和MS,比003的支持更好
mintspring 发表于 2019-9-9 00:07 | 显示全部楼层
操作比较容易的很。
xuanhuanzi 发表于 2019-9-9 21:55 | 显示全部楼层
好像同一时刻只能有一路。
杨光光光, 发表于 2021-7-23 14:19 | 显示全部楼层
这个配置怎么和一般的51配置不太一样啊
asmine 发表于 2021-7-23 14:42 | 显示全部楼层
这是几种触发
您需要登录后才可以回帖 登录 | 注册

本版积分规则

211

主题

3588

帖子

15

粉丝
快速回复 在线客服 返回列表 返回顶部