模拟电压采集电路及程序设计计科11002班 03674 林科.docx
《模拟电压采集电路及程序设计计科11002班 03674 林科.docx》由会员分享,可在线阅读,更多相关《模拟电压采集电路及程序设计计科11002班 03674 林科.docx(18页珍藏版)》请在冰豆网上搜索。
模拟电压采集电路及程序设计计科11002班03674林科
微型计算机技术
课程设计
指导教师:
李鹏、雷鸣
学生班级:
计科11002班
学生姓名:
林科
学号:
201003674
课设日期:
201年12月21日~201年12月28日
一.设计任务-3-
二.设计目的-3-
三.设计内容-3-
8255的自检测-3-
8253的自检测-3-
退出系统-3-
四.课程设计所用器件.............................................................................................................................-4
五.课程设计思路-4
六.课程设计步骤-4-
七.课程设计内容剖析-5
八、软件编程……………………………………………………………………………………-9-
九.调试分析-10-
1、8255初始化-10-
2、5253初始化-10-
3、编写中断服务子程序-11-
十.原理图-13-
十一.程序代码-13-
十二、程序运行界面……………………………………………………………………………-23-
十三.课设小结…………………………………………………………………………………-24
一.设计任务
利用《微型计算机技术》课程中所学的主要可编程接口芯片8253、8255A、ADC0809和微机内部的中断控制器8259A(从保留的IRQ2或IRQ10端引入)设计一个模拟电压采集电路及相应的程序。
二.设计目的
1.通过本设计,使学生综合运用《微型计算机技术》、《汇编语言程序设计》以及电子技术等课程的内容,为以后从事计算机检测与控制工作奠定一定的基础。
2.主要掌握并行I/O接口芯片8253、8255A、ADC0809及中断控制芯片8259A等可编程器件的使用,掌握译码器74LS138的使用。
3.学会用汇编语言编写一个较完整的实用程序。
4.掌握微型计算机技术应用开发的全过程:
分析需求、设计原理图、选用元器件、布线、编程、调试、撰写报告等步骤。
三、课程设计内容
采用ADC0809设计一个单通道模拟电压采集电路,要求对所接通道变化的模拟电压值进行采集,采集来的数字量一路送至发光二极管显示,一路送至计算机显示到屏幕上,每行显示5个数据,采集完100个数据后停止采集过程,采集过程中按下ESC键也可中断采集过程。
四、课程设计所用器材
1一台微机原理与接口实训平台。
2可编程芯片8253、8255A、ADC0809和译码器芯片74LS138、数据总路线缓冲器74LS245各一片。
3可调电位器4.7KΩ一个、发光二极管8个、74LS06芯片2个、排电阻1个。
4其它逻辑器件、导线若干。
5示波器、万用表、常用工具等。
五.课程设计思路
4.7KΩ电位器一端接+5V,一端接地,调节电位器得到变化的模拟电压,该电压接至ADC0809的某一通道输入端(如IN0),ADC0809的时钟为500KHz,由8253对面包板上时钟1MHz分频后得到,8253的端口地址:
300H~303H
编程启动ADC0809转换(ADC0809完成一次转换的时间大约为120μs),将ADC0809的EOC引脚信号作为中断信号,若转换结束则进入中断服务程序。
在中断服务程序中读入模数转换结果,一路送至发光二极管显示,一路送至计算机显示到屏幕上。
8255A用做CPU和ADC0809间的接口芯片,ADC0809的控制信号(如OE、ALE、EOC、START等)由8255A的PC口提供,模数转换后的数字量经8255A的PA口读入,经PB口输出到发光二极管。
8255A端口地址:
304H~307H。
译码电路由74LS138提供。
6.课程设计步骤
设计出正确的接口电路原理图,要求用PROTEUS绘图软件绘制电路图,并注明器件的名称和管脚。
根据要求用74LS138设计出正确的I/O译码电路。
正确运用所给器件布线,搭接硬件电路。
选用C语言或汇编语言编写主程序以及各芯片调试子程序,要求:
界面友好、操作方便;
实现功能要求;
功能模块应有详细注释。
调试并排错,包括硬件电路和软件编程部分的错误。
写出完整的课程设计总结报告,并按时提交。
七、课程设计内容剖析
(1).MFPTPCI总线驱动板逻辑结构如图所示
74LS245的功能表:
(2)芯片介绍
74LS245数据总路线缓冲器
(3).ADC0809简介
Ø提供一个8通道的多路开关和寻址逻辑
●IN0~IN7:
8个模拟电压输入端
●ADDA、ADDB、ADDC:
3个地址输入线
●ALE:
地址锁存允许信号
ØALE的上升沿用于锁存3个地址输入的状态,然后由译码器从8个模拟输入中选择一个模拟输入端进行A/D
ØADC0809的转换时序:
ØADC0809内部锁存转换后的数字量
Ø具有三态数字量输出端D0~D7
Ø配合输出允许信号OE
Ø当输出允许信号OE为高电平有效时,将三态锁存缓冲器的数字量从D0~D7输出
其它的芯片查阅微型计算机技术的书。
(4).8255A与ADC0809的连接
(5).8253定时/计数器
对8253进行编程,8253的时钟(CLK0)取自MFID实验平台(1MHz或2MHz)。
对该信号进行分频后的500KHz作为ADC0809的转换时钟信号CLOCK,转换结束后,由EOC产生中断信号,送入到系统预留给用户的IRQ2(或IRQ10)引脚产生中断,在中断服务子程序中,启动一次模数转换。
8、软件编程
采用C语言或汇编语言编程均可。
(1)主菜单编写
1、8255自检
2、8253自检
3、ADC0809转换
返回
(2)ADC主程序编写
(3)ADC中断程序的编写
9、调试分析
(1)、初始化8255
8255有四个寄存器,地址为300h-303h,分别为A口,B口,C口,和控制口
可用如下代码初始化8255:
movdx,303h
moval,10011001B
outdx,al
(2)初始化8253
输入时钟信号为0.5MHZ,需要写入的计数初值为2,选用计数器0,工作方式3,代码如下:
movdx,307h
moval,00110110B
outdx,al
movax,2
movdx,304h
outdx,al
moval,ah
outdx,al
(3)编写中断服务子程序
设置好中断向量,调用72H号中断,在里面写入A/D转换的中断服务子程序地址,保存原来72H中断向量表里面的内容,最后在程序完成时要恢复72H里的内容,在执行这些操作的时候是不容许中断的,所以要关中断,操作完成后要开中断,可以用一下指令来完成:
cli;获取原中断向量里的内容并保存
inal,0a1h;设置中断屏蔽寄存器,系统自动产生72号中断
andal,0fbh
out0a1h,al
movax,3572h
int21h
movintoff,bx
movintseg,es
pushds
movdx,offsetconvert_proc;设置新的中断向量
movax,segconvert_proc
movds,ax
movax,2572h
int21h
popds
sti;开中断,进行判断选择按什么键
cli;恢复1c号中断向量
movdx,intoff
movax,intseg
movds,ax
movax,2572h
int21h
sti
中断服务子程序:
要想启动0809进行转换,首先必须有一个start信号,该信号为:
在转换的时候通过EOC信号来判断转换是否结束,当EOC信号由0变为1时就代表转换结束,此时让OE引脚为1,这时转换出来的数据就输出了。
10、原理图
11、程序代码
STACK1SEGMENTSTACK
DW200DUP(?
)
STACK1ENDS
DATASEGMENT
MESG1DB'8255checkself8253checkselfandA/Dconversion',0ah,0dh
DB'ExitwithEsc',0ah,0dh,'$'
LEDDATADB0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH
NUMdb0
count1db0
INT0A_OFFDW(?
)
INT0A_SEGDW(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
DELAYPROC
PUSHCX
PUSHBX
MOVBX,0FFFH
LOOP2:
MOVCX,0FFFFH
LOOP1:
LOOPLOOP1
DECBX
JNZLOOP2
POPBX
POPCX
RET
DELAYENDP;延时程序
START:
MOVAX,DATA
MOVDS,AX
MOVAH,09H
MOVDX,OFFSETMESG1
INT21h;显示提示信息
MOVDX,303H;初始化8255
MOVAL,80H
OUTDX,AL
MOVDX,301H;LED灯亮4盏灭四盏
MOVAL,0F0H
OUTDX,AL
MOVAX,3572H;获取原中断向量
INT21H
MOVINT0A_OFF,BX;保存原中断向量
MOVBX,ES
MOVINT0A_SEG,BX
CLI;关中断
MOVAX,2572H
MOVDX,SEGLEDLIGHT;设置新的中断向量
PUSHDS
MOVDS,DX
MOVDX,OFFSETLEDLIGHT
INT21H
POPDS
STI;开中断
INAL,0A1H;打开IRQ10
ANDAL,0FBH
OUT0A1H,AL
INAL,21H;打开IRQ2
ANDAL,0FBH
OUT21H,AL
MOVDX,307H;8253定时1S
MOVAL,01110110B
OUTDX,AL
MOVDX,305H
MOVAL,0E8H
OUTDX,AL
MOVAL,03H
OUTDX,AL
MOVDX,307H
MOVAL,10110110B
OUTDX,AL
MOVDX,306H
MOVAL,0E8H
OUTDX,AL
MOVAL,03H
OUTDX,AL
L1:
MOVAH,0BH;检查是否有Esc键按下
INT21H
INCAL
JNZNEXT0;若无键按下,则程序往下执行
MOVAH,08H;如有Esc键按下,则程序退出
INT21H
CMPAL,27
JZEXIT
NEXT0:
CALLDELAY
JMPL1
EXIT:
MOVAX,2572H;恢复中断向量
MOVDX,INT0A_SEG
PUSHDS
MOVDS,DX