您的位置 首页 芯闻

STC12C5201AD芯片AD使用总结

STC12C5201AD芯片应用总结1、内部含有8路AD转换2、首先声明与AD转换有关的寄存器SfrADC_CONTR=0XBC;AD转换控制寄存器的地址Sfr

STC12C5201AD芯片运用总结

1、 内部含有8路AD转化

2、 首要声明与AD转化有关的寄存器

Sfr ADC_CONTR =0XBC;//AD转化操控寄存器的地址

Sfr ADC_RES=0XBD;//AD转化成果寄存寄存器

Sfr P1ASF=0x9d;//P1口模仿功用操控寄存器

//哪个方位1,P1.0-P1.7就设定为AD转化功用

3、 为了使程序的更具灵活性,能够独自设定ADC_CONTR的每一位。

#define ADC_POWER 0X80;//一切ADC电源操控为,第7位

#define ADC_FLAG 0X10;//AD转化完结标志位,第4位,

#define ADC_START 0X08;//AD转化开端标志位,第3位,

#define ADC_SPEEDLL 0X00;//AD转化速度操控位,第5、6位

//420 clocks

#define ADC_SPEEDL 0x20;//280 clocks

#define ADC_SPEEDH 0x40;//140 clocks

#define ADC_SPEEDHH 0x60;//70 clocks

4、 初始化ADC

Void initADC(void)

{

P1ASF=0X01;//设置哪个P1口进行ADC

//0X01 P1.0

//0X02 P1.1

//0X03 P1.0和P1.1

//0XFF 悉数8个口

ADC_RES=0;//成果寄存器清零

ADC_CONTR=ADC_POWER|ADC_SPEEDLL//翻开ADC电源并设置转化速率

Delay(2);//软件延时2ms

}

5、 读取ADC的成果

Uchar getADCresult(uchar ch)//ch为要读取的通道的值,0-7

{

ADC_CONTR=ADC_POWER|ADC_SPEEDLL |ADC_START|ch;

//设置ADC操控寄存器,翻开485dec0615dad85&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1831118&u=http%3A%2F%2Fwww%2E51hei%2Ecom%2Fmcu%2F2981%2Ehtml&urlid=0″ id=”8_nwl” mpid=”8″ target=”_blank”>电源,设置转化速率、翻开开端,设置转//换通道

_nop_();//设置ADC_CONTR操控寄存器的句子履行后,要经过4个CPU时钟的延时,

//其值才能够确保设置进ADC_CONTR操控寄存器

_nop_();

_nop_();

_nop_();

while(!(ADC_CONTR & ADC_FLAG));//wait complete flag

ADC_CONTR&=~ADC_FLAG;//close ADC

return ADC_RES;//return ADC result

}

AD转化的成果为8位数据,就存储在ADC_RES寄存器中,

其值为:ADC_RES[0:7]=256 X Vin/Vcc

为了便利运用转化的值编制其他的操控程序及调试,能够将转化后的数据经过串口发送出来,然后运用串口调试东西进行监控。这就涉及到串口通讯程序的编制。

串口通讯程序的编制(只发不收):

1、 为进步程序的适应性能够先对通讯的波特率和晶振频率进行宏界说。

#define BAUD 9600//9600的波特率

#define FOSC 11059200L //11.0592M的晶振

2、 串口初始化

Void initUART()

{

SCON=0X5A;//8位数据,无校验位

TMOD=0X20;//设置守时器1作业在8位主动重装的形式

TH1=TL1=-(FOSC/12/32/BAUD);//T1装初值

TR1=1;//开守时器1

}

当然这段程序也能够运用STC供给的波特率计算器来主动生成,如下:

void UartInit(void)//9600bps@11.0592MHz

{

PCON &= 0x7f; //波特率不倍速

SCON = 0x50; //8位数据,可变波特率

AUXR &= 0xbf; //守时器1时钟为Fosc/12,即12T

AUXR &= 0xfe; //串口1挑选守时器1为波特率发生器

TMOD &= 0x0f; //铲除守时器1形式位

TMOD |= 0x20; //设定守时器1为8位主动重装方法

TL1 = 0xFD; //设定守时初值

TH1 = 0xFD; //设定守时器重装值

ET1 = 0; //制止守时器1中止

TR1 = 1; //发动守时器1

}

但要留意声明特别辅佐寄存器AUXR

Sfr AUXR=0X8E;

3、 发送数据

Void senddata(uchar dat)

{

While(!TI);//等候前面的数据发送结束

TI=0;//TI标志清零

SBUF=dat;//发送当时的数据

}

这样只需调用发送数据函数就能够在串口调试软件中看到数据了。

当然你也能够运用74HC595和数码管做一个显现电路来监控,这个电路今后再总结。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/xinwen/317842.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部