- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4)与A/D转换中断有关的寄存器 中断允许控制寄存器IE中的EADC位(D5位)用于开放ADC中断,EA位(D7位)用于开放CPU中断 中断优先级寄存器IP中的PADC位(D5位)用于设置A/D中断的优先级 在中断服务程序中,要使用软件将A/D中断标志位ADC_FLAG(也是A/D转换结束标志位)清0。 11.2.22 STC15F2K60S2单片机ADC模块的使用 编程要点 打开ADC电源,第一次使用时要打开内部模拟电源(设置ADC_CONTR)。 适当延时,等内部模拟电源稳定。一般延时1ms以内即可。 设置P1口中的相应口线作为A/D转换通道(设置P1ASF寄存器)。 选择ADC通道(设置ADC_CONTR中的CHS2~CHS0)。 根据需要设置转换结果存储格式(设置AUXR1中的ADRJ位)。 查询A/D转换结束标志ADC_FLAG,判断A/D转换是否完成,若完成,则读出结果(结果保存在ADC_RES和ADC_RESL寄存器中),并进行数据处理。 读取转换结果注意: 如果是多通道模拟量进行转换,则更换A/D转换通道后要适当延时,使输入电压稳定,延时量取20μs~200μs即可,与输入电压源的内阻有关。如果输入电压信号源的内阻在10K?以下,可不加延时。如果是单通道模拟量转换,则不需要更换A/D转换通道,也就不需要加延时。 若采用中断方式,还需进行中断设置(EADC置1,EA置1)。 在中断服务程序中读取ADC转换结果,并将ADC中断请求标志ADC_FLAG清零。 例 编程实现利用STC15F2K60S2单片机ADC通道2采集外部模拟电压信号,8位精度,采用查询方式循环进行转换,并将转换结果保存于30H单元中。假设时钟频率为18.432MHz。 解:取8位精度时,若ADRJ=0,则可直接使用转换结果寄存器ADC_RES的值。由于复位后,ADRJ=0,因此,按照ADC的编程要点进行初始化后,直接判断ADC_FLAG标志是否为1,若为1,则读出ADC_RES寄存器的值,并存入30H即可;若为0,则继续等待。 汇编语言程序代码如下: $INCLUDE (STC15.INC) ;包含STC15单片机寄存器定义文件 ADC_DAT EQU 30H ;A/D转换结果 ORG 0000H LJMP MAIN ORG 0050H MAIN: MOV SP, #70H ;设置堆栈 ORL ADC_CONTR, #80H ;开A/D转换电源 MOV A, #20H LCALL DELAY ;开电源后适当延时,1ms以内即可 MOV P1ASF,#04H ;设置P1.2的模拟量功能 MOV ADC_CONTR, ;选择P1.2作为A/D转换通道 MOV A, #05H LCALL DELAY ;切换A/D转换通道,则需要加延时 WAIT_AD: ORL ADC_CONTR, ;启动A/D转换 MOV A, ;判断A/D转换是否完成 ANL A, ADC_CONTR JZ WAIT_AD ;A/D 转换尚未完成, 继续等待 ANL ADC_CONTR, ;将ADC_FLAG清零 MOV A, ADC_RES ;读取A/D转换结果 MOV ADC_DAT, A ;保存A/D转换结果 LJMP WAIT_AD ;等待下一次转换完成 DELAY: ;延时子程序 PUSH 02 ;将寄存器组0 的 R2 入栈 PUSH 03 ;将寄存器组0 的 R3 入栈 PUSH 04 ;将寄存器组0 的 R4 入栈 M
文档评论(0)