一、实验目的 (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
|