#include <STC32G.H>
#include <intrins.h>
sbit LED1 = P2^2;
sbit LED2 = P2^1;
// 延时函数10ms
void delay(void) {
unsigned char i, j;
i = 108;
j = 145;
do {
while (--j);
} while (--i);
}
// 初始化ADC
void InitADC(void) {
// 使用P1.1,P1.4作为ADC输入:
P1M1 |= 0x10; // 设置P1.4为ADC功能
P1M0 &= ~0x10; // 清除P1.4的位,设置为ADC功能
P1M1 |= 0x02; // 设置P1.1为ADC口
P1M0 &= ~0x02; // 清除P1.1的位,设置为ADC功能
//ADC配置
ADCM = 0x03; // 选择通道0和通道1
ADCTIM = 0x3f; //设置 ADC 内部时序
ADCCFG = 0x0f; //设置 ADC 时钟为系统时钟/2/16/16
ADC_POWER =1; //使能 ADC 模块
EADC = 1; //使能 ADC 中断
EA = 1;
ADC_START = 1; //启动 AD 转换
}
// ADC中断服务程序
void ADC_Isr() interrupt 5 {
if (ADC_FLAG) {
ADC_FLAG = 0; // 清中断标志
unsigned int adc_result0 = (ADC_RES << 8) | ADC_RESL;;
if (adc_result0 > (4096 * 2.5 / 5)) // 计算电压大于2V
{
LED1 = 0; // 电压大于2V时熄灭LED1
}
unsigned int adc_result1 = (ADC_RES << 8) | ADC_RESL;;
if (adc_result1 > (4096 * 2.5 / 5)) // 计算计算电压大于2.5V
{
LED2 = 0; // 电压大于2V时熄灭LED1
}
}
void main() {
LED1 =1;
LED2 =1;
P2M0 |= 0x06;
P2M1 &= ~0x06;
InitADC(); // 初始化AD
// 主循环
while (1) {
}
}
要实现32G双通道采集电压然后比较结果中断。互不干涉