检测与报警系统的设计与开发.docx
《检测与报警系统的设计与开发.docx》由会员分享,可在线阅读,更多相关《检测与报警系统的设计与开发.docx(23页珍藏版)》请在冰点文库上搜索。
检测与报警系统的设计与开发
合肥学院
计算机科学与技术系
微机原理与接口技术
课程设计报告
2008~2009学年第一学期
课程
微机原理与接口技术
课程设计名称
检测与报警系统的设计与开发
学生姓名
邓绪斌
学号
0604032015
专业班级
网络工程
(2)班
指导教师
龙夏老师
2009年2月
一题目分析及解决方案
内容:
用STARES598PCI单板机,设计并开发能检测模拟信号,并能产生报警信号的系统。
(1)能对输入的0—5V模拟电压信号进行检测。
(2)能判断所检测的信号是否越界。
(3)若信号越界则进行声(PC扬声器)、光(发光二极管)。
(4)显示界限值与输入的电压值。
说明:
其界限值是自行设定的(2.5V),其所对应的数字量为((2.5/5)*255=127.5=80H)。
事先将其存储在某寄存器或存储器单元中。
1题义需要分析
电压值为模拟信号,如何实现其转化为数字信号?
界限值如何设定及显示在LED上?
输入的模拟电压与界限值的比较,并判断是否超出范围?
声光报警如何实现?
2解决问题方法及思路
2.1硬件部分
*数模转换器:
AD7715或ADC0809
对比ADC0809,其精度高、误差小可靠性好、可编性强,但成本高很多。
就本实验来说,由于要实现的是简单的电压越界判断,对精度的要求并不太高,所以选择ADC0809。
*可编程并行接口芯片:
8279或8255A
本实验选用8255A
*输入设备:
小键盘或逻辑开关:
选择数字逻辑开关电路作为输入设备较方便。
*报警发光及显示电压值设备:
实验时采用:
一片ADC0809模拟转换器用于将采集的模拟信号转换成数字信号,可编程并行接口芯片8255一片,逻辑开关电路板一片,发光二极管一只,LED若干,扬声器一个,逻辑开关一个。
2.2软件部分
(1)对8255进行初始化设计,设置8255的工作方式并确定8255的断口地址;
(2)启动0809的程序进行模/数转换,并将结果送入;
(3)将结果与界限值比较,大于则发生报警。
二硬件设计
1数模转换器0809
1.10809的作用
利用0809进行模/数转换,将采样结果电压转换8086能应用的数字量。
1.20809的功能分析
模/数转换是指通过一定的电路将模拟量转变为数字量,由于模拟量是连续的,而数字量是离散的,所以,一般在某个范围中的模拟量对应于某一数字量,这就是说,在A/D转换时,模拟量和数字量之间并不是一一对应的关系,即从理论上,有一个转换精度的问题,转换精度反映了A/D转换器的实际输出接近理想输出的精确程度,A/D转换的精度通常是用数字量的最低有效位(LSB)来表示的,设数字量的最低度有效位于对应于模拟量△,这是,我们称△为数字量的最低有效位的当量,ADC0809采用的是逐位式进行转换时,要用一个逐位逼近寄存器存放转换好的数字量,转换结束时,将数字量送到缓冲寄存器中,当启动信号变为高电平时,转换开始,同时,逐位逼近寄存进行计数。
逐位逼近寄存器工作是从最高位开始,通过设置试探值来计数,在第一个时钟脉冲时,控制电路反最高位送到逐位逼近寄存器,使它的输出为10000000,则D/A转换器输出电压V0为满量程值128/255,若V0大于Vi,则作为比较器的运算放大器的输出成为低电平,控制电路据此清除逐位逼近寄存器中的最高位;若V0小于Vi,则作为比较器的运算放大器的输出成为低电平,控制电路据此清楚逐位逼近寄存器中的最高位;若V0小于Vi,则比较器输出高电平,控制电路使最高位的1保留下来,如果最高位被保留,则值10000000下一个时钟脉冲使次高位D6为1,于是逐位逼近寄存器值为11000000,V0为满量程值192/255,此后,若V0大于Vi,则比较器输出低电平,从而使次高位D6复位,如果V0小于Vi,则比较器输出高电平,从而保留高位D6为1,再下一个时钟脉冲D5置1,比较……直到D0为1,再与输入电压比较,经N次比较,寄存器中得到的值就是转换后的数据,转换以后,控制电路送出一个低电平作为结束信号,这个信号的下降沿将逐位逼近寄存器中的数字量送入缓冲寄存器,从而得到数字量输出。
1.3ADC0809的技术参数
分辨率:
8位是指ADC对输入电压微小变化响应能力的量度,它是数字输入的最低位(LSB)所对应的模拟输入电压值。
若输入电压满刻度值为VFS,转换位数为N。
分辨率为1/2NVFS当模拟电压低于此值时,ADC不予响应。
绝对精度:
是指在输出端产生给定的数字代码,实际需要的模拟输入值与理论上需要的模拟输入值之差。
相对精度:
是指满刻度值校准后,任意数字输出所对应的实际模拟输入值与理论直之差。
转换时间:
是指ADC完成一次转换所需要时间,即从启动的信号开始到转换结束得到稳定的数字输出量所需要时间,通常us级。
量程:
0—5V,指所能转换的输入电压范围。
2可编程并行接口芯片8255A
2.18255A的作用
利用8255将转换后的数字量传送到8086CPU,同时8255A也通过其某些输出量来控制ADC0809工作,8255也用来输出控制量来控制报警系统发生报警。
2.28255A的功能分析
8255是可编程并行接口,内部有3个相互独立的8位数据端口,即A口、B口、C口。
三个端口都可以作为输入端口或输出端口。
A口有三种工作方式:
即方式0、方式1、方式2,而B口只能在方式0或方式1下,而C口通常作为联络信号使用。
8255的工作只有当片选CS效时才能进行。
而控制逻辑端口实现对其他端口的控制。
2.38255A引脚信号
与外设相连接的
PA7—PA0;A口数据信号线
PB7—PB0;B口数据信号线
PC7—PC0;C口数据信号线
与CPU相连的:
RESET:
复位信号。
当此信号来时,所有寄存器都被清除,同时三个数据端口被自动置为输入端口。
D7—D0:
它们是8255A的数据线和系统总线相连。
CS:
片选芯片。
RD:
读信号。
当此信号有效时时,CPU可从8255A读取数据。
WR:
写信号。
当此信号有效时,CPU可向8255A中写入数据。
A1、A0:
端口选择信号。
2.48255A的基本操作
8255A的操作功能表
2.58255A的技术参数
其中PER为peripheralport的缩写
输入最低电压:
min-0.5,max0.8V,输入最高电压:
2.0V。
输出最低电压:
0.45V,输出最高电压:
2.4V。
2.68255A的控制字:
8255A方式控制字:
方式0的工作特点:
这种方式通常不用联络信号,不使用中断,三个通道中的每一个都有可以由程序选定作为输入或输出。
置位/控制字:
3扬声器
3.1扬声器的作用
在实验中,扬声器用作声音报警。
3.2扬声器的功能
扬声器是将电能转化成声能,并将声能辐射到空气中去的一种电声转换器件。
3.3扬声器的技术参数
它一般包括灵敏度、频率响应、额定功率、额定阻抗、指向性、失真等。
4发光二极管
4.1发光二极管的作用
对检测的越界信号进行发光报警。
4.2发光二极管的功能分析
工作原理:
当在发光二极管PN结上加正电压时,PN结势垒降低,载流子的扩散运动大于漂移运动,致使P区的空穴注入到N区,N区的电子注入到P区,这样相互注入的空穴与电子相遇后会产生复合,复合时产生的能量大部分以光的形式出现。
4.3技术参数
发光二极管的压降一般为1.5—2.0V,其工作电流一般取10—20mA为宜。
5开关
5.1开关的作用
本次实验设计需要用八位开关置数,故要用到开关,输入0时,开关闭合,输入1时,开关断开。
5.2开关的功能分析
开关未合时,与5V电压相连,输入1,当合上之后,开关就将A口接地,也就输入为0,4位开关可以置0—15的数。
5.3逻辑开关及其编码
开关高电平:
+5V、低电平:
0V
6七段LED显示
6.1七段LED显示器作用
显示设定的界限值及输入的电压值。
6.2七段LED显示器的功能分析
七段LED显示器通过汇编语言的控制,可以控制在哪几个发光二极管亮,从而显示数字,其工作原理:
如果发光二极管共阳极,则输入为0时不亮,反之如果发光共阴极,则输入1时亮,0时不亮。
发光二极管是一种外加电压超过额定电压时发生击穿,并因此能产生可发光的器件,数码显示器通常有多个发光二极管来组成七段或八段笔画显示器,当段组合发光时,便会显示某一个数码管或字符,七段代码的个作用a~g和DP的输入。
6.3七段LED显示的技术参数
主要参数:
此时的驱动电流为25mA。
6.4LED真值表
6.5LED原理图
7硬件总逻辑图及其说明
说明:
8086通过8255同0809相连接,由电位器将一路模拟量送入0809,并有8255采用查询工作方式控制0809工作。
8086通过8255向报警系统(扬声器、发光二极管)发送控制信号。
三控制程序设计
1控制程序设计思路说明
利用ADC0809芯片实现模拟信号转换数字信号,又利用8255输出ADC0809的转换量,其中8255的PA作为输入端,PC用做输出端,从而控制报警系统,是否发生报警。
因此应首先初始化8255,令A口为输入口,B口为输出口,C口高四位为输出口,低四位为输入口。
C口清零,防止刚开始实验就报警,启动ADC0809开始转换,当PC0为1时(即高电平)表示转换结束,把转换后的数据存入AL中。
然后通过逻辑开关自行设定一个低界限值存入一个变量ADD4中,且设定一个高低界限值存入一个变量ADD2中,比较AL与ADD4大小,若小于或等于界限值,置PC6为1,PC7为1,二极管发光,扬声器发声报警;再比较AL与ADD2大小,若大于或等于界限值,置PC6为1,PC7为1,二极管发光,扬声器发声报警。
此时可以拨动蜂鸣器旋钮来解除报警(既程序检测到PC1=1时,分别置PC6,PC7为0)然后程序转入启动转换命令处,可以重新设定界限值继续进行比较。
2控制程序流程图
3控制程序
.MODELTINY
PCIBAR3EQU1CH;8位I/O空间基地址(它就是实验仪的基地址,也为DMA&32BITRAM板卡上的8237提供基地址)
Vendor_IDEQU10EBH;厂商ID号
Device_IDEQU8376;设备ID号
.STACK100
.DATA
IO_Bit8_BaseAddressDW?
msg0DB'BIOS不支持访问PCI$'
msg1DB'找不到StarPCI9052板卡$'
msg2DB'读8位I/O空间基地址时出错$'
COM_ADDDW00F3H;控制口偏移量
PA_ADDDW00F0H;PA口偏移量
PB_ADDDW00F1H;PB口偏移量
PC_ADDDW00F2H;PC口偏移量
PD_ADDDW00E0H;AD口偏移量
TABDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H;代码段
.CODE
START:
MOVAX,@DATA
MOVDS,AX
NOP
CALLInitPCI
CALLModifyAddress;根据PCI提供的基地址,将偏移地址转化为实地址
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movdx,COM_ADD
moval,90h;初始化8255,PA作为输入端,PB,PC输出,
outdx,al;方式选择控制字送8255A控制端口
BEGIN:
moval,0FFh
movdx,PC_ADD;C口清零,防止刚开始实验就报警
outdx,al
DXB1:
MOVAL,00H
movdx,PD_ADD;启动ADC0809开始转换
outdx,al
movcx,200h
LAY1:
inal,dx;等待0809转换完毕
loopLAY1
movdx,PA_ADD;PA口偏移量
inal,dx;读开关界限值
movcl,al;逻辑开关界限值存入cl
movdx,PD_ADD
inal,dx;电压采集到al
movAH,al
movbp,0F00h;闪光灯总循环延时程序
DISP:
moval,cl
andal,0Fh;取转换后数字量的低四位
movbx,offsetTAB;将TAB的偏移量存入BX
xlat
movdx,PB_ADD;从8255A的B口读取数字量,段选
outdx,al
movdx,PC_ADD;PC口位选
moval,11111110B;七段LED的位选,选取最低位,位选
outdx,al;显示
movch,0FFh
DXB2:
decch;闪光灯延时子程序
cmpch,0h
jneDXB2
moval,0FFh
outdx,al;禁止显示
moval,cl
shral,4;逻辑右移,高位补零
movbx,offsettab
xlat
movdx,PB_ADD
outdx,al
moval,11111101B;位选,选取最高位
movdx,PC_ADD
outdx,al
movch,0FFh
DXB3:
decch;闪光灯延时子程序
cmpch,0h
jneDXB3
moval,0FFh
outdx,al;禁止显示
moval,AH
andal,0Fh;取转换后数字量的低四位
movbx,offsettab
xlat
movdx,PB_ADD
outdx,al
moval,11101111B;位选,选取最高位
movdx,PC_ADD
outdx,al
movch,0FFh
DXB4:
decch;闪光灯延时子程序
cmpch,0h
jneDXB4
moval,0FFh
outdx,al;禁止显示
moval,AH
shral,4;逻辑右移,高位补零
movbx,offsettab
xlat
movdx,PB_ADD
outdx,al
moval,11011111B;位选,选取最高位
movdx,PC_ADD
outdx,al
movch,0FFh
DXB5:
decch;闪光灯延时子程序
cmpch,0h
jneDXB5
moval,0FFH
outdx,al;禁止显示
decbp
cmpbp,0h
JNEDISP2;循环显示转换后的数字量,使人眼感觉不到动态
cmpah,cl
jbSTEPX;低于重新启动0809,继续转换模拟信号
movdx,PC_ADD;高于逻辑开关界限值则设置方式控制字
moval,00111111B;二极管进行发光报警,蜂鸣器进行声音报警
outdx,al
callDELAY;启动报警状态延时子程序
jmpBEGIN;解除报警后继续重新开始
RET
DISP2:
JMPDISP
STEPX:
JMPDXB1
DELAYproc;报警状态延时子程序
movcx,0FFFFh
LAY2:
loopLAY2
ret
DELAYendp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
InitPCIPROCNEAR
MOVAH,00H
MOVAL,03H
INT10H;清屏
MOVAH,0B1H
MOVAL,01H
INT1AH
CMPAH,0
JZInitPCI2
LEADX,msg0
InitPCI1:
MOVAH,09H
INT21H
JMPExit
InitPCI2:
MOVAH,0B1H
MOVAL,02H
MOVCX,Device_ID
MOVDX,Vendor_ID
MOVSI,0
INT1AH
JNCInitPCI3;是否存在StarPCI9052板卡
LEADX,msg1
JMPInitPCI1
InitPCI3:
MOVDI,PCIBAR3
MOVAH,0B1H
MOVAL,09H
INT1AH;读取该卡PCI9052基地址
JNCInitPCI4
LEADX,msg2
JMPInitPCI1
InitPCI4:
ANDCX,0FFFCH
MOVIO_Bit8_BaseAddress,CX
RET
InitPCIENDP
ModifyAddressPROCNEAR
ADDCOM_ADD,CX
ADDPA_ADD,CX
ADDPB_ADD,CX
ADDPC_ADD,CX
ADDPD_ADD,CX
RET
RET
ModifyAddressENDP
Exit:
MOVAH,4CH
INT21H
ENDSTART
四上机调试
1.硬件调试
1)此次课程设计由于线路都是自己和搭档想的,所以在某些方面考虑的都不成熟.通过一上午的熟悉和对各模块作用的了解,以及在张老师的指导下,硬件调试基本上没有出现太多的问题,只是在数字量通过LED显示时,没有考虑到统一时序,后将CLK和500K连接,为CPU和总线控制逻辑电路提供定时手段.
2)连线时要注意不要带电插拔,因为在带电插拔时的电流有可能将部件烧坏。
2.软件调试
在软件部分要实现模拟量转化为数字量、界限值通过逻辑开关的设定及将他们在七段LED数码管上显示出来,最后是判断输入的电压值是否超出范围。
实现声光报警问题:
(1)由于系统可能存在留有模拟信号的原因致使启动新机器就会声光报警,所以在程序中加入程序段使C口清零,防止刚开始实验就报警。
(2)在程序段中加入延时子程序防止系统反应过快。
(3)PC口全部置0可使二极管,蜂鸣器同时报警,实现该课程的要求。
3.联机调试
联机调试时在单步调试都会出现正确结果,但是全速运行时没出来,后来发觉是延时时间太短结果不明显,然后将延迟时间增长,再进行全速运行便得到正确的响应。
4.调试结果及问题的提出
通过逻辑开关板给出一个界限值,输入电压值,经过0809将此模拟量转化成数字量后,若此数字量大于或等于界限值,扬声器就会报警,并且二极管不停的闪烁,并且将设定的界限值的大小及电压值通过7路LED显示出来,通过一段延时子程序后。
这时我们又可以给出一个新的界限值,重新进化比较。
循环进行转化和测试!
五设计总结及问题讨论
1总结
课程设计结果就是可以将外界输入的一个模拟量经过08096将其转换为数字量后通过8255给出的界限值进行比较,判断是否越界,若越界则报警,同时将界限值与输入的模拟电压通过LED直观显示。
2问题讨论
如何将输入的电压值及界限值显示在LED上,让程序设计有更强的说服力,经过同组人员的讨论及老师的指导,通过取数值的高四位及低四位,向LED上输送,最终实现预想结果。
ADC0809是A/D8位转换器,采用逐次逼近式进行转换。
转换规则为数字量=Ui/Uc*256H其中,Ui为输入的模拟电压,Ue为机上的电源电压,将模拟量转换成数字量(十六进制表示的)。
ADC0809有8路模拟量输入通道(IN0—IN7),可通过通道地址进行译码选通任意一路进入片内,进行转化。
当给ADC0809一个启动信号(START)后,通过控制时许电路以及逐次逼近寄存器,采用逐次逼近的方式进行A/D转化。
通过查询EOC(转换结束信号,高电平有效)来判断是否结束。
若转换结束,EOC的高电平可用作中断请求信号。
ADC0809转换后的数字量通过三态缓冲器输出,当输出允许OE=’1”,打开三态门输出数字量。
3体会和建议
通过本次课程设计,加强了自己的动手实践能力,操作能力及解决问题的能力。
并且通过查阅相关资料,学习书本及课堂中老师不曾介绍过的知识.同时也学会了在动手实践的过程中,发现问题,分析问题,在最短的时间内寻找问题的解决方案。
更重要的是通过本次的课程设计,我学到了关于微机原理课程的更多相关内容。
更加深入认识了8255A的内部构造、控制字、方式字的设置以及通过8255A控制输出量。
充分认识理论知识对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼。
上理论课时总是觉得有些枯燥,因为太抽象.虽然平时通过实验课把老师设计的东西看懂并动手做一遍能够帮助我们在一定程度上加深了对理论知识的理解,但是还是不够深刻.通过此次课程设计自己查资料动脑筋设计方案,并花大量的时间调试硬件和软件,对课本知识的理解上升更高的层次,相信再过很长时间也还印象深刻.
以前学习汇编语言时,学的很不扎实,直接导致了在实验过程在中编写程序很不顺利。
出现了诸多错误。
好在通过与同学讨论,以及查阅了大量的资料,纠正了错误。
使我对汇编语言实现了第二次的学习,更深一层的理解并掌握了汇编语言。
计算机语言,理论方面懂的再多是用途不大的,必须通过自己的亲自编写来对实际问题进行解决。
就比如说这次实验,虽然对汇编语言的指令及编写格式已经有了很透彻的了解,但是在实际编写过程中,却出现了不知如何表达的问题。
这种能力的强化是需要经常锻炼的。
本次课程设计正好给了我一次锻炼的机会,增强了我在理解的基础上,能编写汇编语言解决实际问题的能力。
总的来说,虽然课程设计的时间有限,但在这有限的时间里,不仅完成了作业,提交了结果,也丰富了这门硬件课程的更多知识,更深入地了解了这门专业课的精髓,充分认识理论知识对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼。
通过这次设计实践能够进一步加深对专业知识和理论知识学习的认识和理解,使自己的设计水平和对所学的知识的应用能力以及分析问题解决问题的能力得到全面提高。
设计者:
邓绪斌
完成时间:
2009年2月