[MINI51] mini51第二贴 中断法测AD

[复制链接]
2710|3
 楼主| cnjxlxp 发表于 2012-2-1 23:46 | 显示全部楼层 |阅读模式
本帖最后由 hotpower 于 2012-9-22 12:42 编辑

根据“ddllxxrrMiNi51学习第六贴:带LED指示的ADC”修改而来

看到原地里面都是用查询法测AD的帖子,所以改了一下用中断法的。。。

需要的朋友请直接下载附件工程,补充代码

  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2009 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/
  6. #include "includes.h"  //包含所需的头文件
  7. uint32_t ADCdata = 0;
  8. void AdcIntCallback(uint32_t u32UserData)
  9. {
  10. ADCdata=DrvADC_GetConversionData();
  11. DrvADC_StartConvert();
  12. }
  13. int main (void)
  14. {
  15. Set_System();      //调用系统初始化函数
  16.    
  17.     /* 初始化类比数位转换器    */
  18. DrvGPIO_InitFunction(FUNC_ADC0);
  19. DrvADC_Open(0, EXTERNAL_CLOCK, 3); // 设置类比数位转换器时钟为12/(3+1) = 3兆赫兹  
  20. DrvADC_EnableADCInt(AdcIntCallback, 0);  
  21. DrvADC_StartConvert();
  22.   while(1)
  23. {
  24.         if(ADCdata==0)
  25.   {
  26.     DrvGPIO_ClrBit(E_PORT3, 1);  //LED0-OFF
  27.        DrvGPIO_ClrBit(E_PORT3, 6);  //LED1-OFF
  28.        DrvGPIO_ClrBit(E_PORT5, 2);  //LED2-OFF
  29.        DrvGPIO_ClrBit(E_PORT2, 6);  //LED3-OFF
  30.   }
  31.   
  32.   else if(ADCdata<155)
  33.   {
  34.     DrvGPIO_SetBit(E_PORT3, 1);  //LED0-ON
  35.        DrvGPIO_ClrBit(E_PORT3, 6);  //LED1-OFF
  36.        DrvGPIO_ClrBit(E_PORT5, 2);  //LED2-OFF
  37.        DrvGPIO_ClrBit(E_PORT2, 6);  //LED3-OFF
  38.   }
  39.   else if((ADCdata>155)&&(ADCdata<310))
  40.   {
  41.     DrvGPIO_SetBit(E_PORT3, 1);  //LED0-ON
  42.        DrvGPIO_SetBit(E_PORT3, 6);  //LED1-ON
  43.        DrvGPIO_ClrBit(E_PORT5, 2);  //LED2-OFF
  44.        DrvGPIO_ClrBit(E_PORT2, 6);  //LED3-OFF
  45.   }
  46.   else if((ADCdata>310)&&(ADCdata<465))
  47.   {
  48.     DrvGPIO_SetBit(E_PORT3, 1);  //LED0-ON
  49.        DrvGPIO_SetBit(E_PORT3, 6);  //LED1-ON
  50.        DrvGPIO_SetBit(E_PORT5, 2);  //LED2-ON
  51.        DrvGPIO_ClrBit(E_PORT2, 6);  //LED3-OFF
  52.   }
  53.   else if((ADCdata>465)&&(ADCdata<930))
  54.   {
  55.     DrvGPIO_SetBit(E_PORT3, 1);  //LED0-ON
  56.        DrvGPIO_SetBit(E_PORT3, 6);  //LED1-ON
  57.        DrvGPIO_SetBit(E_PORT5, 2);  //LED2-ON
  58.        DrvGPIO_SetBit(E_PORT2, 6);  //LED3-ON
  59.   }
  60. }
  61.    
  62.    
  63. }




本帖子中包含更多资源

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

×
hotpower 发表于 2012-2-2 00:11 | 显示全部楼层
建议将主程序关键代码贴出~~~
changfeng1800 发表于 2012-12-31 14:14 | 显示全部楼层
我来补充:
#include "includes.h"         //°üº¬ËùÐèµÄÍ·Îļþ
/*************************************************************************************
** Function name:       Set_System
** Descriptions:        ·âװһЩ³õʼ»¯Ä£¿é
** input parameters:    none
** output parameters:   none
** Returned value:      none
*************************************************************************************/
void Set_System(void)
{
  RCC_Configuration();                                        //ÅäÖÃϵͳʱÖÓ

  GPIO_Configuration();                                        //ÅäÖÃGPIO
}
/*************************************************************************************
** Function name:       RCC_Configuration
** Descriptions:        ÏµÍ³Ê±ÖÓÔ´ÉèÖÃ
** input parameters:    none
** output parameters:   none
** Returned value:      none
*************************************************************************************/
void RCC_Configuration(void)
{
   UNLOCKREG();                                                                                                // ¶Ôд±£»¤Î»²Ù×÷ʱ ÐèÒªÒ»´ÎÏò0x50000 0100дÈë 0x59,0x16,0x88
   DrvSYS_Open(XTL_CLK);                                                                        // Enable high external clock and use it as system clock (HCLK)
   while (DrvSYS_GetChipClockSourceStatus(XTL_CLK) != 1);         //µÈ´ýÍⲿ12MHZ¾§Õñ¾ÍÐ÷
   LOCKREG();                                                                                  // Ïò¡°0x5000_0100¡±Ð´ÈëÈκÎÖµ£¬¾Í¿ÉÒÔÖØËø±£»¤¼Ä´æÆ÷
}
/*************************************************************************************
** Function name:       GPIO_Configuration
** Descriptions:        GPIOÅäÖÃ
** input parameters:    none
** output parameters:   none
** Returned value:      none
*************************************************************************************/
void GPIO_Configuration()
{
    DrvGPIO_Open(E_PORT3, E_PIN1, E_IO_OUTPUT);                                //LED0
    DrvGPIO_Open(E_PORT3, E_PIN2, E_IO_INPUT);                                //INTKEY
        DrvGPIO_Open(E_PORT3, E_PIN6, E_IO_OUTPUT);                                //LED1
    DrvGPIO_Open(E_PORT5, E_PIN2, E_IO_OUTPUT);                                //LED2
        DrvGPIO_Open(E_PORT2, E_PIN6, E_IO_OUTPUT);                                //LED3
}
/*************************************************************************************
** Function name:       delay_ms
** Descriptions:        1ms(¾§ÕñΪ12MHZ)ÑÓʱ×Ó³ÌÐò
** input parameters:    count
** output parameters:   none
** Returned value:      none
*************************************************************************************/
void delay_ms(uint32_t count)
{
    uint32_t i,j;
        for(i=count;i>0;i--)
           for(j=2395;j>0;j--);
}
jstele 发表于 2013-1-26 11:14 | 显示全部楼层
真是有心的提醒
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

46

帖子

2

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