基于单片机8路电压表(汇编)

合集下载

8位数字电压表C语言程序

8位数字电压表C语言程序

#include <reg51.h>#include <intrins.h>#include <absacc.h>#define uchar unsigned char#define uint unsigned int#define FOSC 11059200ul#define BAUD 9600#define T1_H 256-(FOSC/12/32/BAUD)#define T1_L 256-(FOSC/12/32/BAUD)#define T0_H 65536-(FOSC*20/(12*1000))/256 #define T0_L 65536-(FOSC*20/(12*1000))%256uchar cx;uchar cd;uchar fs;uchar ab;//定义TLC549串行总线操作端口sbit CLK=P1^0;sbit DAT=P1^1;sbit CS=P1^2;sbit com1=P1^3;sbit com2=P1^4;sbit com3=P1^5;sbit com4=P1^6;uint i;uchar bdata ADCdata; sbit ADbit=ADCdata^0; void initsys();uchar TLC549ADC(void) {uchar i;CLK=0;DAT=1;CS=0;for(i=0;i<8;i++){CLK=1;_nop_();_nop_();ADCdata<<=1;ADbit=DAT;CLK=0;_nop_();}return (ADCdata);}uchar codezixing[]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; uint qian,bai,shi,ge;void delay();void main(){uchar i;float AD_DATA; //定义A/D转换数据变量int ad_data;TLC549ADC(); //启动一次A/D转换for(i=0xff;i>0;i--) //延时{_nop_();}AD_DATA=(TLC549ADC()); //读取当前电压值A/D转换数据initsys();while(1){if(cd==1){cd=0;AD_DATA=TLC549ADC();}if(ab==1){ab=0;SBUF=AD_DATA;while(TI==0);TI=0;}ad_data=AD_DATA*5/255*100;ge=ad_data%10;shi=ad_data%100/10;bai=ad_data%1000/100;qian=ad_data/1000;for(i=0;i<4;i++){switch(i){case 0: P3=zixing[qian]; com1=0,com2=1,com3=1,com4=1;delay();break;case 1:P3=zixing[bai]&0x7f;com1=1,com2=0,com3=1,com4=1;delay();break;case 2: P3=zixing[shi]; com1=1,com2=1,com3=0,com4=1;delay();break;case 3: P3=zixing[ge]; com1=1,com2=1,com3=1,com4=0;delay();break;}}}}void timer0() interrupt 1{TH0=T0_H;TL0=T0_L;cx++;fs++; //来一次中断加1if(cx==5){cd=1;cx=0; //来20次为一次}if(fs==50){ab=1;fs=0;}}void initsys(){SCON=0x50;TH1=T1_H;TL1=T1_L;TH0=T0_H;TL0=T0_L;TMOD=0x01;TMOD=(TMOD&0x0f)|0x20;EA=1;ET0=1;ES=0; //关闭串行口TR1=1;TR0=1;}void delay(){for(i=0;i<=100;i++) _nop_();}。

基于单片机的数字电压表制作——ADC0832模数转换应用程序(C语言)

基于单片机的数字电压表制作——ADC0832模数转换应用程序(C语言)

基于单片机的数字电压表制作——ADC0832模数转换应用程序(C语言)主要部件:AT89S51 ADC0832 八段数码管关键字:ADC0832程序C语言数字电压表本文所描述的数字电压表是利用ADC0832模数转换芯片完成的。

该芯片能将0~5V的模拟电压量转换为0说实在话,量程只有5V的电压表没有什么实际的意义,而且也没有人无聊到自己会去做一个没有意义的以后做真正有用的电路打下基础。

而且,对于那些做毕业设计的同学也是一种参考。

这也就是本文的意ADC0832的资料百度一下可以找到一大堆,我就不在这里赘述了。

这里只给出连接图。

以下是程序部分:该程序是本人自编的,经测试可用,但不保证程序的可靠性及稳定性。

若有转载请标明出处。

如果有同学将本程序烧写到单片机里却不能正常工作的,请注意以下三点:1、是否将端口重新定义。

每个单片机开发板的引脚连接都是不一样的,若不加修改直接把程序烧写到2、是否正确选择通道值。

