实验六 AD转换实验

  • 格式:doc
  • 大小:45.00 KB
  • 文档页数:5

实验六 A/D转换实验

一、实验目的:

(1)掌握A/D转换与单片机接口的方法;

(2)了解ADC0809的工作原理及其应用;

(3)通过实验了解单片机如何进行数据采集。

(4)学习数码管动态扫描及显示方法。

(5)进一步了解Keil及Proteus的应用。

二、实验内容:

利用一个可调电位器向AD0808的第一条模拟量输入端输入可变的电压值,经过AD0808的转换后,把相应的数字量输出给单片机,然后经过单片机的转化,把转换得到的结果显示在数码管上。

三、画出实验程序流程图:

四、实验仿真原理图 开始

初始化,设置

堆栈指针

开始转换,等待

转换完成

结束 Y

读数据,数码管动态扫描 N

EOC=1?

五、写出程序清单和注释

;定义IO接口

SEG0 BIT P2.5

SEG1 BIT P2.6

SEG2 BIT P2.7

AD_ST BIT P3.5

AD_EOC BIT P3.6

AD_OE BIT P3.7

ORG 0000H

AJMP MAIN ;跳转指令

ORG 000BH

AJMP IT0P

ORG 0100H ;MAIN函数的入口地址

MAIN:

MOV SP , #60H ;设置堆栈指针

MOV R1 , #00H ;延时标志

MOV R0 , #40H

CLR AD_ST ;初始化ADC0809,ST=0,OE=0,EOC=1

CLR AD_OE

SETB AD_EOC

MOV TMOD , #01H ;设定定时器0,,工作方式一

ACALL IT0M1 ;定时器0初始化函数

LOOP: ;数码管扫描显示

MOV R3 , 32H ;显示各位数据 ACALL DISPLAY ;送数据

CLR SEG0 ;开显示,个位

ACALL DELAY ;延时保存数据

MOV P0 , #0FFH

SETB SEG0 ;关闭各位,准备扫描下一位

MOV R3 , 31H ;显示十位数据

ACALL DISPLAY ;送数据

CLR SEG1 ;开显示,十位

ACALL DELAY ;延时保存数据

MOV P0 , #0FFH

SETB SEG1 ;关闭各位,准备扫描下一位

MOV R3 , 30H ;显示百位数据

ACALL DISPLAY ;送数据

CLR SEG2 ;开显示,百位

ACALL DELAY ;延时保存数据

MOV P0 , #0FFH

SETB SEG2 ;关闭各位,准备扫描下一位

AJMP LOOP

IT0P: ;定时器0中断函数

PUSH PSW ;压栈

PUSH ACC

MOV TL0 , #0B0H ;计数寄存器赋值(50ms)

MOV TH0 , #03CH

SETB AD_ST ;上升沿,寄存器清零

NOP ;延时,保持一定时间

CLR AD_ST ;下降沿,开始转换

JNB AD_EOC ,$ ;等待转换完成

SETB AD_OE ;OE=1,使能数据输出

NOP ;延时,保持数据稳定

MOV A , P1 ;读出数据

CLR AD_OE ;拉低数据,以便下次转换

CJNE R1 , #00H ,AA

MOV @R0 , A

AA:

MOV 33H , A

MOV A , @R0

CJNE A , 33H , FANH

INC R0

MOV @R0 , A

INC R1 ;R1自加1,加到10即500ms采样一次AD值

CJNE R1 , #5 , FANHUI ;R1到10时开始采样 MOV R1 , #00H ;清R1

MOV R0 , #40H

MOV B , #100 ;分离百位

DIV AB

MOV 30H , A ;保存百位数据

MOV A , B ;取出,十位和各位数据

MOV B , #10 ;分离十位和各位

DIV AB

MOV 31H , A ;存十位数据

MOV 32H , B ;存各位数据

FANHUI:

POP ACC ;弹栈

POP PSW

RETI ;中断返回

FANH:

MOV R0 , #40H

MOV R1 , #00H

POP ACC ;弹栈

POP PSW

RETI ;中断返回

IT0M1:

MOV TL0 , #0B0H ;设置中断时间(50ms)

MOV TH0 , #03CH

SETB ET0 ;开定时器0中断

SETB EA ;开总中断

SETB TR0 ;启动定时器0

RET

DISPLAY: ;显示函数,查表,把对应数据送P0口

PUSH ACC ;压栈,保护数据

PUSH B

MOV A , R3

MOV DPTR,#TAB ;显示列表首地址赋予指针

MOVC A,@A+DPTR ;查表找到对应的数码管显示编码

MOV P0 , A ;数据送P0口,显示数据

POP B ;弹栈

POP ACC

RET ;返回

;延时函数,约等于1ms

DELAY:

MOV R7, #2

DELAY1:

MOV R6, #250 DJNZ R6,$ ;R6自减1,不等于0是原地跳转

DJNZ R7,DELAY1

RET

TAB:

DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;数码管显示数

END ;程序结束

六、思考题

在原有的基础之上,再加一模拟输入量,仿真原理图以及程序应该做什么样的改动?给出更改后的原理图以及修改的程序。