XHB7906021 发表于 2024-1-4 12:32:47

AD转换请教

//STC8G1K08A   想用P3.2脚输入电压测试AD转换情况,用其他脚来观看输出状态
#include <STC8G.H>//#include "STC8G.H"//#include "reg51.h"
#include "intrins.h"
unsigned char m1=0;
void main()
{         P3M1 = 0x04;//0000 0100
    P3M0 = 0x00;//1111 101101推挽输出;10高阻输入;设置P3.2为ADC口,其他为输出
    P5M1 = 0x00;//0000 0000
    P5M0 = 0x0F;//0000 1111推挽输出
    ADC_CONTR = 0xCA; //11XX 00007=1电源开,6=1启动AD转换, 3-0=0000,P3.2为AD位
    ADCCFG = 0x0f; //XX0X 1111 B5=0左对齐高8位,低4位,设置ADC时钟为系统时钟/2/16       
                P_SW2 |= 0x80;//何用?
                ADCTIM = 0x3f; //001 01010设置ADC内部时序 全用默认值
                P_SW2 &= 0x7f;//何用?
                EADC = 1;
                EA = 1; //使能ADC中断
                while (1)
                {       }               
}                                                                                  
void ADC_Isr() interrupt 5
{   P55=!P55;//判断是否进中断
        ADC_CONTR &= ~0x20;//0010 0000取反1101 1111 清中断标志
                ADC_CONTR |= 0x40;                        //继续AD转换
                m1= ADC_RES;//读取ADC结果高8位
                if(m1<40){        P30=!P30;}
                if(80<m1<160){ P31=!P31;        }
                if(m1>200){       P33=!P33 ;   }//P54=!P54 ;
} //看到了P55有方波输出,说明已进中断,同时P30/31相同波形,
//为何调节电压0-5V变化,P33没输出方波,P30 P31也不变化?不知是那里搞错了,请多指教!

rengran 发表于 2024-1-4 13:17:03

本帖最后由 rengran 于 2024-1-4 13:33 编辑


你端口配置有问题吧。

乘风飞扬 发表于 2024-1-4 13:22:50

本帖最后由 乘风飞扬 于 2024-1-4 13:26 编辑

STC8G1K08A的P3.2对应的是ADC2, 应该设置 ADC_CONTR = 0xC2;



P_SW2的最高位是扩展寄存器访问使能,读写扩展寄存器前要使能。
ADCTIM寄存器属于扩展寄存器,所以设置ADCTIM前要设置扩展寄存器访问使能。
设置完后是可以不用关闭的,一直开着就行。



XHB7906021 发表于 2024-1-4 15:18:56

谢了,是搞错了。
页: [1]
查看完整版本: AD转换请教