STC15F2K60S2实现A/D转换
2016-03-03 19:24
218 查看
1 实现功能
以中断方式进行A/D转换,取10位精度,并送P3和P2口LED灯显示(低电平驱动),P3口显示最高2位,P2口显示第8位。2 程序代码
#include"STC15F2K60S2.h" unsigned char data adc_datah; //定义保存AD转换结果的绝对地址 unsigned char data adc_datal; void main() { unsigned int i; P1ASF=0x10; //设置P1.4为模拟量输入功能 ADC_CONTR=0x84; //打开A/D转换电源,设置输入通道 for(i=1000;i>0;i--); //适当延时 CLK_DIV|=0x20; //ADRJ=1.设置A/D转换结果的存储格式 ADC_CONTR=0x8c; //启动A/D转换 EA=1; EADC=1; while(1); } void ADC_ISR() interrupt 5 { ADC_CONTR=0x84; //将ADC_FLAG清0; adc_datah=ADC_RES&0x03; //保存A/D转换结果高2位 P3=~adc_datah; //转换结果高2位送P3口LED灯显示 adc_datal=ADC_RESL; //保存A/D转换结果低8位 P2=~adc_datal; //转换结果高2位送P3口LED灯显示 ADC_CONTR=0xc0; //重新启动A/D转换 }
3 遇到的问题
3.1 仿真器设置通过在stc官网下载最新版本的烧录软件–>点击keil仿真设置–>点击添加型号和头文件到keil中。具体参照
http://jingyan.baidu.com/article/4ae03de3f80ef73eff9e6bac.html
3.2 程序运行时表示找不到头文件
将STC15F2K60S2.h文件放到工程目录下面。
具体参照
http://www.51hei.com/bbs/dpj-36960-1.html
4 新的知识点
4.1 寄存器P1ASF的8个位对应于P1口的8根口线,某个位置1,对应的P1口线被设置为A/D转换器的输入通道;某个位清0,对应的P1口线被设置为I/O口功能。4.2 寄存器ADC_CONTR
SPEED1、SPEED0位作用于选择A/D转换速度,
0,0表示90个系统时钟周期转换一次;
0,1表示180个系统时钟周期转换一次;
1,0表示360个系统时钟周期转换一次;
1,1表示540个系统时钟周期转换一次;
CHS2、CHS1、CHS0作用于A/D转换器模拟量输入通道的选择
0,0,0 表示P1.0作为A/D转换器模拟量输入通道
1,1,1 表示P1.7作为A/D转换器模拟量输入通道
4.3 寄存器CLK_DIV中的ADRJ位作用于设置A/D转换结果的保存格式
寄存器ADC_RES和ADC _RESL用于保存A/D转化结果
ADRJ=0,10位A/D转换结果的高8位存放在ADC_RES寄存器中,低2位存放在ADC _RESL中。
ADRJ=1,10位A/D转换结果的高2位存放在ADC_RES寄存器中,低8位存放在ADC _RESL中。
4.4 对多通道模拟量进行A/D转换,在更替AD转换通道后要适当延时,使输入电压稳定,延时一般取20-200us左右。
相关文章推荐
- PHP功能强大的字符串处理函数
- GC问题的分析角度
- 做需求分析一点心得
- iOS沙盒目录结构解析
- 8VC Venture Cup 2016 - Final Round C. Package Delivery 优先队列
- HDFS简介
- 使用Proxmark3进行MIFARE Classic卡的安全测试
- Chipmunk物理引擎
- [置顶] zookeeper 集群搭建教程之应用案例
- 2016蓝桥杯假期任务之《身份证升级》
- Http请求中Content-Type讲解以及在Spring MVC中的应用
- main函数的底层理解
- leetcode--Length of Last Word
- MAX NUM
- 最简版QQ~~牛逼的Linux Netcat 命令
- 那些被遗漏的Objective-C保留字
- 定义ll命令
- javaweb2.2 DOM解析之增删改查
- bellman-ford 学习总结性文档
- Context类浅析