ADC0809单通道模拟电压采集电路
指导教师: 程世旭 刘元超 学生班级: 计科10606班 学生姓名: 古 莹 学 号: 200603256
班内序号: 4 课设日期:2009年9月14日,2009年9月27日
目 录
一(设计目的
二(实验平台和所用器材
三(设计内容
四(设计原理
五(程序流程图
六(调试
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
七(原理图设计
八(程序清单
九(收获、体会和建议
一 设计目的
2
1. 通过本设计,使学生综合运用《微型计算机技术》、《汇编语言程序设计》以及电
子技术等课程的内容,为以后从事计算机检测与控制工作奠定一定的基础。
2. 主要掌握并行I/O接口芯片8253、8255A、ADC0809及中断控制芯片8259A等
可编程器件的使用,掌握译码器74LS138的使用。
3. 学会用汇编语言编写一个较完整的实用程序。
4. 掌握微型计算机技术应用开发的全过程:分析需求、设计原理图、选用元器件、
布线、编程、调试、撰写
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
等步骤。
二 实验平台和所用器材
本实验是在windows XP操作系统上实现的,程序的开发环境是用实验室的课设平台,所用到的器材如下:
? 一块实验面包版(内含时钟电路)。
? 可编程芯片8253、8255A 、ADC0809和译码器芯片74LS138、74LS245各
一片。
? 可调电位器4.7KΩ一个、发光二极管8个、74LS06芯片2个。
? 导线若干。
? 示波器、万用
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
、常用工具等。
三 设计内容
采用ADC0809设计一个单通道模拟电压采集电路,要求对所接通道的变化的模拟电压值进行采集,采集来的数字量一路送至发光二极管指示,一路送至计算机显示到屏幕上,每行显示5个数据,采集完100个数据后停止采集过程,采集过程中按下ESC键也可中断采集过程。
首先要求我们定义出选择菜单,给出显示界面。
1. 8255的自检测
这部分要求我们初始化8255,为了能够正确的看出8255已经初始化,当8255初始化后向B口送数据0FH到发光二管上显示,如果能够正确显示就说明8255已经被初始
8255,74LS06能够正常工作,并且他们的连线都正确。 化。并且可以说明74LS245,
1. 8253的自检测
这部分要求我们初始化8253,8253初始化后可以通过示波器观察输出的波形是否满足要求。
3. 进行A/D转换
这部分是本次课设的关键部分,在做此之前,必须保证8255和8253都被正确的初始化,通过8255的C口控制ADC0809对模拟数据的采集,然后从A口读取转换后的数据,一路送发光二极管显示,一路送显示器上显示,模拟量由电位器得到。 2. 退出系统
如果用户需要结束程序,从菜单上选择此菜单即可退出程序.
四 设计原理
1、使用Protues或Protel设计出正确电路原理图,设计原理如下:
a.4.7KΩ电位器一端接+5V,一端接地,调节电位器得到变化的模拟电压,该电压接至ADC0809的某一通道输入端(如IN),ADC0809的时钟为500KHz,由8253对面包0
板上时钟1MHz或2MHz分频后得到,8253的端口地址:300H,303H。
3
b.编程启动ADC0809转换(ADC0809完成一次转换的时间大约为120μs),将ADC0809的EOC引脚信号作为中断信号,若转换结束则进入中断服务程序。在中断服务程序中读入模数转换结果,一路送至发光二极管显示,一路送至计算机显示到屏幕上。
c.8255A用做CPU和ADC0809间的接口芯片,ADC0809的控制信号(如OE、ALE、START等)可由8255A的PC口提供,模数转换后的数字量可经8255A的PA口读入,经8255A的PB口输出到发光二极管。8255A端口地址:304H,307H。
d.译码电路由74LS138提供。74LS245用于总线和8255A之间的数据的双向传输和隔离。
, MFPT PCI总线驱动板逻辑结构如图所示 PCI Bus
PCI 9052/9054
CPLD
, 芯片简介
(1)74LS245的功能表 ISA Bus
, 74LS245数据总路线缓冲器
, 74LS245的功能表
4
(2)ADC0809简介
, 引脚信号
, 提供一个8通道的多路开关和寻址逻辑
, IN0,IN7:8个模拟电压输入端
, ADDA、ADDB、ADDC:3个地址输入线
, ALE:地址锁存允许信号 , ALE的上升沿用于锁存3个地址输入的状态,然后由译码器从8个模拟输入中选择一个模拟
输入端进行A/D转换。
, ADC0809的外部特性
Start
ADDA/B/C
EOC FSDAAAA
/C/ OE
DATA D,D 07
, ADC0809的数字输出
5
ADC0809内部锁存转换后的数字量
具有三态数字量输出端D0,D7
配合输出允许信号OE
当输出允许信号OE为高电平有效时,将三态锁存缓冲器的数字量从D0,D7输出
注:其它的芯片查阅微型计算机技术的
书
关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf
。
(3)8255A与ADC0809的连接
(4)8253定时/计数器
, 对8253进行编程,定时100ms后,产生中断,该定时信号(OUT0)送入到系统预留给用户
的IRQ2(或IRQ10)引脚产生中断,在中断服务子程序中,启动一次ADC0809模数转换,
ADC0809采用查询方式工作。IRQ10中断向量号为72H
, 8253的时钟(CLK0)取自MFID实验平台。
2、编写程序初始化8255和8253
(1)初始化8255:
8255有四个寄存器,地址为300h-303h,分别为A口,B口,C口,和控制口,首先要向C口写入控制字,控制字格式如下:
, 工作方式控制
D7 D6 D5 D4 D3 D2 D1 D0
特征位 A组方式端口A输C口高四位输入B组方式端口B输入/输出 端口C低四
选择 选择 1 入/输出 /输出 位输入/输出
, C端口置位/复位控制
D7 D6 D5 D4 D3 D2 D1 D0
任意 位选择 特征位0 置位/复位 0为复位,1为置位
可用如下代码初始化8255:
MOV DX,307H ;给8055控制口,初始化8255
MOV AL,98H ;AL=1001 0000 ,写8255控制字,A口输入,B口输出,C口高/低四位输出
OUT DX,AL
(2)初始化8253
6
8253控制字格式如下:
D7 D6 D5 D4 D3 D2 D1 D0
计数器选择 读写格式 工作方式 计数方式
MOV DX,303H ;给8053控制字口
MOV AL,00010100B ;计数器0工作在方式2,只低八位,用二进制
OUT DX,AL
MOV DX,300H ;给计数器0初值2
MOV AL,2
OUT DX,AL
3、编写中断服务子程序
首先要设置好中断向量,这里是调用72H号中断,在里面写入A/D转换的中断服务
子程序地址,所以要保存原来72H中断向量表里面的内容,最后在程序完成时要恢复72H
里的内容,在执行这些操作的时候是不容许中断的,所以要关中断,操作完成后要开中断,
可以用以下指令来完成:
MOV AX,3572H ;获取原中断向量
INT 21H
MOV INT0A_OFF,BX ;保存x中断向量
MOV BX,ES
MOV INT0A_SEG,BX
CLI ;关中断
MOV AX,2572H
MOV DX,SEG LEDLIGHT ;设置新的中断向量
PUSH DS
MOV DS,DX
MOV DX,OFFSET LEDLIGHT
INT 21H
POP DS
STI ;开中断
要想启动0809进行转换,首先必须有一个start信号,该信号为:
数据采集之后,恢复中断向量,部分程序如下:
MOV AX,2572H ;恢复中断向量
MOV DX,INT0A_SEG
PUSH DS
MOV DS,DX
MOV DX,INT0A_OFF
INT 21H
POP DS
IN AL,0A1H ;屏蔽IRQ10
OR AL,04H
OUT 0A1H,AL
7
MOV AX,4C00H ;程序退出
INT 21H
LEDLIGHT PROC FAR ;中断服务程序
PUSH SI
PUSH AX
PUSH DX
CLI ;关中断
MOV DX,307H
MOV AL,5H ;AL=0000 0101 使PC2口为高,读取转换结果到PA口
OUT DX,AL
MOV DX,304 ;从A口读取数据
IN AL,DX
PUSH AX ;先保存数据 SHOW:
AND AL,0F0H ;显示高四位
MOV CL,04
SHR AL,CL
CMP AL,9
JA HEX
ADD AL,30H
JMP NEXT
HEX:ADD AL,37H
NEXT:MOV DL,AL
MOV AH,2 ;输出显示高四位
INT 21H
POP AX
AND AL,0FH ;显示低四位
CMP AL,9
JA HEX1
ADD AL,30H
JMP NEXT1
HEX1:ADD AL,37H
NEXT1:
MOV DL,AL ;输出数据
MOV AH,02H
INT 21H
MOV DL,13 ;输入回车换行符
MOV AH,2
INT 21H
MOV DL,10
MOV AH,2
INT 21H
MOV AH,09H
MOV DX,OFFSET ERROR
INT 21H
8
NEXT2:
MOV AL,62H ;发中断结束命令
MOV DX,0A0H
OUT DX,AL ;向从片8259发EOI命令
OUT 020H,AL ;向主片8259发EOI命令
STI ;开中断
POP DX
POP AX
POP SI
IRET
五(程序流程图
六(调试分析
进入主菜单后选择1进行8255的初始化,这时候会发现在实验板上的一半灯亮,
一半灭; 选择2后进入8253的初始化,可以用示波器观察输出的波形,选择3后进入
A/D转换,将转换来的数据一路送二极管显示,一路送显示器。
9
七(原理图设计
八(程序清单
;在本程序中,8253的地址是H-303H,8355A的地址是H-307H,和KS4电路图对应
DATA SEGMENT
INT0A_OFF DW(?) INT0A_SEG DW(?) COUNT DB(5)
SUM DB(0) DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA DELAY PROC
PUSH CX
PUSH BX
MOV BX,0FFFH LOOP2:MOV CX,0FFFFH LOOP1:LOOP LOOP1
DEC BX
JNZ LOOP2
10
POP BX
POP CX
RET
DELAY ENDP
DISP PROC
push ax show: and al,0f0h ;显示高位
shr al,4
cmp al,9
ja hex
add al,30h
jmp next hex: add al,37h next: mov dl,al
mov ah,2
int 21H
pop ax
and al,0fh ;显示低位
cmp al,9
ja hex1
add al,30h
jmp next1 hex1: add al,37h next1: mov dl,al ;输出信号
mov ah,2
int 21h
mov ah,2 ;输出空格
mov dl,0
int 21h
;INC SUM
;MOV AL,SUM
;CMP AL,100
;JZ PROEND
DEC COUNT
MOV AL,COUNT
CMP AL,0
JNZ DISPEND
MOV COUNT,5
mov dl,13 ;向屏幕送回车符
mov ah,2
11
int 21h
mov dl,10 ;向屏幕送换行符
mov ah,2
int 21h
DISPEND:
RET
;PROEND:
;MOV AX,4C00H
;INT 21H
DISP ENDP
START:
MOV AX,DATA
MOV DS,AX
MOV DX,307H ;初始化
MOV AL,80H
OUT DX,AL
MOV DX,305H ;LED灯熄灭
MOV AL,0FFH
OUT DX,AL
MOV AX,3572H ;获取原中断向量
INT 21H
MOV INT0A_OFF,BX ;保存原中断向量
MOV BX,ES
MOV INT0A_SEG,BX
CLI ;关中断
MOV AX,2572H
MOV DX,SEG LEDLIGHT ;设置新的中断向量
PUSH DS
MOV DS,DX
MOV DX,OFFSET LEDLIGHT
INT 21H
POP DS
STI ;开中断
IN AL,0A1H ;打开IRQ10
AND AL,0FBH
OUT 0A1H,AL
IN AL,21H ;打开IRQ2
AND AL,0FBH
OUT 21H,AL
MOV DX,303H ;对实验板上的MHZ信号进行分频,为ADC0809提供转
换时钟信号CLOCK
MOV AL,00010100B
12
OUT DX,AL
MOV DX,300H
MOV AL,2
OUT DX,AL
;这条指令可去掉,因为在电路中ADDA/ADDB/ADDC都已接地,固定使用通道 begin: ;mov dx,307h ;初始化状态字,A口输出,
;mov al,80h
;out dx,al
;mov dx,304h ;送通道号至A口
;mov al,0
;out dx,al
mov dx,307h
mov al,3h ;00000011,使PC1为
out dx,al ;PC1置进行地址锁存
mov dx,307h
mov al,90h
out dx,al ;重写方式字,A口输入,B口输出,C口低四位输出
L1: MOV AH,0BH ;检查是否有Esc键按下
INT 21H
INC AL
JNZ NEXT0 ; 若无键按下,则程序往下执行
MOV AH,08H ;如有Esc键按下,则程序退出
INT 21H
CMP AL,27
JZ EXIT
NEXT0:
CALL DELAY
lop: mov dx,307h ;使PC0置高发启动信号
mov al,1h ;00000001,先使PC0为
out dx,al
mov cx,0f00h ;delay
lop1:loop lop1
mov dx,307h
mov al,0h ;00000000,延时后使PC0为发启动信号
out dx,al
JMP L1
EXIT:
MOV AX,2572H ;恢复中断向量
MOV DX,INT0A_SEG
PUSH DS
13
MOV DS,DX
MOV DX,INT0A_OFF
INT 21H
POP DS
IN AL,0A1H ;屏蔽IRQ10
OR AL,04H
OUT 0A1H,AL
IN AL,21H ;屏蔽IRQ2
OR AL,04H
OUT 21H,AL
MOV AX,4C00H ;程序退出
INT 21H
LEDLIGHT PROC FAR ;中断服务程序
PUSH AX
PUSH DX
CLI ;关中断
mov dx,307h
mov al,5h ;00000101,使PC2为高,发出OE
out dx,al
mov dx,304h ;从A口读数据
in al,dx
MOV DX,305H ;从B口向LED输出数据
OUT DX,AL
CALL DISP ;向屏幕输出数据
MOV AL,62H ;发中断结束命令
MOV DX,0A0H
OUT DX,AL ;向从片发EOI命令
OUT 020H,AL ;向主片发EOI命令
STI ;开中断
POP DX
POP AX
IRET
LEDLIGHT ENDP
CODE ENDS
END START
九(收获、体会和建议
过这次课程设计,我学到了很多东西,在电路设计和具体连线方面有了很大进步,
对汇编语言程序设计加深了理解和掌握,对芯片也有了更清楚的认识。在试验是我们连
个人分工合作,一人主要做软件、另一个主要负责硬件。当我们连好线的时候用程序测
14
试失败了。一直检查线路也没有错误,然后那老师对8255的测试程序来测试,居然也不行,起初以为是8255的芯片的问题换了一个还是不行,检查线路没有问题,怎么查也查不到问题,后来找老师问原因,老师说不只是8255,也可能是74138或245的问题,通过老师的指导我们又开始查那些线路和芯片,果然是新片的问题,换上芯片就好了,程序终于可以执行了,当时我真的很高兴。我懂得了调试程序找出问题比设计电路连线更麻烦。
在调试问题中我学到了很多解决问题的方法
1、 发光二极管在开电源的时候不亮
解决办法:电源连线时接错位置,改接+5V即可
2、 屏幕上没有数据显示
解决办法:
a. 用以下代码检测8255连线是否正确
Code segment
Assume cs:code
Start:
MOV DX,307h
Mov al,1001000b
Out dx,al
Mov dx,305h
Mov al,00001111b
Out dx,al
CODE ENDS
END START
结果:LED四个亮四个灭,说明8255连线正确
b. 将0809的CLOCK信号线接总线的0.5MHZ,检测8253连线是否正确
结果:采集数据正常,LED也随数据的不同而变化,说明8253时钟信号有问题
C(用万用表检测8253的引脚是否连通
结果:8253的OUT2导线接触不良,更正后问题解决
通过这次试验我收获了很多,它使我把以前忘记的知识又复习了一遍,也是我了解了很多知识的重要性,更知道自己懂得的太少,还要努力获取更多的知识,更谢谢老师给我们这次机会使我更加了解自己的不足。我对这方面很感兴趣,我会继续努力的。
15