ADC0832有两个模拟输入端口(也就是我说的通道),你要先弄清楚你用的是默认使用0通道,如果0通道不行就改成1通道,反正不是0通道就是1通道。

3、如果你做的电压表在保证电路连接正确且没有以上两点问题的情况下,还是不能正常工作,请将程问题。

我有两个单片机开发板,其中一个必须要把那一行删掉才能工作。

这说明ADC0832读出的前8位与理。

我不知道到底是硬件还是软件出了问题,特此把这种现象标明。

若有哪位同学知道其原因的还请多/***********************************************************************************//*简易数字电压表制作——ADC0832模数转换应用程序(C语言版)*//*目标器件:AT89S51/*晶振:12.000MHZ/*编译环境:Keil uVision2 V2.12/***********************************************************************************//*********************************包含头文件********************************/#include <reg51.h>#include <intrins.h>/*********************************端口定义**********************************/sbit CS = P3^5;sbit Clk = P3^4;sbit DATI = P3^3;sbit DATO = P3^3;/*******************************定义全局变量********************************/unsigned char dat = 0x00; //AD值unsigned char count = 0x00; //定时器计数unsigned char CH; //通道变量unsigned char dis[] = {0x00, 0x00, 0x00}; //显示数值/*******************************共阳LED段码表*******************************/unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};/**************************************************************************** 函数功能:AD转换子程序入口参数:CH出口参数:dat****************************************************************************/ unsigned char adc0832(unsigned char CH){unsigned char i,test,adval;adval = 0x00;test = 0x00;Clk = 0; //初始化DATI = 1;_nop_();CS = 0;_nop_();Clk = 1;_nop_();if ( CH == 0x00 ) //通道选择{Clk = 0;DATI = 1; //通道0的第一位_nop_();Clk = 1;_nop_();Clk = 0;DATI = 0; //通道0的第二位_nop_();Clk = 1;_nop_();}else{Clk = 0;DATI = 1; //通道1的第一位_nop_();Clk = 1;_nop_();Clk = 0;DATI = 1; //通道1的第二位_nop_();Clk = 1;_nop_();}Clk = 0;DATI = 1;for( i = 0;i < 8;i++ ) //读取前8位的值{_nop_();adval <<= 1;Clk = 1;_nop_();Clk = 0;if (DATO)adval |= 0x01;elseadval |= 0x00;}for (i = 0; i < 8; i++) //读取后8位的值{test >>= 1;if (DATO)test |= 0x80;elsetest |= 0x00;_nop_();Clk = 1;_nop_();Clk = 0;}if (adval == test) //比较前8位与后8位的值,如果不相同舍去。

8通道的数字电压表设计报告

8通道的数字电压表设计报告

8通道的数字电压表设计方案目录第一章设计分析 (1)第二章硬件电路分析 (3)2.1单片机AT89C51的分析 (3)2.2 ADC0808的分析 (4)2.3显示译码器和LED分析 (5)第三章程序设计分析 (6)3.1主函数 (6)3.2A/D转换函数 (6)3.4中断服务函数 (6)第四章调试过程分析及仿真 (7)第五章总结 (8)第六章附录 (9)第一章设计分析设计一个8通道的电压表,基于AT89X51单片机(在professional中使用的AT89C51)和ADC0809(在professional中使用的ADC0808)芯片实现模数转换,由74247显示译码器和4位LED数码管连接并显示,具有通道自选和量程(0-5v 的电压)变换的功能。

设计方案如下:采用定时器/计数器T0、T1定时,T0定时溢出中断时对P3.7取反,输出频率为10KHZ的方波信号,作为ADC0808的转换时钟信号,T1定时1MS,定时溢出中断后,在中断服务程序中完成在数码管显示A/D转换结果的任务。

采用主程序、子程序结构。

主程序中完成定时器的初始化设置,产生A/D 转换的启动,在转换过程中判别转换是否结束。

当转换结束时,让输入允许OE 有效,将转换结果通过P0口读到单片机内部RAM单元格储存。

将二进制数转换为十进制数的程序设计成子程序,在主程序中调用。

将LED数码管的动态显示设计成子程序,在T1的中断服务程序中调用。

第二章硬件电路分析2.1单片机AT89C51的分析AT89C51 的引脚(1)工作电源端Vcc:接+5V电源Vss:接地(2)晶振引脚(时钟电路)XTAL1:芯片内部振荡电路输入端。

