单片机原理及应用——数据采集系统设计_第1页
单片机原理及应用——数据采集系统设计_第2页
单片机原理及应用——数据采集系统设计_第3页
单片机原理及应用——数据采集系统设计_第4页
单片机原理及应用——数据采集系统设计_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据采集系统设计 姓名: 学号: 班级: 实验时间: 姓名: 学号: 班级: 实验地点: 一、实验目的 1. 掌握单片机片内 ADC 及温度传感器的使用及应用程序设计 二、实验内容 应用单片机片内 ADC 实现数据的采集,使用片内温度传感器实现温度的测量。要求: 1. 应用 C8051F020 单片机片内温度传感器实现温度的测量,并用数码管显示实测温度值,显示精度为 0.1oC。 2. 应用 C8051F020 单片机内 ADC 实现两路数据的采集,要求对外部输入 0-2V 的直流电压进行数据采集,测 量精度为 5mV,显示精度为 0.001V。 3. 两种采集功能可以用按键进行切换,可以用按键控制数据采集的通路。 三、实验说明 通过本实验,掌握单片机片内 ADC 使用方法,掌握基于单片机的数据采集系统的工作原理与设计方法。 必须用模块化方法进行 C 语言程序设计。 四、实验仪器和设备 PC 机、 Keil uVision2 软件, C8051F020 单片机,EC3 在线仿真器。 五、实验原理 1:ADC0 的使用方法 (1):初始化: a:输入模式:单端 or 双端; b:选定模拟输入通道; c:确定 PGA 增益; d:确定 ADC0 转换时钟; e:选定基准电压 VREF; f:选定启动转换的方式; 2 定时器溢出方式:选择定时器(定时器初始化) g:确定查询方式还是中断方式 中断方式:需进行中断初始化 (2):开启 ADC0:AD0EN=1 (3):启动 ADC0: (4) 读取转换结果。 2:温度传感器的传输函数示于图 6.2。当温度传感器被选中(用 AMX0SL 中的 AMX0AD3-0) 时,其输出电压(VTEMP)是 PGA 的输入;PGA 对该电压的放大倍数由用户编程的 PGA 设置 值决定。 而关于电压的公式为: 4096refadVX= 为基准电压,经测量, 。refV2.1refV 六、程序流程图 宁波大学信息学院 2013(2) “单片机原理及应用 1”实验报告 3 4 开 始 关 闭 看 门 狗开 启 中 断 设 置 系 统 时 钟选 用 外 部 时 钟 12M 交 叉 开 关 初 始 化 ADC初 始 化 外 部 中 断 7初 始 化 ZLG芯 片 初 始 化 数 码 管 显 示 初 始 化 按 键 值 ? 1 选 择 通 道 AID0 选 择 通 道 AID1选 择 温 度 传 感 器 20 启 动 AD转 化 按 键 值 ? 0 计 算返 回 温 度 值 1或 2 计 算返 回 电 压 值 显 示 宁波大学信息学院 2013(2) “单片机原理及应用 1”实验报告 5 七、实验结果与分析 1、测温度: 经过测量,温度显示为 26.5 2、测电压: 通过 AID0 的得的数据如下表 1 所示 输入电压 U 理 /V 实测电压 U 实 /V 绝对误差|U 理 U 实 | /mV 0.30 0.298 2 0.50 0.497 3 0.80 0.799 1 1.30 1.299 1 1.50 1.488 2 1.80 1.799 1 2.00 1.999 1 表 1 通过 AID1 的得的数据如下表 2 所示 输入电压 U 理 /V 实测电压 U 实 /V 绝对误差|U 理 U 实 | /mV 0.30 0.297 3 0.50 0.497 3 0.80 0.798 2 1.30 1.299 1 1.50 1.489 1 1.80 1.797 3 2.00 1.998 2 表 2 结果分析: 通过实验,利用单片机内置的温度传感器测出了单片机的温度,但是所测的温度是单片机芯片的温度,并 非室温,由于工作状态的单片机会产热,所以此温度会比实际的室温高,通过查询资料得知大概高 1.4。单 片机显示的温度减去 1.4的值会更接近室温。 实验利用 ADC 测出了电压值,通过表 1 和表 2 的数据可知,在 02V 的范围内,测得的温度精确度很高, 绝对误差小于 5mV,而且还利用了两个通道测电压。其实这只是单测一次的电压值,从实验的习惯来讲是不太 好的,实验次数太少偶然误差比较大,所以将来测电压时,应该多测几次,取平均值,当然此步骤可以在程序 内部执行,不必自己测多组再取平均值。 八、源代码 源代码必须有必要的注释,且要与流程图的逻辑关系对应。 主代码: #include #include #include #include unsigned char key=0xff; void display(unsigned long number)/频率显示函数 6 unsigned char T1,T2,T3,T4; T1=number%10; T2=(number/10)%10; T3=(number/100)%10; T4=number/1000; if(AMX0SL=0X00|AMX0SL=0X01) /测电压时的显示 ZLG7289_Download(1,7,0,T1); ZLG7289_Download(1,6,0,T2); ZLG7289_Download(1,5,0,T3); ZLG7289_Download(1,4,1,T4); else if(AMX0SL=0X0f) /测温度时的显示 ZLG7289_Download(1,7,0,0); ZLG7289_Download(1,6,0,T2); ZLG7289_Download(1,5,1,T3); ZLG7289_Download(1,4,0,T4); void rest() /初始化 P3MDOUT=0XFF; /使能 P3 口,运来运转 ZLG7289 XBR2=0X40; /使能交叉开关 AMX0CF=0X00;/单端输入 ADC0CF=0x48;/ SAR=1.2mhz ADC0CN=0x80;/使能 ADC0; EA=0; EIE2=0X20; /开启外部中断 7,并设置其优先级为最高 EIP2=0x20; EA=1; REF0CN=0x07; /ADC0 电压基准取自 VREF0 引脚。 void keyduqu() interrupt 19 /读取键值 key=ZLG7289_Key(); P3IF=0x00; void main() unsigned char i; unsigned long num=0; bdwtd(); sysc(); rest(); delay(100); ZLG7289_Init(40); 宁波大学信息学院 2013(2) “单片机原理及应用 1”实验报告 7 for(i=0;i8;i+) /数码管清 0 ZLG7289_Download(1,i,0,0); while(1) if(key=0) AMX0SL=0X0F;/温度传感器 else if(key=1) AMX0SL=0x00; /选择通道 AID0 else if(key=2) AMX0SL=0x01; /选择通道 AID1 if(key=0 | key=1 | key=2) AD0INT=0; AD0BUSY=1; /启动转换 while(AD0INT=0)/等待转换结束 ; if(key=1 | key=2) num=(2.44*(ADC0H*256+ADC0L)/4096)*1000; /电压值 else num=(2.44*(ADC0H*256+ADC0L)/4096-0.776)*100/0.00286; /温度 delay(1000); display(num); delay(1000); 相关头文件: 延时函数: #ifndef _delay_H_ #define _delay_H_ 8 void delay(unsigned char x) unsigned int i,j; for(i=0;ix;i+) for(j=0;j1000;j+); #endif 时钟函数: #ifndef _sysc_h_ #define _sysc_h_ void sysc(void) in

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论