您的位置 首页 国产IC

C8051F320AD转化和温度传感器

C8051F320内部有一个10位逐次逼近型ADC,可以工作在单端方式或者差分方式。一、简要原理单片机内集成了2个多路选择器,分别作为ADC的正

C8051F320内部有一个10位逐次迫临型ADC,能够作业在单端方法或许差分方法。

一、扼要原理
单片机内集成了2个多路挑选器,别离作为ADC的正输入信号和负输入。
正输入端由寄存器AMX0P操控输入信号,能够是P1~P3、温度传感器、VDD之一;
负输入端由寄存器AMX0N操控输入信号,能够是P1~P3、VREF、GND之一。
单负输入端挑选GND时,选用单端方法;其他状况则选用差分方法,即用正端相关于负端的电压进行转化。
*选用并行口作为输入信号时,有必要将对应输入引脚设为模仿输入,而且对应的SKIP要设置为1,即越过
二、寄存器
1、转化成果保存在两个8位寄存器ADC0H和ADC0L中,因为转化成果是10位,能够自由挑选在寄存器中选用左对齐或许右对齐(下详)
单端方法下,转化成果直接保存为10位的无符号数
差分方法下,成果保存为10位有符号整数(原阐明:2的补码。未深究)
2、温度传感器的输出电压由下面公式决议:
V = 2.86(T)+ 776 (单位mv) 从图表看,最高只能在1000mv左右,也便是100°时仅1V上下
3、AD发动方法
有六种发动方法,包括四个定时器溢出发动、特定方位1发动和P0.6上升沿发动。(下详)
选用中止时,中止号interrupt 10
4、盯梢方法对盯梢不是很了解!
5、寄存器AMX0P,正输入通道挑选寄存器
00H~10H,对应P1.0~P3.0 0x1E对应温度传感器 0x1F对应VDD
寄存器XMXON,负输入通道挑选寄存器
00H~10H,对应P1.0~P3.0 0x1E对应VREF 0x1F对应GND,此刻为单端方法
6、寄存器ADC0CF,装备寄存器,操控转化时钟,和数据保存方向
D7~D3 时钟操控位,粗心便是分频数,体系时钟与AD时钟的比值减1
D2,为0时数据右对齐,为1时左对齐
7、寄存器ADC0CN,操控寄存器。
D7,AD使能,0时制止转化
D6,盯梢方法,不明白
D5,中止标志位,要手动清0
D4,读取时为忙标志位,写入时可为发动标志位,但不知道要不要清0
D3,窗口比较中止标志,不是很清楚
D2~D0 转化方法挑选,且遭到D6影响。详细未深究。
8、寄存器REF0CN,电压基准操控器
与AD的联系不完全明亮
D3决议了电压基准D2使能温度传感器

下面是完好例程,但不包括12864的C文件。
完好例程下载地址:http://www.51hei.com/f/c8051sad.rar
#include “c8051f3xx.h”
#include “12864.h”
#define uchar unsigned char
#define uint unsigned int
sfr16 TMR2RL = 0xca; // Timer2 reload value定时器2重载值
sfr16 TMR2 = 0xcc; // Timer2 counter定时器2计数器
//这两行适当好用,直接把T2的四个8位寄存器从头界说成2个16位寄存器!!!!!!
uchar adnum3,adnum2,adnum1;         //计划用来显现的数百位、十位和个位,在这里没有进行运算,仅仅直接的AD成果sbit led0=P0^5;                //连了个发光二极管调查有没有死机。。uchar code table[]="0123456789";       //显现数据用 uchar code hang1[17]="1234567";         //以下四行为12864初始显现的内容,不重要uchar code hang2[17]="123456789 ";uchar code hang3[17]="2011-7-10 周日";uchar code hang4[17]="    00:00:00    ";void Timer2_ISR (void) interrupt 5       // T2仅仅用来溢出的,没程序,清标志位罢了{TF2H = 0;}void Adc_ConvComplete_ISR (void) interrupt 10  //AD中止程序,除了清标志位,仅仅把数据送到12864第三行{AD0INT = 0;                         lcd_pos(3,0);adnum3 = ADC0H/100;adnum2 = (ADC0H%100)/10;adnum1 = (ADC0H%100)%10;disp_only(tableaa[adnum3]);disp_only(tableaa[adnum2]);disp_only(tableaa[adnum1]);}void Port_Init (void)   //端口初始化,哪个位要输入,就要设为模仿,并越过{P1MDIN   = 0x7F;P0MDIN   = 0xff; P2MDIN   = 0xff;P3MDIN   = 0x00;P0MDOUT |= 0xfF;                    P1MDOUT |= 0x0F;                    P2MDOUT |= 0x0C;P1SKIP   = 0x80; P0SKIP   = 0x00; P2SKIP   = 0x00; XBR0     = 0x00;XBR1     = 0x40;                }void Timer_Init (void){TMR2CN  = 0x00;                     CKCON  &= ~0xF0;                    TMR2RL  = 0;                       TMR2    = 0xffff;                   ET2     = 1;                        TR2     = 1;                       }

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/ic/255241.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部