可用于proteus仿真的用89C52单片机和TLC2543实现三路AD转换的电路图和51C程序
基于Proteus的单片机AD转换仿真实验
基于Proteus的单片机A/D转换仿真实验作者:杨欢杜少华袁国锋陈晓来源:《教育教学论坛》2019年第30期摘要:A/D转换器是一种能把输入模拟电压或电流变成与其成正比的数字量的电路芯片,它广泛应用在单片机的前向输入通道中。
文章采用ADC0804单通道8位并行接口芯片作为A/D转换器完成数据转换,控制器使用美国ATMEL公司的增强型AT89C52单片机,对转换完成后得到的数字量经过单片机P1口输出到8个LED发光二极管上显示。
使用Keil C51编程软件,编译成功后,用Proteus仿真软件设计电路原理图,实现A/D转换过程并显示转换结果。
关键词:Proteus;单片机;A/D转换;仿真中图分类号:G642.0 文献标志码:A 文章编号:1674-9324(2019)30-0278-03在单片测控系统中,对非电物理量如温度、压力、流量等的测量,需经传感器先转换成连续变化的模拟电信号(电压或电流),然后再将模拟电信号转换成数字量后才能在单片机中进行处理。
实现模拟量转换成数字量的器件称为ADC(A/D转换器)。
单片机处理完毕的数字量,有时根据控制需求转换为模拟信号输出。
数字量转换成模拟量的器件称为DAC(D/A转换器)[1]。
本文将介绍一种基于Proteus的A/D转换仿真实现过程,A/D转换器使用ADC0804单通道8位并行接口芯片完成数据转换,控制器使用美国ATMEL公司的增强型AT89C52单片机,转换结果经过单片机P1口送到8个LED发光二极管上显示输出。
通过该仿真实验可以清楚地了解A/D转换的原理,直观地看到A/D转换的对比结果。
一、A/D转换芯片ADC0804简介A/D转换器(ADC)把模拟量转换成数字量,单片机才能进行数据处理。
随着超大规模集成电路技术的飞速发展,大量结构不同、性能各异的A/D转换芯片应运而生。
对设计者来说,只需合理地选择芯片即可。
現在部分单片机片内也集成了A/D转换器,位数为8位、10位或12位,且转换速度也很快,但是在片内A/D转换器不能满足需要的情况下,还是需要扩充。
AD转换程序(ADC0808TLC2543)
Lesson6-4:ADC0808数字电压表,测量范围0~5V,仿真通过#include <reg51.h>#define uchar unsigned char#define uint unsigned intuchar a[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴极段码uchar b[4];//存放4位显示的数sbit START=P2^4;sbit OE=P2^6;sbit EOC=P2^5;void mdelay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void show(void){uint i;uchar c=0x01;for(i=0;i<4;i++){P1=(c<<i);P3=b[i];if(i==2)//显示小数点P3=P3|0x80;mdelay(1);}}void main(void){uint shuju=0;while(1){START=1;START=0;//下降沿启动转换信号while(EOC==0)//判断是否转换结束,EOC=0正在进行转换{OE=1;}shuju=P0;shuju=shuju*1.0/255*500;//放大100倍OE=0;b[0]=a[shuju%10];//个位b[1]=a[shuju%100/10];//十位b[2]=a[shuju/100];//百位b[3]=a[shuju/1000];//最高位始终为0show();}}Lesson6-4:TLC2543数字电压表,测量范围0~5V,1路模拟输入,采用4位数码管显示,仿真通过。
#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intuchar a[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴极段码uchar b[4];//存放4位要显示的数sbit CLOCK=P2^7; /*2543时钟*/sbit D_IN=P2^6; /*2543输入*/sbit D_OUT=P2^4; /*2543输出*/sbit _CS=P2^5; /*2543片选*/void mdelay(uint z)//1ms延时子程序{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void delay(uchar n){uchar i;for(i=0;i<n;i++){_nop_();}}/**************************************名称:read2543功能:TLC2543驱动模块输入参数:port通道号输出参数:ad转换值*************************************/uint read2543(uchar port){uint ad=0,i;CLOCK=0;_CS=0;port<<=4;//通道号左移4位for(i=0;i<12;i++)//没有设置控制字,默认输出数据为12位,高位先送出,输出数据的格式为2进制{if(D_OUT) ad|=0x01;//转换后的值高位先送出D_IN=(bit)(port&0x80);//通道值高位先送出CLOCK=1;delay(3);CLOCK=0;delay(3);port<<=1;ad<<=1;}_CS=1;ad>>=1;//循环中多左移了一位return ad;}void show(void)//数码管显示子程序{uint i;uchar c=0x01;for(i=0;i<4;i++){P1=(c<<i);P3=b[i];if(i==2)//显示小数点P3=P3|0x80;mdelay(1);}}void main(void){uint ad=0;while(1){ad=read2543(0);ad=ad*1.0/4096*500;//b[0]=a[ad%10];//个位b[1]=a[ad%100/10];//十位b[2]=a[ad/100];//百位b[3]=a[ad/1000];//最高位始终为0show();}}附:功能与前例相同,但是读2543的函数不同#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intuchar a[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f, 0x6f};//共阴极段码uchar b[4];//存放4位要显示的数sbit D_CLOCK=P2^7;sbit D_IN=P2^6;sbit D_OUT=P2^4;sbit D_CS=P2^5;void mdelay(uint z)//1ms延时子程序{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}/**************************************名称:read2543功能:TLC2543驱动模块输入参数:port通道号输出参数:ad转换值*************************************///TI TLC2543 12位AD驱动程序,51晶振是11.0592MHz的。
单片机实验(AD转换)
实验三 A/D、D/A转换实验一、实验目的1.熟悉DAC0832并行接口数模转换器和TLC2543串行接口模数转换器的基本原理和编程方法。
2.进一步熟悉单片机应用系统开发步骤和方法。
二、实验电路实验所用元件清单如下表所示:1. 串行A/D转换器TLC25432.并行D/A转换器DA0832三、相关知识(一)串行A/D转换器TLC25431. TLC2543的特性与引脚TLC2543是TI公司的TLC2543 12位串行A/D转换器,使用开关电容逐次逼近技术完成A/D转换过程。
由于是串行输入结构,能够节省80C51系列单片机的I/O资源,而且价格适中。
主要特点如下:●12位分辨率A/D转换器。
●在工作温度范围内10 s转换时间。
●11个模拟输入通道。
●3路内置自测试方式。
●采样率为66kbps。
●线性误差+1LSB(max)。
●有转换结束(EOC)输出。
●具有单、双极性输出。
●可编程的MSB或LSB前导。
●可编程的输出数据长度。
2. TLC2543的工作过程TLC2543的工作过程分为两个周期:I/O 周期和实际转换周期。
1)I/O周期I/O周期由外部提供的I/O CLOCK定义,延续8、12或16个时钟周期,决定于选定的输出数据长度。
器件进入I/O周期后同时进行两种操作。
(1)在I/O CLOCK的前8个脉冲的上升沿,以MSB前导方式从DA TA INPUT端输入8位数据流到输入寄存器。
其中前4位为模拟通道地址,控制14通道模拟多路器从11个模拟输入和3个内部自测电压中,选通一路送到采样保持电路,该电路从第4个I/O CLOCK脉冲的下降沿开始,对所选信号进行采样,直到最后一个I/O CLOCK脉冲的下降沿。
I/O周期的时钟脉冲个数与输出数据长度(位数)有关,输出数据长度由输入数据的D3、D2选择为8、12或16位。
当工作于12或16位时,在前8个时钟脉冲之后,DATA INPUT无效。
(2)在DATA OUT端串行输出8、12或16位数据。
tl2543ad转换报告
实验名称:tl2543ad转换报告实验题目:完成tlc2543的ad转换实验,作仿真图,画出流程图;实验流程图:模拟信号stc89c51单片机数码管显示时序图:所用为12位ad转换:分析:1.上电时,EOC=“1”,CS=“1”2.使CS下降,前次转换结果的MSB即A11位数据输出到Dout供读数。
3.将输入控制字的MSB位即C7送到Din,在CS之后tsu>=1.425us后,使CLK 上升,将Din上的数据移入输入寄存器。
4.CLK下降,转换结果的A10位输出到Dout供读数。
5.在第4个CLK下降时,由前4个CLK上升沿移入寄存器的四位通道地址被译码,相应模入通道接通,其模入电压开始时对内部开关电容充电。
6.第8个CLK上升时,将Din脚的输入控制字CO位移入输入寄存器后,Din 脚即无效。
7.第11个CLK下降,上次AD结果的最低位AO输出到Dout供读数。
至此,I/O 数据已全部完成,但为实现12位同步,仍用第12个CLK脉冲,且在其第12个CLK 下降时,模入通道断开,EOC下降,本周期设置的AD转换开始,此时使CS上升。
8.经过时间tconv<=10us,转换完毕,EOC上升。
9.使CS下降,转换结果的MSB位B11输出到Dout供读数。
10.将新周期的输入控制字的MSB位D7送到Din,在CS下降之处,tSU时间处由CLK上升将Din数据移入输入寄存器。
11.CLK下降,将AD结果的B10位输出到Dout。
对应引脚:1~9、11、12——AIN0~AIN10为模拟输入端;15——CS 为片选端;17——DIN 为串行数据输入端;(控制字输入端,用于选择转换及输出数据格式)16——DOUT为A/D转换结果的三态串行输出端;(A/D转换结果的输出端。
)19——EOC为转换结束端;18——CLK为I/O时钟;(控制输入输出的时钟,由外部输入。
)14——REF+为正基准电压端;13——REF-为负基准电压端;20——VCC为电源;10——GND为地。
基于单片机的数字电压表设计说明书
课程设计题目: 基于单片机的数字电压表设计专业:电气工程及其自动化班级:学号:学生姓名:指导教师:2010年9月8日数字电压表(Digital Voltmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。
传统的指针式电压表功能单一、精度低,不能满足数字化时代的需求,采用单片机的数字电压表,由精度高、抗干扰能力强,可扩展性强、集成方便,还可与PC进行实时通信。
目前,由各种单片A/D 转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,示出强大的生命力。
与此同时,由DVM扩展而成的各种通用及专用数字仪器仪表,也把电量及非电量测量技术提高到崭新水平。
本章重点介绍单片A/D 转换器以及由它们构成的基于单片机的数字电压表的工作原理。
关键词:数字电压表 A/D 转换器 PC 电压测量AbstractDigital voltage meter (Digital V oltmeter) referred to as DVM, it is the use of digital measuring technology, the continuous analog (DC input voltage) into a non-continuous, discrete digital form and to display the instrument.Analog voltage meter features a traditional single, low accuracy, can not meet the digital age, using the single chip digital voltage meter, from the high precision, anti-interference ability, scalability, Ji Cheng convenience, and PC can communicate in real time.At present, by a variety of single A / D converter consisting of digital voltage meter, has been widely used in electronic and electrical measurement, industrial automation, instrumentation, automated test systems, intelligent measurement, showing strong vitality.At the same time, the DVM extension to the various general and specific digital instruments, but also the power and non-power measurement up to a new level.This chapter focuses on single-chip A / D converter, and they form by the microcontroller-based digital voltmeter works.Keywords: digital voltmeter A / D converter voltage measurement PC目录1 设计方案 (6)1.1 A/D转换部分 (6)1.2 电源部分 (7)2 系统硬件电路设计 (8)2.1 单片机芯片 (8)2.2 89C51与外围电路的接口 (10)3 详细设计 (14)3.1复位电路 (14)3.2电源电路 (16)3.3 程序框图 (17)3.4 源程序 (19)4 总结 (28)参考文献 (29)1 设计方案在电量的测量中,电压、电流和频率是最基本的三个被测量,其中电压量的测量最为经常。
蓝桥杯单片机的ad转换代码
蓝桥杯单片机的ad转换代码全文共四篇示例,供读者参考第一篇示例:蓝桥杯是全国性的计算机大赛,是中国最具影响力和参与度最高的信息学竞赛之一。
单片机比赛一直是蓝桥杯的重点项目之一。
而在单片机的项目中,AD转换是一个常见的需求,因为在很多实际应用中,我们需要将模拟信号转换为数字信号进行处理。
AD转换(Analog to Digital Conversion)是单片机中一个非常重要的功能模块,它可以将模拟信号转换为数字信号,以便单片机可以对信号进行处理和分析。
在单片机中实现AD转换是一项很有挑战性的任务,需要熟练掌握相关知识和技术。
下面我们来看一段关于蓝桥杯单片机的AD转换代码,以帮助大家更好地理解和掌握这个技术。
```c#include <reg52.h>sbit ADC_CS = P1^0;sbit ADC_CLK = P1^1;sbit ADC_DATA = P1^2;unsigned int ADC_Value; void Delay5us(){_nop_();_nop_();_nop_();_nop_();_nop_();}ADC_CLK = 1;ADC_Value = 0;for(i = 0; i < 10; i++){ADC_CLK = 0;Delay5us();ADC_Value <<= 1;if(ADC_DATA)ADC_Value++;ADC_CLK = 1;}ADC_Value = ADC_Value >> 1;}// 在这里添加对ADC_Value的处理和应用逻辑}}```AD转换在单片机应用中有着广泛的用途,比如温度采集、光强检测、电压测量等等。
掌握好AD转换的原理和代码实现,可以帮助我们更好地设计和开发单片机应用,并在蓝桥杯的比赛中取得更好的成绩。
希望以上内容对大家有所帮助,也希朼大家能够多多实践,不断提升自己在单片机领域的技术水平。
STC89C52与AD、DA转换器的接口
11.1.2 STC89C52与并型8位A/D转换器 ADC0809的接口
1II.NN34ADC1208022987 芯片IINN21 ---逐•分次辨比率为较8型位ADC芯片
IN5 3
26
IN0
IN6 4
25
A
•转换时间100μ S
IN7 5
24
B
START 6
23
C
•工作量程为0~+5V
ADC0809
工作时序
START正脉冲启动AD转换
ALE锁存ADDA、ADDB、ADDC
EOC由高变低(AD启动后) 保持低电平(转换期间) 由低变高(转换结束)
OE正脉冲,打开三态门输出
2. STC89C52与ADC0809的接口
单片机读取ADC的转换结果时,可采用查 询和中断控制两种方式。
(1)查询方式
查询方式是在单片机把启动信号送到 ADC之后,执行其他程序,同时对ADC0809的 EOC脚不断进行检测,以查询ADC变换是否已 经结束,如查询到变换已经结束,则读入转 换完毕的数据。
第十一章 STC89C52与A/D、D/A转换器的接口
11.1 STC89C52与A/D转换器的接口 11.2 STC89C52与D/A转换器的接口
D/A转换器(Digital to Analog Converter)——能把数字 量转换为模拟量的电子器件(简称为DAC)。
A/D转换器(Analog to Digital Converter)——能把模拟 量转换成相应数字量的电子器件(简称为ADC)。
11.1 STC89C52与A/D转换器的接口
1.概述
A/D转换器把模拟量转换成数字量, 以便于单片机进行数据处理。A/D转换一般 要经过采样、保持、量化及编码4个过程。 在实际电路中,有些过程是合并进行的, 如采样和保持,量化和编码在转换过程中 是同时实现的。
AT89S52单片机与DAC、ADC的接口
量的位数表示。显然,二进制位数越多,分辨率越高,即D/A转 换器输出对输入数字量变化的敏感程度越高。例如,8位的D/A 转换器,若满量程输出为10V,根据分辨率定义,则分辨率为 10V/2n,分辨率为10V/256=39.1mV,即输入的二进制数最低位 数字量的变化可引起输出的模拟电压变化39.1mV,该值占满量 程的0.391%,常用符号1LSB表示。 同理: 10位D/A转换 1 LSB=9.77mV=0.1%满量程 12位D/A转换 1 LSB=2.44mV=0.024%满量程
第10章 AT89S52单片机与DAC、
ADC的接口
1
第10章 AT89S52单片机与DAC、ADC的接口
10.1 单片机扩展D/A转换器概述 10.2 单片机扩展并行8位DAC0832的设计
10.2.1 DAC0832简介 10.2.2 单片机与8位D/A转换器0832的接口设计 10.3 AT89S52单片机与12位D/A转换器AD667的接口设计 10.3.1 12位D/A转换器AD667简介 10.3.2 AD667与AT89S51单片机的接口设计 10.3.3 AD667使用中的技术细节 10.4 AT89S51与串行输入的12位D/A转换器AD7543的接
15
IOUT2:D/A转换器电流输出2端,IOUT2 + IOUT1 = 常数。 Rfb:外部反馈信号输入端,内部已有反馈电阻Rfb,根据需 要也可外接反馈电阻。 VCC:电源输入端,在+5V~+15V范围内。 DGND:数字信号地。 AGND:模拟信号地,最好与基准电压(为模拟信号)共地。
DAC0832内部的三部分电路如图10-2所示。“8位输入寄存 器”用于存放单片机送来的数字量,使输入数字量得到缓冲和 锁存,由LE1*=0(M1=1)加以控制;“8位DAC寄存器” 为 第二级寄存器,由LE2*= 0(M3=1)控制,用于将“8位输入寄
第11章89C51单片机与DA、AD转换器的接口
1、D/A转换器概述
❖将数字量转换为模拟量,以便操纵控制对象。
单片机
D/A转换 控制对象
❖使用D/A转换器时,要注意区分:
* D/A转换器的输出形式; * 内部是否带有锁存器。 ❖D/A转换器集成电路芯片种类很多:
按输入的二进制数的位数分类,有八位、十位、十二位和十六位等。 按输出是电流还是电压分类,分为电压输出器件和电流输出器件。
MOV B,A
;存数
RETI
;返回
查询方式:
ORG 0000H
;主程序入口地址
AJMP MAIN
;跳转主程序
ORG 1000H
;中断入口地址
MAIN: MOV DPTR,#0007H ;指向0809 IN7通道地址
MOVX @DPTR,A ;启动A/D转换
L1: JB P3.3 L1
;查询
MOVX A,@DPTR ;读A/D转换结果
±2.5V,±5V和±10V; ✓内含高稳定的基准电压源,可方便地与4位、8位或16位微 处理器接口; ✓双电源工作电压:±12V~±15V。
二、A/D转换器接口
❖A/D转换器的概述 ❖典型芯片ADC0809 ❖ADC0809的应用 ❖与AD1674的接口设计 ❖与MC14433的接口设 计
1、A/D转换器的概述
多路同步输出,必须采用双缓冲同步方式。
1#DAC0832占有两个端口地址FDH和 FBH。 2#DAC0832的两个端口地址为FEH和 FBH
例11-2 设AT89C51单片机内部RAM中有两个长度为20的数据块, 其起始地址为分别为addr1和addr2,请根据图11-7所示,编写能把 addr1和addrr2中数据从1#和2#DAC0832同步输出的程序。程序中 addr1和addr2中的数据,即为绘图仪所绘制曲线的x、y坐标点。
TLC2543在89C51单片机数据采集系统中的应用[1]
T LC2543在89C51单片机数据采集系统中的应用ΞApplication of T LC2543in MCU Data Acquisition System姚 远1,王 赛2,凌毓涛1(1.华中师范大学信息技术系 湖北武汉430079;2.华中师范大学计算机科学系 湖北武汉430079)【摘 要】 介绍了单片机数据采集系统的硬件原理和软件设计。
该系统以89C51单片机为核心,以12位TLC2543为串行模数转换器,由MC14489构成采集数据实时显示系统,带有RS2232通信接口,系统具有易实现、易编程、可移植、体积小、功耗低等优点,具有良好的推广与应用价值。
关键词:TLC2543,单片机,数据采集【Abstract】 The paper introduces the hardware principle and the software design of the MCU data acquisition system based on89C51,in which the12bit TLC2543acts as the serial A/D converter and the RS2232as the communication interface,and the real2time displaying system is constructed by MC14489. The system has the advantages of easily realize,program and transplant,and it has the small volume and low power,etc..It is therefore very promising and valuable.K eyw ords:TLC2543,MCU,data acquisition1 T LC2543芯片介绍TLC2543是TI公司的具有11个通道的12位开关电容逐次逼近串行A/D转换器,采样率为66kbit/ s,采样和保持由片内采样保持电路自动完成。
基于AD转换模块的单片机仿真和C语言开发课程设计
课程设计任务书学生姓名:专业班级:电信0904 指导教师:阮军工作单位:信息工程学院题目: 基于A/D转换模块的单片机仿真和C语言开发初始条件:本课程设计,要求用使用Proteus仿真软件进行系统设计与仿真。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1、课程设计工作量:1周内完成对系统的设计、仿真。
2、技术要求:1)设计一种多路模拟信号采集模块,从多个通道轮流采集数据一次,并将采集的结果存放在数组中。
要求进行电路仿真实验,并使用C语言进行程序的开发。
2)要求学生主动思考,自主发挥,实现系统的特色功能。
3、查阅至少5篇参考文献。
按《武汉理工大学课程设计工作规范》要求撰写设计报告书。
全文用A4纸打印,图纸应符合绘图规范。
提交报告的主要内容:(使用Proteus 7.5 sp3)1)题目2)仿真所完成的主要功能和特色简介——摘要(特别是自己扩展的功能,根据特色功能评优)3)Proteus仿真的基本流程4)所使用芯片以及引脚功能简介(需要提供对应芯片DataSheet的下载链接)5)设计方案与工作原理,给出仿真电路图6)实验记录与结果分析时间安排:1)2012 年7 月9 日,查阅相关资料,学习设计原理。
2)2012 年7 月10~11 日,方案选择和电路设计仿真。
3)2012 年7 月12 日,设计说明书撰写。
4)2012 年7 月13 日上交报告,同时进行答辩。
指导教师签名:年月日系主任(或责任教师)签名:年月日目录一、软件介绍 (3)1.1、protues仿真软件 (3)1.2、C编译器Keil介绍 (4)二、总体设计 (4)三、硬件模块设计 (5)3.1、控制系统模块 (5)3.2、AD数据采集模块 (6)3.2.1、tlc2543引脚介绍 (6)3.2.2、TLC2543工作时序 (8)3.2.3、转换过程 (9)3.3、液晶显示模块 (9)3.4、键盘模块 (10)四、软件设计 (10)五、实验记录与结果分析 (11)5.1、仿真流程 (11)5.2、仿真结果 (12)5.3、实物测试 (12)六、心得体会 (13)七、参考文献 (14)附录一: (15)附录二: (16)附录三: (17)摘要:本设计要求作出一种多路模拟信号采集模块,从多个通道轮流采集数据一次,并将数据保存于记录。
基于ATC与TCL的双通道采集电压表格模板的设计
精心整理基于AT89C51与TCL2543的双通道采集电压表的设计姓名:学号:专业:测控技术与仪器2014年3月摘要ti 关键词1.引言转换理。
本文介绍了以AT89C51单片机为核心、以TLC2543为转换芯片采样、以四位一体七段数码管显示的具有一定精度电压测量的数字电压表。
2.硬件设计该系统主要包括以下几个模块:时钟模块、复位模块、控制模块、A/D 转换模块、以及显示模块,其中时钟模块和复位模块是必不可少的部分呢。
时钟模块选择频率为11.0592mhz的晶振,由于是在proteus仿真,则频率大小通过软件设置来完成。
复位模块包括上电复位和手动复位两种方式,按钮s1就是用来实现手动复位操作的。
控制模块比较简单,主要是以单片机AT89C51为控制核心,但是它要通过软件编写程序再载入单片机中,才能实现处理和控制功能。
A/D转换模块是本系统中最为关键的部分,它要实现将采集到的连续变化的模拟3.2.1 控制字的格式控制字为从DATAINPUT端串行输入的8位数据,它规定了TLC2543要转换的模拟量通道、转换后的输出数据长度、输出数据的格式。
3.2.2 转换过程上电后,片选CS必须从高到低,才能开始一次工作周期,此时EOC为高,输入数据寄存器被置为0,输出数据寄存器的内容是随机的。
开始时,CS片选为高,I/OCLOCK、DATAINPUT被禁止,DATAOUT呈高阻状,EOC为高。
4.软件设计系统程序的内容一般包括:延时子程序、显示子程序、数据采集子程序、主程序等等。
主程序流程图见下图所示。
5.仿真结果如下图图1系统硬件电路仿真图(通道0采集的数据)图2系统硬件电路仿真图(通道1采集的数据)6数据分析6.1在上图1当中数码管显示的测量电压值是通道0采集的,数值是2.499V,而虚拟电压表的值是+2.50v;在上图2当中数码管显示的测量电压值是通道1采集的数值是3.399V,而虚拟电压表的值是+3.40v经过多次测验,可以发现所设计的数字电压表的最大误差是0.001v,二者在同一个数码管上交替出现,满足任务要求。
stc89c52驱动ADC0832数模转换与显
//LCD忙状态检测
bit lcd_busy_check()
{
bit result;
rs=0;rw=1;e=1;
delay4us();
result=(bit)(P0&0x80);
e=0;return result;
}
//led命令
void lcd_write_command(uchar cmd)
{
lcd_write_command(0x0c);delayms(1);
lcd_write_command(0x06);delayms(1);
lcd_write_command(0x01);delayms(1);
}
//获取AD转换结果
uchar get_ad_result()
{
uchar i,dat1=0,dat2=0;
//起始控制位置
cs=0;
clk=0;
dio=1;_nop_();_nop_();
clk=1;_nop_();_nop_();
//第一个下降沿之前,设DI=1/0
//选择单端/差分(SGL/DIF)模式中的单端输入模式
clk=0;dio=1;_nop_();_nop_();
clk=1_nop_();_nop_();
while(lcd_busy_check());
rs=0;rw=0;e=0;
_nop_();_nop_();
P0=cmd;delay4us();
e=1;delay4us();e=0;
}
//设置lcd显示位置
void set_disp_pos(uchar pos)
{
lcd_write_command(pos|0x80);
基于单片机AT89C52的信号发生器设计
基于单片机AT89C52的信号发生器设计作者:王泓婷金宝声陈昊来源:《科技创新导报》 2015年第9期王泓婷金宝声陈昊(沈阳理工大学信息科学与工程学院辽宁沈阳 110159)摘要:该文利用单片机AT89C52和DAC0832模块设计可以同时产生三角波、方波和正弦波的信号发生器。
在单片机的输出端口接DAC0832进行D/A转换,再通过运算放大器进行波形调整,最后输出波形接在波形显示器上显示。
关键词:多路信号发生器单片机 DAC0832中图分类号:TN911 文献标识码:A 文章编号:1674-098X(2015)03(c)-0044-011 系统总体设计该文设计的信号发生器将数字信号以波形的形式显示出来,系统主要包括三大模块:AT89C52主控模块、DAC0832数模转换模块和系统显示模块。
AT89C52作为系统的控制中枢,依次决定三路波形信号的选通。
通过由按键进行波形的选择从而更换频率,DAC0832进行数据锁存,将数字信号转换成模拟信号,然后经由放大电路将波形信号在显示器上显示出来[1]。
2 波形设计单片机不能产生平滑的正弦波,而是通过对正弦波的上的每个点取样再用数模转换模块(DAC)输出的,所以要输出正弦波,首先要知道它在某个时刻它的值是多少,于是就要有相应的正弦波表[2]。
一般的DAC都是0N的输出,所以还要把表中的值映射到0N的整数空间中,用的方法如是(1-1):Y=sin(x)*N/2+N/2 (1-1)然后再对Y取整。
DAC0832数据端口给出的数据范围是0~255,一共256个。
前0~127表示是X轴上方的电压值(也可能是下方),128~255是X轴下方的电压值。
因此我们可以得到数据端口的数值的具体量,即式(1-2):value=128*SIN(360*X/255/360*2*3.14)+128 (1-2)三角波产生原理:当电压随时间线性增加到一定时间又线性降低时,就形成了三角波。
可用于proteus仿真的用89C52单片机和TLC2543实现三路AD转换的电路图和51C程序
见网上有人问到TLC2543多路转换时出现通道之间串位的问题,我也遇到了,例如:输入的是通道0,读的数却是通道1,等等。
我分析了一下,出现问题的原因如下:书上和网上的相关程序很多,但是有一个问题大家可能会遇到,就是读出的数不是想要的通道的数值,我就谈谈这个的问题。
书上印的、网上传的关于TLC2543转换输出12位的子函数的形参大多是uchar型的,如调取子函数:read(uchar port)。
调取子函数时以十六进制表示输入的通道数,如通道0为0x00,通道1为ox10等等,可是子函数里有一条是port<<=4;这让只有八位的uchar port向左移四位之后,原来的包含通道信息的高四位被舍弃,变为原来的低四位,通道数肯定不是你想要的那个通道了。
以uchar为形参,用十六进制表示通道数时去掉port<<=4;才是正确的。
如果你非要加上port<<=4;也可以,此时形参设定为uchar,那你就输入十进制的通道数,如通道0为0,通道1为1,如通道1,写为二进制是0001,那么port就是0000 0001,左移4位正好变为0001 0000,也是对的。
而偏偏有人输入的是十进制的通道数,再加上1条左移,那读出的数肯定就不对了。
如果设定通道变量为uint port,这时port为16位整型,port的高8位都是0,左移4位之后剩下的高4位仍然是0,此时余下的12位加上左移补上的4个0,12位输出的同时正好把前12位同步输入。
这个时候,左移4位这条指令也是必不可少的。
以下给出TLC2543转换三路电压模拟信号,输出12位数字信号的C程序和proteus仿真电路图,希望对需要的人有帮助。
图是由我自己支掉好多程序之后剩下的部分,所以电路图还可以再简单点,如不用或者少用74LS373锁存器,我没简化,直接附上了。
西北农林科技大学李强2012.2.15 #include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charsbit ADout=P1^0;sbit ADin=P1^1;sbit CS=P1^2;sbit CLK=P1^3;sbit EOC=P1^4;sbit LE1=P1^6;sbit LE2=P1^7;uchar duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x7c};uchar D=0,wei[]={0xfe,0xfd,0xfb,0xf7,0xdf,0xef};float k,z;uint n;//////////延时子函数void delay(uint us){uchar i;for(i=0;i<us;i++) _nop_();}////////数码管显示子函数void display(uint AD){uchar q,b,s,g; //////千位、百位、十位、个位q=AD/1000;b=AD/100%10;s=AD/10%10;g=AD%10;P0=0xff;LE1=1;P0=wei[0];LE1=0;LE2=1;P0=duan[q];LE2=0;delay(10);P0=0xff;LE1=1;P0=wei[1];LE1=0;LE2=1;P0=duan[b];LE2=0;delay(10);P0=0xff;LE1=1;P0=wei[2];LE1=0;LE2=1;P0=duan[s];LE2=0;delay(10);P0=0xff;LE1=1;P0=wei[3];LE1=0;LE2=1;P0=duan[g];LE2=0;delay(10);}///////TLC2543转换和读取子函数,只转换了三路模拟电压信号。
89C52单片机控制PWM调速电路实现小功率直流电机的转速
89C52单片机控制PWM调速电路实现小功率直流电机的转速调节,并要将其实时转速用LED 管显示出来。
而本系统必须符合以下几点要求:(1) 在(1000—5500)转/分内对直流电机进行任意调速,最小调速级差为1转/分。
(2)电机能在所设速度下稳定运转,运转速度与设定速度之差小于±20转/分。
(3)电机启动和加减80%额定负载时,其转速能迅速回到设定值,转速超调±5%内。
(4)利用按键和LED数码管设置速度,设置方便,快捷。
(5)利用LED数码管实时显示电机速度。
(6)电机能进行正反转控制。
控制方面,本设计是采用定时器控制I/O口输出PWM信号驱动斩波电路控制电机运转和调速;利用单片机外部中断引脚的捕获功能、电机同轴带缺口的圆盘、光电耦合器来测量转速;并将测得转速和设定转速进行PI运算后输出,实现闭环控制;转向调节则是用的桥式电路。
显示是利用8位LED数码管,用按键进行设定。
下面简单介绍下硬件组成和一些软件原理:一、硬件电路。
1、单片机选用的是STC的89C52,20MHz晶振。
2、显示部分比较简单,用的8位7段数码管同时显示设定速度和实时速度。
采用74LS164串行移位输出,只占用单片机3个I/O口,刷新频率100Hz。
3、PWM驱动电路。
使用了9012和8050两个三极管来驱动,相信网上很多的,也不用我多说,只是别忘了加上续流二极管和两个三极管之间的限流电阻就是。
4、测速电路。
测速电路用的是光耦测量转动圆盘引起的脉冲宽度,从而可得单片机的实时速度,精度很高,可达千分之一。
用的是外部中断的。
好像是捕获模式,忘记了~呵呵!5、转向调节电路。
转向调节,由于是后来加上去的,所以就没有使用单片机控制,直接用硬件实现,但其实原理是一样的。
原理是利用开关控制继电器,然后控制桥路对电机实施转向控制。
另外用一个同轴电机按正反方向接2个LED用来指示方向。
PS:因为这是小功率电机,所以就算没有制动电路,强制转向,也不会对电机造成损坏。
89C52A作为主控芯片的数字交通灯设计
河南工业职业技术学院毕业设计——数字交通灯专业:班级:学号:姓名:指导老师:数字交通灯毕业设计任务书一、设计任务:用89C52A作为主控芯片,通过C语言编些程序,用LED代替各个路口交通灯,通过keil和Proteus联合调用来实现对十字路口交通灯控制系统的模拟。
二、设计内容:设计内容:用keil编写C程序,通过软件延时实现交通灯控制;在Proteus中设计出电路图,其中各个路口交通灯用led模拟,计时器用八段数码管显示;z最后通过keil和Proteus联合调用实现交通灯的模拟。
设计效果: 软件延时控制南北(A﹑C)路口红灯亮65s0,东西(B﹑D)路口绿灯亮60秒;然后南北(A﹑C)路口不变,东西(B﹑D)路口绿灯闪5下,然后南北东西路口黄灯亮;再变为南北(A﹑C)路口绿灯亮60s,东西(B﹑D)红灯亮65s秒;然后南北(A﹑C)路口绿灯闪5下,再黄灯亮,B ﹑D不变。
再循环······。
并将绿灯剩余时间显示在LED上 (该项编程可将其结果显示在计算机屏幕上代替)。
如下图十字交通灯模拟图三、设计要求:(1). 设计硬件原理图(印制版图),(2). 制作实物或软件仿真或实验板上模拟,任选一种;(3). 设计软件流程图;(4). 编程并调试;(5). 软硬件综合调试。
摘要交通控制系统是近现代社会随着物流、出行等交通发展产生的一套独特的公共管理系统。
要保证高效安全的交通秩序,除了制定一系列的交通规则,还必须通过一定的科技手段加以实现。
本文在对目前交通控制进行深入分析的基础上,用89C52A作为主控芯片,通过C语言编些程序,用LED代替各个路口交通灯,通过Keil和Proteus联合调用来实现对十字路口交通灯控制系统的模拟。
近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。
在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。
使用89C2051实现AD的使用方法和程序AD转换设计
使用89C2051实现AD的使用方法和程序AD转换设计一、选题的背景和意义:随着数字电子技术的迅速发展,用数字电路来处理模拟信号的情况更加普及。
这就涉及到模拟信号与数字信号间的相互转换:从模拟信号到数字信号的转换称模/数转换(又称A/D转换),完成A/D转换的电路称A/D转换器(简称ADC); 从数字信号到模拟信号的转换称数/模转换(又称D/A转换),完成D/A转换的电路称D/A转换器(简称DAC)。
二、课题研究的主要内容:A/D转换是将模拟信号转换为数字信号。
转换过程通过取样、保持、量化和编码四个步骤完成。
通常取样和保持是利用同一个电路连续过程进行的,量化和编码也是在转换过程中同时实现。
模拟/数字(A/D)转换一,逐次逼近式模/数(A/D)转换器原理二,逐次逼近A/D本组成三,典型模/数转换器AT89C2051三、本课题要研究或解决的问题和拟采用的研究手段(途径):单片机系统:AT89C2051是一个低电压,高性能CMOS 8位单片机,片内含2k bytes的可反复擦写的只读Flash程序存储器和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大AT89C2051单片机可为您提供许多高性价比的应用场合。
摘要AT89C2051是一个功能强大的单片机,它将AT89C51的P0口、P2口、EA/Vcc、ALE/PROG、口线简化后,形成的一种仅20个引脚的单片机,相当于INTEL8031的最小应用系统。
这对于一些不太复杂的控制场合,仅用一片AT89C2051就足够了。
由于将多功能的8位CPU和2KB闪速存储器以及模拟电压比较器集成到单个芯片上,从而成为一种多功能的微处理器,这为许多嵌入式控制提供了一种极佳的方案,使传统的51系列单片机的体积大、功耗大、可选模式少等诸多困扰设计工程师们的致命弱点不复存在。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
见网上有人问到TLC2543多路转换时出现通道之间串位的问题,我也遇到了,例如:输入的是通道0,读的数却是通道1,等等。
我分析了一下,出现问题的原因如下:书上和网上的相关程序很多,但是有一个问题大家可能会遇到,就是读出的数不是想要的通道的数值,我就谈谈这个的问题。
书上印的、网上传的关于TLC2543转换输出12位的子函数的形参大多是uchar型的,如调取子函数:read(uchar port)。
调取子函数时以十六进制表示输入的通道数,如通道0为0x00,通道1为ox10等等,可是子函数里有一条是port<<=4;这让只有八位的uchar port向左移四位之后,原来的包含通道信息的高四位被舍弃,变为原来的低四位,通道数肯定不是你想要的那个通道了。
以uchar为形参,用十六进制表示通道数时去掉port<<=4;才是正确的。
如果你非要加上port<<=4;也可以,此时形参设定为uchar,那你就输入十进制的通道数,如通道0为0,通道1为1,如通道1,写为二进制是0001,那么port就是0000 0001,左移4位正好变为0001 0000,也是对的。
而偏偏有人输入的是十进制的通道数,再加上1条左移,那读出的数肯定就不对了。
如果设定通道变量为uint port,这时port为16位整型,port的高8位都是0,左移4位之后剩下的高4位仍然是0,此时余下的12位加上左移补上的4个0,12位输出的同时正好把前12位同步输入。
这个时候,左移4位这条指令也是必不可少的。
以下给出TLC2543转换三路电压模拟信号,输出12位数字信号的C程序和proteus仿真电路图,希望对需要的人有帮助。
图是由我自己支掉好多程序之后剩下的部分,所以电路图还可以再简单点,如不用或者少用74LS373锁存器,我没简化,直接附上了。
西北农林科技大学李强
2012.2.15 #include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit ADout=P1^0;
sbit ADin=P1^1;
sbit CS=P1^2;
sbit CLK=P1^3;
sbit EOC=P1^4;
sbit LE1=P1^6;
sbit LE2=P1^7;
uchar duan[]=
{0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x7c};
uchar D=0,wei[]={0xfe,0xfd,0xfb,0xf7,0xdf,0xef};
float k,z;
uint n;
//////////延时子函数
void delay(uint us)
{
uchar i;
for(i=0;i<us;i++) _nop_();
}
////////数码管显示子函数
void display(uint AD)
{
uchar q,b,s,g; //////千位、百位、十位、个位q=AD/1000;
b=AD/100%10;
s=AD/10%10;
g=AD%10;
P0=0xff;
LE1=1;
P0=wei[0];
LE1=0;
LE2=1;
P0=duan[q];
LE2=0;
delay(10);
P0=0xff;
LE1=1;
P0=wei[1];
LE1=0;
LE2=1;
P0=duan[b];
LE2=0;
delay(10);
P0=0xff;
LE1=1;
P0=wei[2];
LE1=0;
LE2=1;
P0=duan[s];
LE2=0;
delay(10);
P0=0xff;
LE1=1;
P0=wei[3];
LE1=0;
LE2=1;
P0=duan[g];
LE2=0;
delay(10);
}
///////TLC2543转换和读取子函数,只转换了三路模拟电压信号。
uint readAD(uchar port)
{
uchar ch,i,j;
uint ad;
ch=port;
for(j=0;j<3;j++) ///////空循环三次,为什么是三次!?
{
ad=0;
ch=port;
EOC=1;
CS=1;
CS=0;
CLK=0;
for(i=0;i<12;i++)
{
if(ADout) ad|=0x01;
ADin=(bit)(ch&0x80);
CLK=1;
CLK=0;
ch<<=1;
ad<<=1;
}
}
CS=1; /////////转换和读取数值
while(!EOC);
ad>>=1;
return(ad);
}
//主函数
void main()
{
while(1)
{
n=readAD(0x00); //得到通道0的数值
k=readAD(0x10); //得到通道1的数值
z=readAD(0x20); //得到通道2的数值
// display(n); //想检验哪一路读取的对不对,就让显示哪一路display(k);
// display(z);
} }。