//差动输入,定时启动,由T2定时/选择6,7通道为ADC0差动转化通道,其中第6通道为P3.6,第7通道为P.7dif_input.c///#include "lcd.h"//笔者所写的LCD显示头文件,具体见LCD章节/*若读者没有条件使用"lcd.h"的各显示和键盘函数,则可在lcd.h文件中如下定义:#include "c8051f040.h"void dispini();void showf();*///则该调试文件能编译通过,用户也可调试,只是要通过设断点来观察数据#define ADC0START temppage=SFRPAGE;SFRPAGE=0x00;AD0BUSY=1;SFRPAGE=temppage#define REAL_RATE 989L#define ADJRATEDIF 237L#define ADJRATESE 118L/*REAL_RATE为物理量转化系数,由具体对象而定ADJRATEDIF为差动模式下,增益为0.5时ADC0转化值与真实电压的转换系数ADJRATESE为单端输入模式下,增益为0.5时ADC0转化值与真实电压的转换系数*/sfr16 RCAP2=0xca;sfr16 RCAP3=0xca;sfr16 RCAP4=0xca;sfr16 TMR4=0xcc;sfr16 TMR3=0xcc;sfr16 TMR2=0xcc;sfr16 PCA0CP0=0xfb;sfr16 PCA0CP1=0xfd;sfr16 PCA0CP2=0xe9;sfr16 PCA0CP3=0xeb;sfr16 PCA0CP4=0xed;sfr16 PCA0CP5=0xe1;sfr16 ADC0VAL=0xbe;//将ADC0H-ADC0L通过sfr16实现sfr16 ADC0GT=0xc4;sfr16 ADC0LT=0xc6;uchar temppage;bit isnewdata;int kk;long target_val;//工程量转化值long realvol;//真实测量电压值float temp;void adc0_mux(uchar type,uchar source);void adc0_source(uchar source);void p3anolog_ini(uchar port);void HVDA_ini(uchar gaind);void adc0_ini();void config();void t2_ini();void t2_baud(uint t2reload);void t2_ini(){SFRPAGE = 0x00;TMR2CF = 0x08; // T2时钟为系统时钟,计数方向为增值计数TMR2CN = 0x04; // T2为16bit定时器模式,并启动定时器运行}void t2_baud(uint t2reload){//每隔t2reload个T2时钟,产生一次定时溢出SFRPAGE = 0x00;RCAP2=~t2reload+1;//相当于65536-t2reloadTMR2=RCAP2;}void adc0_mux(uchar type,uchar source){//type 配置测量方式为差动还是单端输入//source 为ADC0通道选择(共有9个通道)SFRPAGE=0x00;AMX0CF=type;AMX0SL=source;}void adc0_source(uchar source){//ADC0通道选择,为adc0_mux()的简化函数SFRPAGE=0x00;AMX0SL=source;}void p3anolog_ini(uchar port){//配置p3口模拟输入管脚SFRPAGE=0x00;AMX0PRT=port;SFRPAGE=0x0f;P3MDIN&=~port;//将相应管脚配置成模拟输入口}void HVDA_ini(uchar gaind){/*高压差动放大器配置,调的只是第二级的增益,整体增益还需再乘以0.05;*///HVDA禁止时,HCAP+上检测到的是HVAIN+的电压SFRPAGE=0x00;HVA0CN=gaind;}void adc0_ini(){SFRPAGE=0x00;ADC0CF=0x0f;//ADC0时钟为系统时钟2分频,PGA增益为0.5ADC0CN=0x8c;//AD0TM=0,ADC0为连续跟踪模式,由T2溢出率启动ADC0//AD0LJST=0,数据存储格式右对齐,即ADC0H存放12bit高四位REF0CN&=0x0f;//AD0VRS=0,ADC0参考电压为VREFAREF0CN|=0x07;//TEMPE=1,内部温度传感器工作//BIASE=1,偏移产生器工作/*REFBE=1,内部参考电平工作,电路部分须将VREF参考输出(C8051F40的第12管脚)与VREF0(C8051F040的16管脚相连,并最好并联一个4.7uF和0.1uF的旁路电容以电平滤波*/p3anolog_ini(0xc0);//将P3.6和P3.7配置到AMUX 6、7通道上adc0_mux(0x08,6);//PORT3IC=1,ADC0 6、7通道为差动模式//HVDA2C=0,4、5通道为单端模式//AIN0.0-AIN0.3均为单端模式//选择6,7通道为ADC0差动转化通道,注意不能选7,选7不能选中差动通道EIE2 |= 0x02; //开ADC0中断t2_ini();t2_baud(20000);//每隔20000个T2时钟产生一次ADC0采样SFRPAGE=0x00;TR2=1;}void config (void) {//看门狗禁止 WDTCN = 0x07; WDTCN = 0xDE; WDTCN = 0xAD; SFRPAGE = 0x0F; XBR0 = 0x00; XBR1 = 0x00; XBR2 = 0x40;//交叉开关使能,使得P0-P3口能输出 XBR3 = 0x00; SFRPAGE = 0x0F; P0MDOUT = 0x00; //端口配置,P0-P3,P6-P7口为开漏输出 P1MDOUT = 0x00; P2MDOUT = 0x00; P3MDOUT = 0x00; P4MDOUT = 0x00; //P4口为开漏,也可推挽 P5MDOUT = 0x07; P6MDOUT = 0x00; P7MDOUT = 0x00; P1MDIN = 0xFF; //所有端口为数字输入,没有模拟输入端口 P2MDIN = 0xFF; P3MDIN = 0xFF; SFRPAGE = 0x0F; CLKSEL = 0x00; OSCXCN = 0x00; OSCICN = 0x84; //采用内部晶振,为24.5MHZ8分频} void main(){uchar i;config();dispini();//LCD初始化,具体见LCD章节部分adc0_ini();//ADC0初始化EA=1;i=0;realvol=0;while(1){if(isnewdata){i++;if(i>30){//每采样30次,显示刷新一次i=0;//若读者没有条件使用lcd.h,则可在此设断点查看realvol和target_val的值showf(realvol,5,0);showf(target_val,6,1);}isnewdata=0;}}}void ADC0_ISR() interrupt 15{SFRPAGE=0x00;AD0INT=0;kk=ADC0VAL;realvol=(long)kk*ADJRATEDIF;/*ADC0转化值乘以差动电平系数,其结果为电平真实值乘以100000例如ADC0VAL=64512时,即kk=-1024,则realvol=-1024*237=-242688,即表示真实电压为-2.42688v */target_val=(long)kk*REAL_RATE;/*ADC0转化值乘以物理量转化系数,来表示物理量值例如某速度传感器输出为0-2.4V,其量程为-1m/s至1m/s,且传感器提供1.2V参考电平输出将1.2V接入P3.7,将传感器输出接到P3.6,则构成差动测量模式则target_val为物理量值乘以1000000例如ADC0VAL=65136时,即kk=-400,target_val=-400*989=-395600,即表示真实物理量为-0.3956m/s*/isnewdata=1;}