XTAL2:芯片内部振荡电路输出端(3)并行I/O口引脚(4)控制引脚ALE:地址锁存使能。

当ALE为高电平时,P0口上的信息为低8位地址,在ALE信号的下降沿时将P0口上的低8位地址送地址锁存器锁存起来;在ALE为低电平期间,P0口上的信息为指令或数据信息,这样就能实现低位地址的数据分离。

基于单片机的数字电压表设计

基于单片机的数字电压表设计

基于单片机的数字电压表设计数字电压表在电子技术中使用非常广泛,可以用来测量电路中的直流电压、交流电压以及各种信号的幅度等等。

基于单片机的数字电压表实现了数字电压的读取和显示,具有精确、稳定、易操作等特点,下面将介绍基于单片机的数字电压表的设计原理及实现方法。

一、系统结构基于单片机的数字电压表主要是由程序控制模块、模数转换模块和数字显示模块组成。

程序控制模块主要用来完成开机、校准、测试、功能选择等功能;模数转换模块主要将电压信号转换成数字量,供数字显示模块使用;数字显示模块主要将转换后的数字量显示在LCD液晶屏上。

二、硬件设计1.电源电路电源电路主要用来为电路提供稳定的电压和电流,本电路采用稳压电源芯片LM7805实现,稳压芯片输入端连接外部DC12V/1A电源,输出端连接电路板上的整个电路。

2.输入电路输入电路主要用来将被测电源的电压传递给单片机,常规情况下采用分压电路实现。

在本电路中,电阻R1和电容C1为RC滤波电路,起到滤波作用,防止干扰信号的影响;电阻R2是分压电路中的电阻,它根据电压值的不同设置不同的值,以保证被测电压在单片机内部转换过程中不会对单片机产生影响。

3.单片机模块单片机模块是系统的核心部分,本电路中选用STM32F103C8T6单片机实现模数转换和数码管控制,使用C 语言编写程序,通过模拟输入端口读取电压并进行模数转换,将得到的数字使用查表法将其转换为数码管控制脉冲,控制数码管的亮灭实现数字显示。

4.数字显示模块数字显示模块主要由七段数码管、LCD液晶屏幕、导线和电容等器组成,七段数码管用于展示测量到的电压大小,LCD 液晶屏用于展示功能选项、单位等信息。

导线是电路板内部连接线路,电容等器用来平滑电压波动。

三、软件设计1.引脚定义在程序中首先定义STM32F103C8T6单片机内存地址、输入输出引脚和电平状态,其中A0口用来读取被测电压;B0-B7口用来控制七段数码管的亮灭;C0口用来输出PWM,控制风扇的旋转速度;D0口用来控制蜂鸣器的开启和关闭。

基于89c52的8通道循环显示数字电压表电路的设计与制作任务书(常进)

基于89c52的8通道循环显示数字电压表电路的设计与制作任务书(常进)

南京工程学院毕业设计任务书通信工程学院电子信息工程专业设计题目基于89C52的8通道循环显示数字电压表电路的设计与制作学生姓名常进班级电信081起止日期2012.2. 20—2012.6.15指导教师纪贤宝教研室主任包永强发任务书日期2012 年2月20日1.毕业设计的原始数据:利用所学知识,结合实际,设计、制作8路模拟电压值(0—5V)转换为数字量进行测量并循环显示。

2.毕业设计(论文)的内容和要求(包括技术要求、图表要求以及工作要求等):课题任务及要求:1.采用模数转换器对8个输入的模拟电压量进行转换。

2.用89C52单片机对各路电压值进行单路和循环显示。

3.制作电路板并完成调试,实现功能。

3.毕业设计应完成的技术文件:1.阅读资料,完成外文资料翻译(2000字以上)和开题报告(3000字以上),提出方案。

2.电原理图;印制板PCB图。

3.调试数据记录。

4.完成毕业设计论文(15000字)。

