登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 第六章:12系列自带ADC

[复制链接]
发表于 2017-2-8 13:33:31 | 显示全部楼层 |阅读模式
学习笔记
学习科目: C51
学习安排: 详见:http://bbs.hpuedd.com/forum.php?mod=viewthread&tid=837&fromuid=385
开始时间: 2017-02-06
结束时间: 2017-02-08
本帖最后由 夜色星空 于 2017-2-9 19:17 编辑
(声明:本人写的帖子一般都会采用知识屏蔽,尽量将最基本的东西表达出来,而不去牵涉一些过于复杂的东西,所以会有一些缺漏,欢迎回帖更正)

因为数字电路与模拟电路的差异

以及一般电路都会牵涉到模电与数电

所以,如何将模数电进行转化,搭起沟通的桥梁,便成了不得不解决的问题

也就是现在的AD转换

它将模拟信号,变成了数字信号(AD)

或将数字信号变成模拟信号(DA)

我们单片机上的ADC其实是AD转换,也就是模拟信号转为数字信号

具体分为4步


然后将其变成2进制编码存储在相应寄存器中

如图

1-1.PNG

以我们板子测电压为例

当我们使用ADC在P1^0引脚时(引脚可调,但电路图中使用P1^0引脚接滑动变阻器)

调节滑动变阻器,引脚电压发生变化

通俗的看待这件事情

就是ADC将0~5V电压分成2^8份(取8位精度时,如果是10位则为2^10)

每份相当于5/2^8V电压

进行一次AD转换,单片机将自动测量现在的P1^0脚电压为几份

并将分数存储在特定寄存器中(也就是上图两个寄存器)

我们只需要读取寄存器的值就可以知道现在P1^0脚的电压有多大

如图

1-2.PNG



那么,首先,我们要做的是将ADC的状态调整好


先是将P1^0引脚设为ADC取值引脚

如图

1-3.PNG

(提及这里就要说一下引脚复用,http://bbs.hpuedd.com/forum.php?mod=viewthread&tid=875#lastpost

还有一个通道选择(不知道二者有什么区别)

1-4.PNG 1-5.PNG


此时,ADC的引脚坐落完毕

下面该设置转换时的一些参数了

1.上电

1-6.PNG


2.转换速度控制

1-7.PNG


3.设置转换后的数据存储方式

1-8.PNG

(PS:我们这里为简化代码,所以只使用8位ADRJ=0存储方式)


4.转换完成后,提醒CPU读取数据,设置中断

1-9.PNG

中断标号如图(interrupt 5)

2-1.PNG


将上述寄存器设置好后

便可开始转换

但需要注意(如果要读取ADC_CONTR寄存器,加延时)

2-2.PNG

汇编翻译过来应该是(笔者也是正在看)

[mw_shl_code=c,true]#include <intrins.h>
void STAR()
{
        ADC_CONTR=&DATA;//搜了一下说是立即数,感觉像是常量,就先这么写吧
        _nop_();//延时一个机器周期
        _nop_();
        _nop_();
        _nop_();
        A=ADC_CONTR;
}[/mw_shl_code]


至此,就可以启动ADC转换了

2-3.PNG

也就是ADC_CONTR|=0X80;

但技术手册不建议用此方法(然而此寄存器貌似不能位寻址


然后,只需要读出特定寄存器的值就可以了

(程序不难,就不在此放了,丢一个HEX,可以去玩一玩)


(再附一个:连接仅供参考思路,毕竟二者寄存器地址都不一样)


该会员没有填写今日想说内容.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表