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:33 编辑
你端口配置有问题吧。
本帖最后由 乘风飞扬 于 2024-1-4 13:26 编辑
STC8G1K08A的P3.2对应的是ADC2, 应该设置 ADC_CONTR = 0xC2;
P_SW2的最高位是扩展寄存器访问使能,读写扩展寄存器前要使能。
ADCTIM寄存器属于扩展寄存器,所以设置ADCTIM前要设置扩展寄存器访问使能。
设置完后是可以不用关闭的,一直开着就行。
谢了,是搞错了。
页:
[1]