4.主要参考文献:[1] 刘复华. 单片机及其应用系统. 北京:清华大学出版社,1992[2] 李斌,董慧颖. 可重组机器人研究和发展现状. 沈阳工业学院学报,2000,19(4):23-27[3] 张国勋,《缩短ICL7135A/D采样程序时间的一种方法》[J]. 《电子技术应用》,1993,第一期.[4] 高峰,《单片微型计算机与接口技术》[M].北京:科学出版社,2003.[5] .杨恢先,黄辉先.单片机原理及应用[M].北京:人民邮电出版社,2006[6] 李广弟.《单片机基础》. 北京航空航天大学出版社 1994[7] 何立民.《单片机应用系统设计》. 北京航空航天大学出版社 19905.毕业设计(论文)进度计划(以周为单位):。

8路数字电压表的设计

8路数字电压表的设计

一、实验题目:8路数字电压表的设计二、实验内容:利用单片机AT89C52与ADC0809设计一个8路数字电压表,能够测量0-5V之间的8路输入电压值,并能在四位数码管上显示。

三、要求:基本要求:1、有一路正常工作2、制作PCB板发挥部分:1、显示各路电压数及其电压值2、可通过按键进行通道选择3、当超过某一设定值时报警四、设计方案通过一个A/D(ADC0809模拟数字转换)芯片采集后将外测电压信号转换为数字信号,再由单片机(AT89C52)处理信号,输出信号,由数码管显示各路电压。

更改程序使能用按键进行复位、通道选择、单路循环选择;并在超过设定报警电压(4.7V)时以LED灯发光报警。

五、芯片、电路图1、使用芯片有ADC0809、AT89C52。

2、电路图:六、焊接根据原理图将原件焊接到PCB板上。

七、编程序、调试1、程序设计内容<1>由于ADC0809在进行A/D转换时需要有CLK信号,而此时的ADC0809的CLK 是接在AT89S51单片机的P3.3端口上,也就是要求从P3.3输出CLK信号供ADC0809使用。

因此产生CLK信号的方法就得用软件来产生了。

<2>由于ADC0809的参考电压VREF=VCC,所以转换之后的数据要经过数据处理,在数码管上显示出电压值。

实际显示的电压值(D/256*VREF)2、调试过程<1>在实验过程中,发现了数码管显示的电压在测试的那一路电压正常显示,而其他路为不定的电压值(电压为悬浮电压),加一个排阻接地后使它和低电平相连,在未加电压的情况下为低电平,数码管显示值为0值。

<2>用原程序进行调试时,不执行报警和通道选择、单路循环选择(原程序少了通道选择函数和报警函数)。

多次修改和添加原程序后能够达到要求。

