找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2552|回复: 1
打印 上一主题 下一主题
收起左侧

A/D 0809转换实验

[复制链接]
跳转到指定楼层
楼主
一、实验目的
(1)掌握A/D转换与单片机接口的方法;
(2)了解A/D芯片0809转换性能及编程方法;
(3)通过实验了解单片机如何进行数据采集。
二、实验内容  
利用实验系统上的0809做A/D转换器,实验系统上的电位器提供模拟量输入,编制程序,将模拟量转换成数字,通过数码管显示出来。

三、实验原理图

四、实验程序框图
file:///C:/Users/yuan/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg
五、实验步骤  
硬件电路设计由4个部分组成; A/D转换电路,STC89C51单片机、LED显示系统、以及测量电压输入电路。硬件电路设计框图如图所示。
file:///C:/Users/yuan/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg
数字电压表总体设计方框图
六、程序清单  

  • OE BIT       P3.0        ;ADC0809的OE端
  • EOC        BIT   P3.1    ;ADC0809的EOC端
  • CLOCK BIT P2.6
  • ST         BIT   P3.2    ;ADC0809的START和ALE端
  • LED_0 DATA 30H           ;显示缓冲区
  • LED_1 DATA 31H
  • LED_2 DATA 32H
  • LED_3 DATA 33H
  • ADC    DATA     34H      ;存放转换后的数据

  • ;//////主程序开始////////

  • ORG        0000H
  • AJMP       START
  • ORG        000BH
  • LJMP TT0
  • ORG 0030H
  • ;------初始化-----------

  • START:
  • MOV SP,#60H               ;设置堆栈
  • MOV        LED_0,#00H     ;清空显示缓冲区
  • MOV        LED_1,#00H
  • MOV        LED_2,#00H
  • MOV        LED_3,#00H
  • MOV        DPTR,#TABLE     ;送字型码表首地
  •                  
  • MOVTMOD,#02H ;将02H送到TMOD寄存器,这里是设定定时器模式
  • MOV TH0,#01H
  • MOV TL0,#01H
  • MOVIE,#82H                   ;130
  • SETB TR0

  • ;------ADC0809转换---------

  • WAIT:
  •     CLR ST
  • SETB   ST
  • CLR        ST         ;启动转换
  • JNB        EOC,$      ;等待转换结束
  • SETB       OE         ;允许输出
  • MOV        ADC,P1     ;暂存转换结果

  • ;------数据处理,已备显示----------

  • MOV        A,ADC     ;将AD转换结果转换成BCD码
  • MOV        B,#028H   ;乘以40MV
  • MUL    AB
  • MOV    R7,A
             MOV    R6,B

  • HB2:
  •     CLR     A     ;BCD码初始化
  • CLR    C
  • MOV        R3,A
  • MOV    R4,A
  • MOV    R5,A
  • MOV        R2,#10H  ;转换双字节十六进制整数
  • HB3:
  •     MOV     A,R7            ;从高端移出待转换数的一位到CY中
  • RLC        A
  • MOV    R7,A
  • MOV    A,R6
  • RLC    A
  • MOV    R6,A
  • MOV        A,R5   ;BCD码带进位自身相加,相当于乘2
  • ADDC   A,R5
  • DA         A      ;十进制调整
  • MOV    R5,A
  • MOV        A,R4
  • ADDC       A,R4
  • DA A
  • MOV        R4,A
  • MOV    A,R3
  • ADDC   A,R3
  • MOV        R3,A   ;双字节十六进制数的万位数不超过6,不用调整
  • DJNZ       R2,HB3
  • MOV        A,R5
  •   SWAP       A
  •   ANL        A,#0FH
  •   MOV        LED_0,A
  • MOV    A,R4
  • ANL    A,#0FH
  • MOV        LED_1,A
  • MOV        A,R4
  • SWAP       A
  • ANL        A,#0FH
  • MOV        LED_2,A
  • MOV        A,R3
  • ANL    A,#0FH
  • MOV        LED_3,A
  • LCALL DISP        ;调用显示子程序
  • AJMP       WAIT

  • ;//////数码管显示子程序//////////

  • DISP:
  •           MOV A,LED_0  ;数码显示子程序
  •   MOVC       A,@A+DPTR
  • CLR        P2.3
  • MOV        P0,A
  • LCALL DELAY
  • SETB       P2.3
  • MOV        A,LED_1
  • MOVC       A,@A+DPTR
  • CLR        P2.2
  • MOV    P0,A
  • LCALL DELAY
  • SETB   P2.2
  • MOV        A,LED_2
  • MOVC       A,@A+DPTR
  • CLR        P2.1
  • MOV        P0,A
  • SETB       P0.7 ;小数点
  • LCALL DELAY
  • SETB   P2.1
  • MOV        A,LED_3
  • MOVC       A,@A+DPTR
  • CLR        P2.0
  • MOV    P0,A
  • LCALL DELAY
  • SETB       P2.0
  • RET

  • ;//////延时子程序///////////

  • DELAY:   MOV R6,#02H  ;循环整个延时程序10次,延时5毫秒
  • D1:          MOV R7,#0EEH ;循环下一条程序250次
  • DJNZ       R7,$   ;DJNZ循环转移指令,将第一个数减1,是否为0,不为0则转移
  • ;到指定地点,为0则往下执行
  • DJNZ       R6,D1
  •                   RET

  • ;//////数码管字形码表///////////

  • TABLE:
  • DB     3FH,06H,5BH,4FH,66H
  •                     DB 6DH,7DH,07H,7FH,6FH

  • ORG 0100H
  • TT0:
  • CPL CLOCK        ;产生ADC0808/0809时钟脉冲信号
  • RETI
  •   END

111.png (102.17 KB, 下载次数: 48)

111.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:851017 发表于 2020-12-3 15:57 | 只看该作者
为什么运行之后数码管不对呢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表