STC12C5201AD芯片AD应用总结
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和数码管做一个显示电路来监控,这个电路以后再总结。
STC12C5201AD芯片AD应 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)