STC12C5A60S2内置AD的C语言程序

STC12C5A60S2内置AD的C语言程序,第1张

返回值是3FF,你的参考电压怎么设置的?进入AD的电压幅值是多少?

还有AD的触发方式怎么设置的,ADclk多少,完基亏孝成AD的中断函数里面都写了什么

ps:建议不要空搭用goto,大型的程序里面goto多了就是飞檐走壁搏稿,看不清到哪里了

同学,你的问题有问题

你是想问STC系列单片机的AD问题还是串口问题

你上面这段程序是51单片机禅毕拦串口初始化程序而不是AD程序。

51单片机串口初始化为

void COM_Init(void)

{

SCON = 0x50

TMOD &= 0x0F

TMOD |= 0x20

PCON |= 0x80

TH1 = 0xFD

ES=1EA=1

TR1 = 1

TI = 1

}

AD转换程数老序

//定义与ADC有关的特殊功能寄存器

sfr ADC_CONTR =0xC5

sfr ADC_DATA =0xC6

sfr ADC_LOW2 =0xBE

sfr P1M0 =0x91

sfr P1M1 =0x92

sbit p20 =P2^0

void STC90CxxAD_delay(int timer) //延时函数

{

while(timer--)

}

int Ad_Change(char channel) //AD转换

{

int AD_Result_Temp = 0

P1 = 0xff//将P1口置高,为A/D转换作准备

ADC_CONTR = ADC_CONTR|0x80//1000,0000打开A/D转换电源

P1M0 = 0x03 //0000,0011用于A/D转换的P1.x口,先设为开漏

P1M1 = 0x03 //0000,0011P1.0--P1.1先设为开漏。断开内部上拉电阻

STC90CxxAD_delay(20)//20

ADC_CONTR = ADC_CONTR&0xE0//1110,0000 清ADC_FLAG,ADC_START位和低3位

ADC_CONTR = ADC_CONTR|(channel)//设置当前通道号

STC90CxxAD_delay(1)//延时使输入电压达到稳定

ADC_DATA = 0 //清A/D转换结果寄存器

ADC_LOW2 = 0

ADC_CONTR = ADC_CONTR|0x08//0000,1000ADCS = 1,启动转换

do { }

while((ADC_CONTR &0x10)==0) //0001,0000等待A/D转换结束

ADC_CONTR = ADC_CONTR&0xE7//1110,0111清ADC_FLAG位,停止A/D转换

AD_Result_Temp = ((AD_Result_Temp|ADC_DATA)<<2)|(ADC_LOW2&0x03)

//保存返回AD转贺胡换的 结果

STC90CxxAD_delay(1) //

return AD_Result_Temp

}

已调试通过,望对你有用


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12356313.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存