3、C语言源程序#include <reg52.h>#include <intrins.h> //延时函数用#define ad_con P2 //A/D控制口#define addata P0 //A/D数据记入读入口#define Disdata P1 //显示数据段码输出口#define uchar unsigned char#define uint unsigned intsbit ALE=P2^3; //锁存地址控制位sbit START=P2^4; //启动一次转换位sbit OE=P2^5; //0809输出数据控制位sbit EOC=P3^7; //转换结束标志位sbit DISX=Disdata^7; //LED小数点sbit A=P2^7;sbit BO=P3^5;sbit CO=P3^6;////uchar code dis_7[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};/*共阳7段LED段码表0.1.2.3.4.5.6.7.8.9.不亮*/uchar code scan_con[4]={0xfe,0xfd,0xfb,0xf7}; //4位列扫描控制字//11111110//11111101//11111011//11110111uchar data ad_data[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //定义8个数据内存单元uint data dis[5]={0x00,0x00,0x00,0x00,0x00}; //定义4个显示数据单元和1个数据存储单元/////**********1ms延时子函数***********/delaylms(uint t) //t=1{uint i,j;for(i=0;i<t;i++)for(j=0;j<120;j++);}/////************显示扫描子函数***************/scan(){uchar k,n;int h;dis[3]=0x01; //通道初值为1for(n=0;n<8;n++) //每次显示8个数据{dis[2]=ad_data[n]/51; //测得值转换为3位BCD码,最大为5.00Vdis[4]=ad_data[n]%51; //余数暂存dis[4]=dis[4]*10; //计算小数第一位dis[1]=dis[4]/51;dis[4]=dis[4]%51;dis[4]=dis[4]*10; //计算小数第二位dis[0]=dis[4]/51;if(dis[2]>=4&&dis[1]>6&&dis[0]>=0)A=1;elseA=0;for(h=0;h<500;h++) //每个通道显示时间控制约为一秒{for(k=0;k<4;k++) //4位LED扫描控制{Disdata=dis_7[dis[k]];if(k==2){DISX=0;}P3=scan_con[k]; //P3.O-P3.3控制四个数码管的输出即控制输出电平的高低delaylms(1);P3=0xff;}}dis[3]++; //通道值加1}}/////*************通道选择函数*********************/tongdao(uint n){uint m,i;dis[3]=n+1;dis[2]=ad_data[n]/51; //测得值转换为3位BCD码,最大为5.00Vdis[4]=ad_data[n]%51; //余数暂存dis[4]=dis[4]*10; //计算小数第一位dis[1]=dis[4]/51;dis[4]=dis[4]%51;dis[4]=dis[4]*10; //计算小数第二位dis[0]=dis[4]/51;if(dis[2]>=4&&dis[1]>6&&dis[0]>=0)A=1;elseA=0;for(m=0;m<500;m++) //每个通道显示时间控制约为一秒{for(i=0;i<4;i++) //4位LED扫描控制{Disdata=dis_7[dis[i]];if(i==2){DISX=0;}P3=scan_con[i]; //P3.O-P3.3控制四个数码管的输出即控制输出电平的高低delaylms(1);P3=0xff;}}}/*************0809转换子函数*******************/test(){uchar m;uchar s=0x00;ad_con=s;for(m=0;m<8;m++){ALE=1;_nop_();_nop_();ALE=0; //转换通道地址锁存START=1;_nop_();_nop_();START=0; //开始转换命令_nop_();_nop_();_nop_();_nop_(); //延时4USwhile(EOC==0); //等待转换结束OE=1;ad_data[m]=addata;OE=0;s++;ad_con=s; //取A/D值,地址加1}ad_con=0x00;//控制复位}////main(){uint n,i,j;n=0;P0=0xff; //初始化窗口P1=0x00;P2=0xff;P3=0xff;i=BO;while(){test(); //测量转换一次if(i==0)for(;;){ j=CO;if(j==0){n++;}if(n>7)n=0;tongdao(n);if(i==0) break;}else{scan(); //显示八个通道值一次}}}//。

基于51单片机 ADC0808(ADC0809)多通道数字电压表74HC595(74 LS595)移位寄存器

基于51单片机 ADC0808(ADC0809)多通道数字电压表74HC595(74 LS595)移位寄存器

多路数据采集系统摘要本系统利用现场信号产生器给八路数据采集器(ADC0809)进行提供信号,通过模数转换把哪一路数据多少传送给单片机,通过单片机程序处理显示。

采集方式利用循环采集和选择采集两种,显示部分用四位一体共阳数码管。

一.系统原理ADC0809是CMOS工艺、采用逐次逼近法的8位A/D转换芯片,28引脚DIP(双列直插式封装)封装,可以进行8路模拟量到数字量的变换。

利用单片机可以对8路进行循环采集显示,要对信号进行选择采集,只对单片机外围加入按键利用按键判别选取哪一路进行数据采集。

通过单片机P3.0~P3.3进行对ADC0809提供时钟信号还有启动转换信号,读取信号等。

P3.5~P3.8经74LS373(带三态缓冲输出的8D触发器)进行选择通道(如图1、图2)。

(此处选择74LS373是因为选择通道是不能太快,否则会出错)。

由P1口进行接收采集到的数据。

通过P0进行段选输出到数码管,由P2口低四位进行位选。

P2高四位对按键信号输入处理选择哪个通道。

图1 ADC0809通道选择表图2 74LS47功能图图3 系统原理框图二.系统程序框图系统为了提高模拟信号—采样—量化—数字信号的过程的量化误差,通过程序的计算提高精度。

由于ADC0809只有八位数据输出,最大值为255,所以再显示前在单片机中要对ADC0809输出的数据进行以下处理。

显示值=ADC0809输出值/255*输入值如果输入5V电压,后面输入值就是500。

提供仿真图和仿真程序三.系统原理图原理图中八个数据采集口都悬空,接入想要采集模拟信号。

