ADC不进入中断(STC8G2K64S4)
#include "ADC.h"int ADC_DATA;
/*----- ADC初始化函数 ----*/
void ADC_Init()
{
P1M0 = 0x00; //ADC IO口模式配置(高阻)
P1M1 = 0x04;
P_SW2 |= 0x80; //打开XFR特殊外部设备寄存器
ADCTIM = 0x3f; //设置ADC内部时序
P_SW2 &= 0x7f; //关闭XFR特殊外部设备寄存器
ADCCFG = 0x2f; //设置ADC时钟为系统时钟/2/16,以及数据对齐方式(右对齐)
ADC_CONTR = 0x82; //使能ADC模块设置ADC输入IO----P1.2
EADC = 1; //使能ADC中断
ADC_CONTR |= 0x40; //启动AD转换
}
/*----- ADC数据处理及返回值函数 ----*/
int ADC_read()
{
unsigned char i = 0;
int ADC_Res;
ADC_Init();
ADC_Res = 0; //全局变量函数返回值保留不清零加上次值,故此循环前清零。
for(i=0; i<8;i++)
{
ADC_Res += ADC_DATA; //循环读取8次数据进行累加,
}
ADC_Res >>= 3; //右移三位 2^3=8,等价与÷8
return ADC_Res; //返回数值
}
/*----- ADC中断 ----*/
void ADC_Isr() interrupt 5
{
ADC_CONTR &= ~0x20; //清中断标志
ADC_DATA = (ADC_RES << 8) | ADC_RESL; //读取ADC结果,针对于右对齐
ADC_CONTR |= 0x40; //继续AD转换
}
直接在return ADC_Res; 上一步对(ADC_Res = 0xf0)这里写一个固定的参数可以正常显示,但是如果在中断中给ADC_DATA直接赋值(ADC_DATA =0XF0)没有一点用
请问一下是哪里有问题呢?
好像找到问题了(我在主函数将返回数据处理后,直接关闭了EADC中断),我将ADC中断开启和关闭放置在int ADC_read()函数中就可以了,不知道为什么。 还是用 一箭双雕之USB转双串口,或 STC-USB Link1D 来仿真效率高
使用STC-USB Link1D的CDC串口仿真8位单片机-深圳国芯人工智能有限公司 (stcai.com)
楼主,这个中断程序STC32也能使用吗
页:
[1]