专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

STC12C5201AD芯片AD应用总结

作者:刘佳喝   来源:本站原创   点击数:  更新时间:2014年03月16日   【字体:

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控制寄存器,打开电源,设置转换速率、打开开始,设置转//换通道

 _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和数码管做一个显示电路来监控,这个电路以后再总结。

关闭窗口

相关文章