- /*---------------------------------------------------------------------------------------------------------*/
- /* */
- /* SPDX-License-Identifier: Apache-2.0 */
- /* Copyright(c) 2024 Nuvoton Technology Corp. All rights reserved. */
- /* */
- /*---------------------------------------------------------------------------------------------------------*/
- #include "numicro_8051.h"
- uint16_t ADCdataAIN;
- void main (void)
- {
- P12_PUSHPULL_MODE;
- /* Initial UART0 for printf */
- MODIFY_HIRC(HIRC_24);
- Enable_UART0_VCOM_printf_24M_115200();
- printf ("\n Test start ...");
-
- ENABLE_ADC_AIN4;
- /* ADC Sampling time setting*/
- ADC_ConvertTime(ADC_ADCDIV2,ADC_ADCAQT5);
- while(1)
- {
- Timer0_Delay(24000000,500,1000);
- ENABLE_ADC;
- clr_ADCCON0_ADCF;
- set_ADCCON0_ADCS; // ADC start trig signal
- while(!(ADCCON0&SET_BIT7)); // Wait ADC flag
- ADCdataAIN = ADCRH<<4;
- ADCdataAIN |= ADCRL&0x0F;
- DISABLE_ADC;
- printf ("\n ADC result = 0x%x", ADCdataAIN);
- GPIO_LED ^= 1;
- }
- }
此程序实现周期性地采集ADC通道AIN4(P1.4引脚)的模拟信号,将12位转换结果通过串口打印输出,并控制LED状态翻转(闪烁指示)。
- #include "numicro_8051.h" // 新唐8051库头文件
- uint16_t ADCdataAIN; // 存储ADC转换结果(12位)
硬件初始化
- P12_PUSHPULL_MODE; // 设置P1.2为推挽输出模式(通常用于驱动LED)
- MODIFY_HIRC(HIRC_24); // 配置内部高速时钟为24MHz
- Enable_UART0_VCOM_printf_24M_115200(); // 初始化UART0:波特率115200
- printf("\n Test start..."); // 串口打印启动信息
ADC配置
- ENABLE_ADC_AIN4; // 使能ADC的AIN4通道(对应P1.4引脚)
- ADC_ConvertTime(ADC_ADCDIV2, ADC_ADCAQT5); // 设置ADC时钟分频=2(12MHz),采样时间=5个ADC周期
ADC启动与数据采集
- ENABLE_ADC; // 开启ADC模块电源
- clr_ADCCON0_ADCF; // 清除ADC完成标志位
- set_ADCCON0_ADCS; // 启动ADC转换
- while(!(ADCCON0 & SET_BIT7)); // 等待转换完成(检测ADCF标志)
读取12位ADC结果
- ADCdataAIN = ADCRH << 4; // 读取高8位寄存器,左移4位(高4位为有效数据)
- ADCdataAIN |= ADCRL & 0x0F; // 读取低4位寄存器,与高8位合并成12位数据
- DISABLE_ADC; // 关闭ADC电源(降低功耗)
输出与LED指示
- printf("\n ADC result = 0x%x", ADCdataAIN); // 串口打印16进制结果
- GPIO_LED ^= 1; // 翻转LED状态(闪烁指示运行)
|