单片微机原理与接口技术-基于STC15系列单片机(第3版)10 STC15F2K60S2系列单片机的AD转换器 例题_第1页
单片微机原理与接口技术-基于STC15系列单片机(第3版)10 STC15F2K60S2系列单片机的AD转换器 例题_第2页
单片微机原理与接口技术-基于STC15系列单片机(第3版)10 STC15F2K60S2系列单片机的AD转换器 例题_第3页
单片微机原理与接口技术-基于STC15系列单片机(第3版)10 STC15F2K60S2系列单片机的AD转换器 例题_第4页
单片微机原理与接口技术-基于STC15系列单片机(第3版)10 STC15F2K60S2系列单片机的AD转换器 例题_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEPAGE5第10章STC15F2K60S2单片机的A/D转换例题例10.l编程实现利用STC15F2K60S2单片机ADC通道1采集外部模拟电压信号,8位精度,采用查询方式循环进行转换,并将转换结果保存于30H单元中,并送P2口LED灯显示(低电平驱动)。假设时钟频率为18.432MHz。解:取8位精度时.可设置ADRJ=0.直接使用转换结果寄存器ADC_RES的值。选择通道1,则(CHS2~CHS0)=001B。按照ADC的编程要点进行初始化后,直接判断ADC_FLAG标志是否为l?若为l,则读出ADC_RES寄存器的值;若为0,则继续查询。汇编语语言参考程序如下:$INCLUDE(STC15F2K60S2.INC);包含STC15F2K60S2单片机寄存器定义文件,若无现成的STC15F2K60S2.INC文件,;则可以用“EQU”和“DATA”直接对A/D转换用到的新增特殊功能寄存器进行定义ADC_DATAEQU30H;定义AD转换结果保存单元ORG 0000HLJMP MAINORG 0000HMAIN:MOVSP,#70H;设置堆栈MOVP1ASF,#02H;设置Pl.1为模拟量输入功能MOVADC_CONTR,#81H;打开A/D转换电源,设置输入通道MOVA,#20HLCALLDELAY;打开A/D转换电源后,延时1ms即可LOOP:MOVADC_CONTR,#10001001B;启动A/D转换NOP;适当延时,确保设置有效NOPNOPNOPWAIT_AD:MOVA,ADC_CONTRJNBACC.4,WAIT_AD;判断A/D转换是否完成MOVADC_CONTR,#81H;将ADC_FLAG清零MOVA,ADC_RES;读取A/D转换结果MOVADC_DATA,A;保存A/D转换结果CPLAMOVP2,A;送P2口LED灯显示LJMPLOOP;循环检测DELAΥ:PUSH02;将寄存器组0的R2、R3、R4入栈PUSH03PUSH04MOVR4,A;取最外循环的循环次数DELAY_LOOP0:MOVR3,#200DELAY_LOOP1:MOVR2,#249DELAY_LOOP:DJNZR2,DELAY_LOOPDJNZR3,DELAY_LOOP1DJNZR4,DELAY_LOOP0POP04;恢复现场POP03POP02RETENDC51语言参考程序如下:#include"STC15F2K60S2.h"//包含STC15F2K60S2单片机寄存器定义文件unsignedchardataadc_data_at_0x30;//定义(保存A/D转换结果)绝对地址变量voidmain(void){unsignedlongi;unsignedcharstatus;P1ASF=0x02;//设置Pl..1为模拟量输入功能ADC_CONTR=0x81;//打开A/D转换电源,设置输入通道for(i=0;i<10000;i++);while(l){ADC_CONTR=0x89;//启动A/D转换_NOP_();_NOP_();_NOP_();_NOP_();status=0;while(status==0)//等待A/D转换结束{status=ADC_CONTR&0x10;}ADC_CONTR=0x81;//清A/D转换结束标志位adc_data=ADC_RES;//保存A/D转换结果P2=~ADC_RES;//送P2口LED灯显示 }}例10.2编程实现利用STC15F2K60S2单片机ADC通道1采集外部模拟电压信号,10位精度,·采用中断方式进行转换,并将转换结果保存于30H和31H单元中,并送P3和P2口LED灯显示(低电平驱动),P3口LED灯显示最高2位,P2口LED灯显示低8位。设时钟频率为18.432MHz。解:设置ADRJ=1,转换结束后,ADC_RES的低2位为转换结果的最高2位,ADC_RESL为转换结果的低8位。汇编语言参考程序如下:$INCLUDE(STC152K60S2.INC)ADC_DATAHEQU31H;定义A/D转换结果高2位存储变量ADC_DATALEQU30H;定义A/D转换结果低8位存储变量ORG 0000HLJMP MAINORG 002BHLJMP ADC_ISR;ADC中断矢量入口ORG 0050HMAIN:MOVSP,#70H;设置堆栈MOVP1ASF,#02H;设置Pl.1为模拟量输入功能MOVADC_CONTR,#81H;打开A/D转换电源,设置输入通道MOVA,#20HLCALLDELAY;开A/D转换电源后要加适当延时,1ms即可ORLCLK_DIV,#20H;设置A/D转换结果存储格式(ADR为1)SETBEADC;开放ADC中断SETBEA;开放CPU总中断MOVADC_CONTR,#10001001B;启动A/D转换SJMP$;循环等待中断ADC_ISR:;ADC中断服务程序入口MOVADC_CONTR,#81H;将ADC_FLAG清零MOVA,ADC_RES;读取A/D转换结果高2位ANLA,#03H;屏蔽高6位MOVADC_DATAH,A;保存A/D转换结果高2位CPLAMOVP3,A;高2位送P3口LED灯显示MOVA,ADC_RESL;读取A/D转换结果低8位MOVADC_DATAL,A;保存A/D转换结果的低8位CPLAMOVP3,A;低8位送P2口LED灯显示MOVADC_CONTR,#89H;重新启动A/D转换RETIDELAΥ:PUSH02;将寄存器组0的R2、R3、R4入栈PUSH03PUSH04MOVR4,A;取最外循环的循环次数DELAY_LOOP0:MOVR3,#200DELAY_LOOP1:MOVR2,#249DELAY_LOOP:DJNZR2,DELAY_LOOPDJNZR3,DELAY_LOOP1DJNZR4,DELAY_LOOP0POP04;恢复现场POP03POP02RETENDC51语言参考程序如下:#include"STC152K60S2.h"//包含STC15F2K60S2单片机寄存器定义文件unsignedchardataadc_datah_at_0x31;//定义(保存A/D转换结果)绝对地址变量unsignedchardataadc_datal_at_0x30;//定义(保存A/D转换结果)绝对地址变量voidmain(void){unsignedlongi;unsignedcharstatus;P1ASF=0x02;//设置Pl..1为模拟量输入功能ADC_CONTR=0x81;//打开A/D转换电源,设置输入通道for(i=0;i<10000;i++);//适当延时CLK_DIV|=0x20;//(ADRJ)=1,设置A/D转换结果的存储格式ADC_CONTR=0x89;//启动A/D转换EADC=1;EA=1;while(1);}/*ADC中断服务子函数*/voidADC_ISR(void)interrupt5{ADC_CONTR=0x81;//将ADC_FLAG清零adc_datah=ADC_RES&0x03;//保存A/D转换

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论