四.系统PCB图五.系统主要操作与性能(1)循环采样速率:50ms(2)电压采样精度:0.01V(3)再选择哪个通道时,要把哪个通道的按键一直按住就可以显示出你要的哪个通道的数据。

(4)不选择任一通道时,就会让它自已自动循环显示。

基于单片机的数字电压表的设计

基于单片机的数字电压表的设计

基于单片机的数字电压表的设计杜松晏(广东省南方技师学院广东韶关512005)【摘要】科技日新月异,在仪器仪表行业中,传统的指针式电压表功能单一、精度低,不能满足数字化时代的需求。

本文应用单片机设计数字电压表,它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。

它精度高、抗干扰能力强,可扩展性强、集成方便,还可与PC进行实时通信,解决了长期以来测量仪器中的误差的修正、线性处理等问题。

【关键词】单片机;数字电压表;A/D转换Designing of Single-chip Microcomputer based Digital VoltmeterDU S ong-yan(Southern Technician College,S haoguan Guangdong,512005)【Abstract】Science and technology change rapidly,In the instrumentation industry,The traditional voltage pointer table has single function,low precision,and can't meet the needs of the digital age.In this paper the application of single-chip microcomputer to design a digital voltmeter.It is the use of digital measuring technology.The continuous analog conversion into discrete,discrete digital form,and the instrument display.It has high precision,strong anti-interference ability,good expansibility,convenient integration,but also with the PC real-time communication.To solve the long measuring instrument of the error correction,linear processing problem.【Key words】The single-chip microcomputer;Digital voltmeter;A/D conversion0引言近年来,随着大规模集成电路的发展,单片机继续朝快速、高性能方向发展,单片机将微处理器、存储器、定时/计数器、I/O接口电路等集成在一个芯片上,它具有较强的管理功能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、设计题目:8路数字电压表的设计二、设计内容:利用单片机AT89C52与ADC0809设计一个8路数字电压表,能够测量0-5V之间的8路输入电压值,并能在四位数码管上显示。

三、设计要求:基本要求:有一路正常工作发挥部分:1、显示各路电压数及其电压值2、可通过按键进行通道选择四、方案比较A/D转换器是模拟量输入通道中的一个环节,单片机通过A/D转换器把输入模拟量变成数字量再处理。

随着大规模集成电路的发展,目前不同厂家已经生产出了多种型号的A/D转换器,以满足不同应用场合的需要。

如果按照转换原理划分,主要有3种类型,即双积分式A/D转换器、逐次逼近式A/D转换器和并行式A/D转换器。

目前最常用的是双积分和逐次逼近式。

双积分式A/D转换器具有抗干扰能力强、转换精度高、价格便宜等优点,比如ICL71XX系列等,它们通常带有自动较零、七段码输出等功能。

与双积分相比,逐次逼近式A/D转换的转换速度更快,而且精度更高,比如ADC0808、ADC0809等,它们通常具有8路模拟选通开关及地址译码、锁存电路等,它们可以与单片机系统连接,将数字量送入单片机进行分析和显示。

本设计中,由于对精度没做很大要求,我们采用逐次逼近式A/D转换ADC0808,精度为0.02,五设计方案通过一个A/D(ADC0808模拟数字转换)芯片采集后将外测电压信号转换为数字信号,再由单片机(AT89C52)处理信号,输出信号,由数码管显示各路电压。

更改程序使能用按键进行复位、通道选择。

六电路图1、使用芯片有ADC0809、T89C52。

2、电路图:0809见附件AAT89C52P0P2P1P3上电复位串口通信电源电路4位LED 显示ADC0808AT89C51简介AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。

AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

外形及引脚排列如图所示七、编程序、调试1、程序设计内容由于ADC0809的参考电压VREF=VCC,所以转换之后的数据要经过数据处理,在数码管上显示出电压值。

实际显示的电压值(D/256*VREF)2、调试过程在实验过程中,发现了数码管显示的一直为0,进多次试验得出为ADC0808的OE脚再输高点平后,应加NOP语句在读取数据。

3、汇编语言源程序;*****************************;* 数字电压表*;*****************************;测量电压最大为5V,显示最大值为5.00V;P2口为A/D控制,P1口为显示输出,P0口为数据输入,P3口为显示位控制,。

