STC12C5AxxAD资料

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

//本程序演示STC12C5AxxAD系列MCU的A/D转换功能。时钟18.432MHz//转换结果以16进制形式输出到串行口,可以用串行口调试程序观察输出结果。//---------------------------------------------------------------------//#includeREG52.H#includeintrins.H#includeNEW_8051.H//---------------------------------------------------------------------typedefunsignedcharINT8U;typedefunsignedintINT16U;//---------------------------------------------------------------------//以下选择ADC转换速率,只能选择其中一种//SPEED1SPEED0A/D转换所需时间#defineAD_SPEED0x60//0110,00001170个时钟周期转换一次,//CPU工作频率21MHz时A/D转换速度约300KHz//#defineAD_SPEED0x40//0100,000010140个时钟周期转换一次//#defineAD_SPEED0x20//0010,000001280个时钟周期转换一次//#defineAD_SPEED0x00//0000,000000420个时钟周期转换一次//---------------------------------------------------------------------voidinitiate_RS232(void);//串口初始化voidSend_Byte(INT8Uone_byte);//发送一个字节INT8Uget_AD_result(INT8Uchannel);voiddelay(INT8Udelay_time);//延时函数//---------------------------------------------------------------------voidmain(){INT16UADC_result;initiate_RS232();//波特率=115200P1ASF=0x02;//0000,0010,将P1.1置成模拟口//ADRJ=AUXR1^2://0:10位A/D转换结果的高8位放在ADC_RES寄存器,低2位放在ADC_RESL寄存器//1:10位A/D转换结果的最高2位放在ADC_RES寄存器的低2位,低8位放在ADC_RESL寄存器AUXR1&=~0x04;//0000,0100,令ADRJ=0//AUXR1|=0x04;//0000,0100,令ADRJ=1ADC_CONTR|=0x80;//1000,0000打开A/D转换电源while(1){ADC_result=get_AD_result(1);//P1.1为A/D当前通道,测量并发送结果Send_Byte(0xAA);//为便于观察,发送2个0xAASend_Byte(0xAA);Send_Byte(ADC_result);delay(0x1);}}//---------------------------------------------------------------------voiddelay(INT8Udelay_time)//延时函数{INT16Un;while(delay_time--){n=6000;while(--n);}}//---------------------------------------------------------------------#defineFosc18432000#defineBAUD115200//波特率#defineRELOAD_115200(256-(Fosc/16*10/BAUD+5)/10)//1T模式,波特率加倍#defineBRTx12_enable()AUXR|=0x04//BRT独立波特率发生器的溢出率快12倍#defineBRT_start()AUXR|=0x10//启动独立波特率发生器BRT计数。voidinitiate_RS232(void)//串口初始化{ES=0;//禁止串口中断SCON=0x50;//可变波特率.8位无奇偶校验AUXR|=0x01;//使用独立波特率发生器PCON|=0x80;//波特率加倍BRTx12_enable();//BRT独立波特率发生器的溢出率快12倍BRT=RELOAD_115200;//设置独立波特率发生器BRT的自动重装数BRT_start();//启动独立波特率发生器BRT计数。ES=1;}//---------------------------------------------------------------------voidSend_Byte(INT8Uone_byte)//发送一个字节{TI=0;//清零串口发送中断标志SBUF=one_byte;while(TI==0);TI=0;//清零串口发送中断标志}//---------------------------------------------------------------------INT8Uget_AD_result(INT8Uchannel){INT8UAD_finished=0;//存储A/D转换标志ADC_RES=0;ADC_RESL=0;channel&=0x07;//0000,0111清0高5位ADC_CONTR=AD_SPEED;_nop_();ADC_CONTR|=channel;//选择A/D当前通道_nop_();ADC_CONTR|=0x80;//启动A/D电源delay(1);//使输入电压达到稳定ADC_CONTR|=0x08;//0000,1000令ADCS=1,启动A/D转换,AD_finished=0;while(AD_finished==0)//等待A/D转换结束{AD_finished=(ADC_CONTR&0x10);//0001,0000测试A/D转换结束否}ADC_CONTR&=0xE7;//1111,0111清ADC_FLAG位,关闭A/D转换,return(ADC_RES);//返回A/D高8位转换结果}

1 / 3
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功