mdin偏移_dif_input.c 源代码在线查看 - C8051F系列单片机开发与C语言编程 非常好的东西 资源下载 虫虫电子下载站...相关推荐

  1. c8051f c语言编程,C8051F系列单片机开发与C语言编程

    C8051F系列单片机开发与C语言编程 维普资讯 http://doc.xuehai.net 雎 A 21进行控制,这样可以选择不同的地址,进而控制的读写. S D1 5 E 6对应的内存和寄存器. ...

  2. 导频 matlab,v06_03_dem_2up_arrange.m 源代码在线查看 - 完美的OFDM仿真程序MATLAB(带导频),可直接运行 资源下载 虫虫电子下载站...

    % 一个OFDM符号128个有效符号,插入128个虚拟子载波% 符号率(即有效数据率)fsymbol,而发送速率(需要包括虚拟子载波)2fsymbol% 输入的数据需要2倍的发送数据率,以便进行内插, ...

  3. Android 源代码在线查看 目录结构 不完全指南

    Android 源代码在线查看网站 在 Android sudio 中,想要查看一个 Android 系统的源代码,仅仅需要 Ctrl+鼠标左键 点击该目标类和方法名,即可在开发软件Android s ...

  4. android 源代码在线查看和索引

    android 源代码在线查看和索引 原文转载:http://androidsource.top/ 点击打开链接 近期发现该网址已经无法找到  可切换这个地址:http://grepcode.com/ ...

  5. 十分好用的Android源代码在线查看网站

    十分好用的Android源代码在线查看网站 http://androidxref.com/9.0.0_r3/

  6. C8051F系列单片机技术问答

    C8051F系列单片机技术问答   振荡器  问:内部时钟振荡器是否稳定?是否可以用于产生波特率的时基? 答:不同器件的内部时钟振荡器的精度是不同的(±20%).随电源电压变化,它也将发生变化(6.5 ...

  7. Android 源代码在线查看

    google开放了android的源码,我们可以在如下网站下载到: http://source.android.com/source/downloading.html 但是有时候我们只是想查看一下某个 ...

  8. admininfo.php,admin.php 源代码在线查看 - FTB安装版 v1.3(虚拟形象)FTB安装版 v1.3(虚拟形象) 资源下载 虫虫电子下载站...

    所有的信息已经保存你已经开放下列注册名为老斑竹$tab_top$userarray$tab_bottom增加更多音乐DJEOT;exit; }}if($adminjob==adma){$thispro ...

  9. matlab %3c handle,volume browser (updated).htm 源代码在线查看 - Matlab显式三维地震数据的源代码 资源下载 虫虫电子下载站...

    Comments: any comments on this error:??? Error using ==> timesIntegers can only be combined with ...

最新文章

  1. 简单的MongoDB实践
  2. 0402互联网新闻 | 首批进口游戏版号下放,网易腾讯获批;“少年得到”完成数千万元A轮融资...
  3. Go Web编程--使用Go语言创建静态文件服务器
  4. ajax和php没反应,PHP和AJAX没有更新发生
  5. github入门到上传本地项目
  6. string类常用方法3
  7. 3D数字孪生大屏怎么做?你需要了解这款数据可视化软件
  8. 计算机网络第七版 4-55
  9. arm+linux书籍
  10. 如何将数字转化为中文大写
  11. 【思维导图】演绎推理和归纳推理基础概念
  12. Configured.java
  13. 科学素养题(2022年2月-2022年10月)
  14. 收敛交叉映射(convergent cross mapping,CCM)滥觞、2012年Science论文引言部分:Detecting Causality in Complex Ecosystems
  15. USB专用充电端口(DCP) MST2515
  16. CT图像重构方法详解——傅里叶逆变换法、直接反投影法、滤波反投影法
  17. 一个小程序:计算绩效的方案
  18. VisionPro基础篇(一): VisionPro界面介绍
  19. SFTP命令常用操作
  20. 微信小程序---页面刷新的几种方法

热门文章

  1. 使用Python将PDF转换为WORD
  2. mactxt文件如何转换成html,最佳的用于Mac上的PDF文件转换到HTML文件的转换器
  3. Android实现百度网盘一些功能
  4. 求建议:二本计算机专业,考研还是就业做开发?
  5. [附源码]Python计算机毕业设计_旅游系统
  6. Mysql组复制(MGR)——技术细节
  7. apache avro 简介
  8. php防止恶意注册,PHP怎样防止用户注册高仿其他人的用户名?
  9. 对不起,精英主义与特斯拉精神背道而驰
  10. 计算机基础与应用答案,第4章 课后作业【含答案】 计算机基础与应用