;70H存放在采样值,78H~7BH存放形式数据,依次为个位、十位、百位、通道标志使;P3.5作为显示时选择通道按键;***主程序和中断程序入口****ORG 0000HLJMP START;*************显示控制程序****************START: MOV R0,#0RUN:LCALL TESTLCALL KEYCJNE R0,#8,AAMOV R0,#0AA: LCALL TUNBCDLCALL DISPSJMP RUN;********显示数据转为3位BCD码子程序***************TUNBCD:MOV A,70HMOV B,#51DIV AB ;255/51=5.00V运算MOV 7AH,A ;个位数放入7AHMOV A,B;CLR F0SUBB A,#1AHMOV F0,C ;余数大于19H,F0为1,乘法溢出,结果加5MOV A,#10MUL ABMOV B,#51DIV ABJB F0,LOOP2ADD A,#5LOOP2:MOV 79H,A ;小数后第一位放入79HMOV A,BCLR F0SUBB A,#1AHMOV F0,CMUL ABMOV B,#51DIV ABJB F0,LOOP3ADD A,#5LOOP3:MOV 78H,A ;小数后第二位放入78HRET;*****************显示子程序*******************DISP:MOV R1,#78HMOV 7BH,R0MOV R5,#0FEHPLAY:MOV P1,#0FFH;显示清零MOV A,R5ANL P3,AMOV A,@R1MOV DPTR,#TABMOVC A,@A+DPTRMOV P1,AJB P3.2,PLAY1SETB P1.7;增加小数点PLAY1:LCALL DL1MSMOV A,P3INC R1JNB ACC.4,ENDOUT;四位显示完毕RL AMOV R5,AMOV P3,#0FFHAJMP PLAYENDOUT:MOV P3,#0FFHMOV P1,#0FFHRETTAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;************延时程序****************************DL1MS:MOV R4,#0FFHLOOP11:DJNZ R4,LOOP11MOV R4,#0FFHLOOP22:DJNZ R4, LOOP22RET;*************电压测量(A/D)子程序*****************;一次测量,放入70HTEST:MOV A,R0MOV P2,ATESTART:; 送入数据控制SETB P2.3NOPNOPNOPNOPCLR P2.3NOPNOPSETB P2.4NOPNOPCLR P2.4NOPNOPWAIT:JB P3.7,MOVD;转换完成后跳转MOVD,不完成一直等AJMP W AITMOVD:SETB P2.5;接受信号NOPNOPNOPMOV A, P0MOV 70H ,A;存数据CLR P2.5CLR ARET;key**************KEY: JB P3.5,KEYOUTLCALL DISPJB P3.5,KEYINC R0JNB P3.5,$KEYOUT: RETEND附件AADC0809中文资料1.主要特性1)8路8位A/D转换器,即分辨率8位。

2)具有转换起停控制端。

3)转换时间为100μs4)单个+5V电源供电5)模拟输入电压范围0~+5V,不需零点和满刻度校准。

6)工作温度范围为-40~+85摄氏度7)低功耗,约15mW。

2.内部结构ADC0809是CMOS单片型逐次逼近式A/D转换器,内部结构如图13.22所示,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型D/A转换器、逐次逼近寄存器、三态输出锁存器等其它一些电路组成。

因此,ADC0809可处理8路模拟量输入,且有三态输出能力,既可与各种微处理器相连,也可单独工作。

输入输出与TTL兼容。

3.外部特性(引脚功能)ADC0809芯片有28条引脚,采用双列直插式封装,如图13.23所示。

下面说明各引脚功能。

IN0~IN7:8路模拟量输入端。

2-1~2-8:8位数字量输出端。

ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一路。

ALE:地址锁存允许信号,输入,高电平有效。

START:A/D转换启动信号,输入,高电平有效。

EOC:A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。

OE:数据输出允许信号,输入,高电平有效。

当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。

CLK:时钟脉冲输入端。

要求时钟频率不高于640KHZ。

REF(+)、REF(-):基准电压。

Vcc:电源,单一+5V。

GND:地。

ADC0809的工作过程是:首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。

此地址经译码选通8路模拟输入之一到比较器。

START上升沿将逐次逼近寄存器复位。

下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。

直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。

当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。

相关文档
最新文档