单片机课程设计——基于ADC0809的多路模数转换电路的设计(2)

2019-01-26 16:52

2.3.4 ADC0809的8路通道的地址锁存电路

地址锁存采用74LS373芯片,如图所示,OE(1号引脚)端接低电平,锁存控制端LE(11号引脚)可以直接与CPU的地址锁存控制信号ALE相连,当LE为高电平时,Q端等于D端,当LE端从高电平下降到低电平时,输入端D的数据锁入锁存器中。D0~D7与8051的P0.0~P0.7相连。A0,A1,A2分别接ADC0809的A,B,C端,当A0A1A2=000~111时,就实现了对ADC0809的8路通道的选择。

2.3.4 读写控制信号电路

读写控制电路由或非门实现的。74LS02是4输入或非门,其中A,B为输入,Y为输出。8051的P2.7(A15)和WR经或非门后的信号YSA与ADC0809的ALE端和START端相连,平时START因译码器输入端P2.7上的高电平而封锁,当单片机执行如下程序后 MOV DPTR,#7FF8H MOV @DPTR,A

就启动了AD转换。

8051的P2.7(A15)和RD经或非门后的信号YOE与ADC0809的OE端相连,但单片机执行如下程序后, MOV DPTR,#7FF8H MOV A,@DPTR

就可以获取AD的转换结果。

转换数据的传送可以有定时传送方式,查询方式和中断方式,在这里我们采用中断方式。因为ADC0809的转换时间为100us,而单片机执行一条指令的时间为1us,它们之间相差两个数量级。而且采用中断方式的好处在于可以不占用CPU

硬件资源,使CPU可以在转换的过程中完成其他的工作。将ADC0809的EOC引脚经或非门后与8051的INT0相连,这样就能在外部中断子程序中实现对采集来的数据进行存储。

第三章 软件设计

3.1 Keil uVison 3 集成开发环境简介

Keil uVison 3 是一套在windows环境下8051单片机整合性开发接口(Intergrated Development Environment,IDE )软件,它具备完善的项目管理系统,提供编译器以编写程序及说明文件,可以协助编写,翻译(包含C语言的编译器C51 Compiler以及A51组译器)除错和测试嵌入式系统程序。其中C51compiler是C语言软件开发系统。与汇编相比,C语言在功能,结构性,可读性和可维护性等方面有明显的优势,而且易学易用,Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外,重要的一点是只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码的效率是非常高的。

3.2 主程序

主程序主要是设置数据区的起始地址为60H,模拟路数为8路,设置外部中断方式是下降沿触发,开总中断,向ADC0809写数据启动AD转换。

开始 设数据区的起始地址,模拟路数 设外部中断方式,开总中断 启动AD转换

转换数据结束,触发中断 响应中断服务子程序T0

中断返回 结束 图1 主流程图的设计框架

3.3中断服务程序

中断服务程序主要完成取AD转换结果存储,模拟路数自增1,存储区自增1,判断8路是否转换完毕,若完毕则返回。

T0中断服务程序 取AD转换结果,存储

DPTR,R0自增。R2自减

否 R2=0?

中断返回 图2 T0中断服务程序流程图

汇编语言代码 ORG 0000H LJMP MAIN ORG 0003H LJMP INT_T0 ORG 0010H MAIN:

MOV R0,#60H ;数据区起始地址送R0 MOV R2,#08H ;模拟量路数 8路 SETB EA SETB IT0

MOV DPTR,#7FF8H

MOVX @DPTR,A ;启动AD转换 SJMP $ ;等待中断

INT_T0:

MOVX A,@DPTR MOV @R0,A INC DPTR INC R0

DJNZ R2,LOOP CLR EA CLR EX0 RETI LOOP:

MOVX @DPTR,A ;再次启动 RETI END

C语言代码

#include #include

#define uchar unsigned char

#define ADC0809 XBYTE[0x7FF8]//ADC0809的地址

#define STO0809 PBYTE[0x60]//将采集来的8路数据存到内存0x60~0x67中去

uchar data R_data[8]={0};

uchar i=0;

uchar idata *p,*q; void Init() {

EA=1; CPU开总中断 EX0=1; IT0=1;

*p=ADC0809; *q=STO0809;

ADC0809=0x00; //启动ADC0809 }

void main() { Init() while(1) {;} }

void Int_t0 interrupt 0 using 1 {

ACC=*p;

R_data[i]=ACC;

*q=ACC; //存入数据区 p++; //模拟路数加1 q++; //存储区指针加1 i++; //数据区指针加1

if(i==8) //判断是否转换完毕。转换完毕关总中断

{

EA=0; EX0=0 } }

第四章 总结

这一次的单片机课程设计使我学到不少东西,尽管上课的时候听的挺带劲的,也感觉自己学的不错,但还是暴露了不少的问题。第一个问题就是ADC0809的CLK信号的产生,D触发器当Q与D相接时,输出是输入的2分频。这个知识点以前是没有掌握的。第二个问题是数据传输方式的问题,有三种传输方式:定时方式,查询方式和中断方式,我感觉这三种方式各有应用场合,但中断方式应用的应该更宽广一些。第三个问题就是软件这一块的程序流图画的不太好,想以后用Visio画一下。

单片机的课程已经结课了,也挺怀念杨老师对我们讲课的时光。但我觉得我

们对单片机的学习才正式开始,以后不能在课堂上学习单片机,可以在业余时间买一个开发板研究一下,单片机对我们电子工科的学生是立身之本,学好它我们完全可以找一个不错的工作。在这里感谢杨老师对我们的风趣,认真的授课。 参考文献

【1】 张鑫主编.单片机原理与应用(第2版).电子工业出版社.2010.

【2】 常喜茂、孔英会、付小宁.C51基础与应用实例.电子工业出版社.2009. 【3】 王迎旭.单片机原理与应用.机械工业出版社.2004 【4】 何利民.单片机应用系统设计.北航出版社.1990


单片机课程设计——基于ADC0809的多路模数转换电路的设计(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:略论樟子松几种常见病虫害及其防治方法

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: