微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STC12C5201AD芯片AD应用总结

STC12C5201AD芯片AD应用总结

时间:12-01 来源:互联网 点击:
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和数码管做一个显示电路来监控,这个电路以后再总结。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top