基于AD转换模块的单片机仿真和C语言开发综述.docx
- 文档编号:30543517
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:16
- 大小:461.43KB
基于AD转换模块的单片机仿真和C语言开发综述.docx
《基于AD转换模块的单片机仿真和C语言开发综述.docx》由会员分享,可在线阅读,更多相关《基于AD转换模块的单片机仿真和C语言开发综述.docx(16页珍藏版)》请在冰豆网上搜索。
基于AD转换模块的单片机仿真和C语言开发综述
目录
摘要1
1软件介绍2
1.1protues仿真软件2
1.2C编译器Keil介绍2
1.351单片机介绍3
2整体设计分析4
3硬件模块设计5
3.1控制系统模块5
3.3数码管显示模块7
3.4总原理图7
4仿真流程8
4.1C语言编译8
4.2添加文件8
5个人心得10
6参考文献11
附录一C语言程序代码12
本科生能力拓展训练成绩评定表15
摘要
本设计要求作出一种多路模拟信号采集模块,从多个通道轮流采集数据一次,并将采集的结果存放在数组中。
完成此功能采用AT89C51型单片机作为控制系统,用C语言进行编程,根据实时按键的扫描情况更新采集的数据,并且在数码管上显示出来。
完成AD转换功能的核心器件是ADC0808芯片,多通路的输入用开关来进行控制。
关键词:
AD转换ADC0808AT89C51
1软件介绍
1.1protues仿真软件
Protues软件是来自英国Labcenterelectronics公司的EDA工具软件,Protues软件有20年的历史,在全球广泛使用。
它除了具有和其它EDA工具一样的原理布图、PCB自动或人工布线及电路仿真的功能外,其革命性的功能是,它的电路仿真是交互的,可视化的,针对微处理器的应用,还可以直接在基于原理图的虚拟原型上编程,并实现软件源码级的实时调试,如有显示及输出,还能看到运行后输入输出的效果,配合系统配置的虚拟仪器如示波器、逻辑分析仪等,可以测量仿真的波形及记录仿真数据。
其功能模块:
—个易用而又功能强大的ISIS原理布图工具;PROSPICE混合模型SPICE仿真;ARESPCB设计。
PROSPICE仿真器的一个扩展PROTEUSVSM:
便于包括所有相关的器件的基于微处理器设计的协同仿真。
此外,还可以结合微控制器软件使用动态的键盘,开关,按钮,LED甚至LCD显示CPU模型。
Protues主要特征:
1、支持许多通用的微控制器,如ARM,PIC,AVR,以及8051.
2、交互的装置模型包括:
LED和LCD显示,RS232终端,通用键盘
3、强大的调试工具,包括寄存器和存储器,断点和单步模式
4、IARC-SPY和KeiluVision4等开发工具的源层调试
1.2C编译器Keil介绍
KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。
KeilSoftware公司推出的uVision4是一款可用于多种8051MCU的集成开发环境(IDE),该IDE同时也是PK51及其它开发套件的一个重要组件。
除增加了源代码、功能导航器、模板编辑以及改进的搜索功能外,uVision3还提供了一个配置向导功能,加速了启动代码和配置文件的生成。
此外其内置的仿真器可模拟目标MCU,包括指令集、片上外围设备及外部信号等。
uVision3提供逻辑分析器,可监控基于MCUI/O引脚和外设状态变化下的程序变量。
uVision4提供对多种最新的8051类微处理器的支持,包括AnalogDevices的ADuC83x和ADuC84x,以及Infineon的XC866等。
1.351单片机介绍
单片微型计算机(Single-ChipMicrocomputer),简称单片机。
就是将微处理器(CPU)、存储器(存放程序或数据的ROM和RAM)、总线、定时器/计数器、输入/输出接口(I/O口)和其他多种功能器件集成在一块芯片上的微型计算机。
本次课程设计选用的是MCS-51系列单片机中的80C51。
MCS-51单片机包含中央处理器(CPU)、程序存储器(ROM)、数据存储器(RAM)、定时器/计数器、并行I/O接口、串行I/O接口和中断系统等几大单元。
中央处理器由运算器、控制器组成。
8051的CPU包含以下功能部件:
(1)8位CPU。
(2)布尔代数处理器,具有位寻址能力。
(3)128B内部RAM数据存储器,21个专用寄存器。
(4)4KB内部掩膜ROM程序存储器。
(5)2个16位可编程定时器/计数器。
(6)32位(4×8位)双向可独立寻址的I/O口。
(7)1个全双工UART(异步串行通信口)。
(8)5个中断源、两级中断优先级的中断控制器。
(9)时钟电路,外接晶振和电容可产生1.2MHz~12MHz的时钟频率。
2整体设计分析
设计要完成一种多路模拟信号采集模块,从多个通道轮流采集数据一次,并将采集的结果存放在数组中。
我采用的是八通道的数据轮流输入ADC0808,ADC0808是以逐次逼近原理进行模/数转换的器件,用开关进行控制八路数据,整个接在IN0输入口上,ADC0808的控制口全0选通该输入口。
当然也可以把八个通道分别接在芯片八个不同的输入口上,通过单片机来控制输入口的选通,此种方法51芯片部分的程序设计要加上选通模块。
ADC0808完成转换后数据送入AT89C51部分,然后再控制在四个七段数码管上显示输出采集的数据。
3硬件模块设计
3.1控制系统模块
本设计控制系统采用AT89C51,采用12M晶振,整体控制多通道数据采集显示和键盘扫描,该部分的接线和仿真时的显示如下图3.1所示。
图3.189C51芯片引脚
AT89C51结构介绍:
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
3.2ADC数据采集模块
ADC0808是采样分辨率为8位的、以逐次逼近原理进行模/数转换的器件。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。
ADC0808是ADC0809的简化版本,功能基本相同。
一般在硬件仿真时采用ADC0808进行A/D转换,实际使用时采用ADC0809进行A/D转换。
ADC0808芯片有28条引脚,采用双列直插式封装,如下图3.2所示。
图3.2ADC0808模块
部分引脚功能如下:
(1)1~5和26~28(IN0~IN7):
8路模拟量输入端;
(2)8、14、15和17~21:
8位数字量输出端;
(3)22(ALE):
地址锁存允许信号,输入,高电平有效;
(4)6(START):
A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升使0808复位,下降沿启动A/D转换);
(5)7(EOC):
A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。
(6)9(OE):
数据输出允许信号,输入,高电平有效。
当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量;
(7)23~25(ADDA、ADDB、ADDC):
3位地址输入线,用于选通8路模拟输入中的一路。
3.3数码管显示模块
本系统采用四个数码管显示通道以及采样值。
并且实时更新新的采样数据。
这部分连接较简单,下图3.3是数码管部分的接入以及零输入时的数码管显示。
图3.3数码管显示模块
3.4总原理图
图3.4总原理图
4仿真流程
4.1C语言编译
在Keil软件中编写好C语言程序,编译生成.hex文件。
编译及生成文件如下图4.1所示。
图4.1Keil软件编译
4.2添加文件
在proteus软件中按原理图所示连线,并邮件点击AT89C51模块添加仿真文件,添加界面如图4.2所示。
图4.2文件添加
4.3仿真结果
通道1
通道3
通道6
以上展示了三个通道的输入和输出,我设置的八路模拟量输入分别为0.50、0.75、1.00、1.50、2.50、3.00、3.50、4.00,当然,这每一路的输入都是可以在0-5v的范围内通过滑动变阻器进行调整。
经过检验,依次分别合上单路开关后,数码管上显示的数值分别为0.507、0.742、0.996、1.503、2.480、2.988、3.476、3.984,由此可见,在一定误差允许的范围内,用ADC0808以及AT89C51完成了AD转换,并在数码管上进行显示的功能。
5个人心得
这次的课程设计是要完成多路模拟信号采集,从多个通道轮流采集数据一次,并将采集的结果存放在数组中,用protues软件进行仿真,并用C语言完成编译。
这两个软件之前都有过接触,所以软件操作方面不是很困难,主要是要弄清楚整个过程及设计原理。
我的设计是用ADC0808芯片完成模数转换这一步骤,然后用单片机模块来控制及输出。
首先我通过查找资料对该芯片的各个管脚的用途和功能作了初步的了解,ADC0808是8位的、以逐次逼近原理进行模/数转换的器件,八个输入可以接在八个不同的管脚上,通过单片机编程实现选通输入;还可以通过线接直接选通某一个输入口,八个输入并联在该管脚上,通过开关来完成某一路模拟信号的输入。
两种方法相比,第二种的C语言编程部分相对较简单,我所采用的就是第二种方法。
通过查找资料,对整个过程有了一定的理解之后,开始用protues软件进行设计,大概完成了整个线路的连接后,将编译好的C语言程序添加到AT89C51芯片中,第一次仿真并没有出现预期的结果。
然后通过对整个电路的检查,发现问题出现在ADC0808的第十管脚的方波输入信号上。
由于单片机AT89C51使用的晶振是12MHZ,所以ADC0808的频率应该与其同步。
后来将其修改为12MHZ后,能够正确得到输入的模拟信号值,即完成了整个设计过程。
这次课程设计收获较大,不仅对软件的使用更加熟悉,也对芯片有更多的了解,而且在出问题之后,能够通过自己的分析,找出问题所在,并最终解决问题,对自己的能力是很大的提高。
6参考文献
[1]谭浩强C语言程序设计清华大学出版社(第三版)2011
[2]彭伟.单片机C语音程序设计实例基于protues仿真电子工业出版社2007
[3]张迎新.单片微型计算机原理、应用及接口技术国防工业出版社1999
[4]李群芳、张士军、黄建单片微型计算机与接口技术电子工业出版社2008
[5]刘瑞新单片机原理及应用教程机械工业出版社2003
附录一C语言程序代码
#include
#include
/*****端口声明***********/
sbitP3_4=0xb4;
sbitP3_5=0xb5;
#definestartP3_4
#definealeP3_5
/****主程序************/
voidmain()
{
unsignedinttemp;
chari,j;
P1=0xff;
IE=0x0;
ale=0;
start=0;
TMOD=0;//设置定时器0工作方式为工作方式0
TCON=0x04;
TL0=0x08;//设置定时器初值
TH0=0xa2;
ET0=1;
EX1=1;
EA=1;
TR0=1;
while
(1)//等待中断发生
{
temp=P1/256.0*5*1000;//转化为显示的电压值
i=temp%1000/100;
j=temp%100/10;
P0=(j<<4)+temp%10;//送数码管显示
P2=((temp/1000)<<4)+i;
}
}
/******定时器0中断服务程序********/
voidtimerint()interrupt1
{
inti;
EA=0;//关定时器
TR0=0;
ale=1;
for(i=0;i<5;i++)//启动AD采集,分别采集5次
;
start=1;
for(i=0;i<5;i++);
;
start=0;
ale=0;
TL0=0x08;//重新赋初值
TH0=0x0A2;
TR0=1;
EA=1;
}
/*********外部中断1服务程序*******/
voidint1()interrupt2
{
unsignedinttemp;
chari,j;
EA=0;
temp=P1/256.0*5*1000;//转化为显示的电压值
i=temp%1000/100;
j=temp%100/10;
P0=(j<<4)+temp%10;//送数码管显示
P2=((temp/1000)<<4)+i;
EA=1;
}
本科生能力拓展训练成绩评定表
姓名
性别
专业、班级
题目:
答辩或质疑记录:
成绩评定依据:
最终评定成绩(以优、良、中、及格、不及格评定)
指导教师签字:
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 AD 转换 模块 单片机 仿真 语言 开发 综述