实验六 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 ;程序结束
六、思考题
在原有的基础之上,再加一模拟输入量,仿真原理图以及程序应该做什么样的改动?给出更改后的原理图以及修改的程序。