微机原理与接口技术
课程设计报告
设计名称:温度报警器
专 业: 计算机科学与技术 班 级: 姓 名: 学 号: 指导教师:
一、 功能分析
本设计采且PC微机一台和TD-PIT+实验系统一套实现了温度报警的功能,输入由A/D 转换单元可调电位器提供0~5V来模拟0~255℃的温度,具体所能实现的功能如下:
①输出数字量显示在显示器屏幕上,显示形式为:The temperature is:XXX;
②输出数字量显示在数码管上;
③当温度大于等于50℃时,报警器发出声音报警,否则不发声。
二、 设计原理
设计中采用的芯片有ADC0809,8254和8255。
1.ADC0809:
ADC0809包括一个8位的逐次逼近型的ADC部分,并提供一个8通道的模拟多路开关和联合寻址逻辑。用它可直接输入8个单端的模拟信号,分时进行A/D转换,在多点巡回检测、过程控制等应用领域中使用非常广泛。ADC0809的主要技术指标为:
·分辨率:8位
·单电源:+5V
·总的不可调误差:±1LSB ·转换时间:取决于时钟频率 ·模拟输入范围:单极性 0~5V ·时钟频率范围:10KHz~1280KHz
ADC0809的外部管脚如图1所示,地址信号与选中通道的关系如表1所示。
图1 ADC0809引脚图
表1 地址输入线与模拟输入端的关系
ADDC 0 0 0 0 1 1 1 1 ADDB 0 0 1 1 0 0 1 1 ADDA 0 1 0 1 0 1 0 1 模拟信号通道
IN0 IN1 IN2 IN3 IN4 IN5 IN6 IN7
设计中使用通道0,故ADDC,ADDB,ADDA全部接0。
2.8254:
8254是Intel公司生产的可编程间隔定时器。是8253的改进型,比8253具有更优良的性能。8254具有以下基本功能:
(1) 有3个独立的16位计数器;
(2) 每个计数器可按二进制或十进制(BCD)计数;
(3) 每个计数器可编程工作于6种不同工作方式;
(4) 8254每个计数器允许的最高计数频率为10MHz(8253为2MHz);
(5) 8254有读回命令(8253没有),除了可以读出当前计数单元的内容外,还可以读出状态寄存器的内容。
(6) 计数脉冲可以是有规律的时钟信号,也可以是随机信号。计数初值公式为n=fCLKi÷fOUTi、其中fCLKi是输入时钟脉冲的频率,fOUTi是输出波形的频率。
图2是8254的内部结构框图和引脚图,它是由与CPU的接口、内部控制电路和三个计数器组成。8254的工作方式如下述:
(1) 方式0:计数到0结束输出正跃变信号方式。
(2) 方式1:硬件可重触发单稳方式。 (3) 方式2:频率发生器方式。 (4) 方式3:方波发生器。 (5) 方式4:软件触发选通方式。 (6) 方式5:硬件触发选通方式。
图2 8254内部结构和引脚图
8254的控制字有两个:一个用来设置计数器的工作方式,称为方式控制字;另一个用来设置读回命令,称为读回控制字。这两个控制字共用一个地址,由标识位来区分。控制字格式如图3所示。
图3 8254方式控制字格式
利用8254的方式3—“方波发生器”,将对应发声频率的计数初值写入计数器,就可产生对应频率的方波。计数初值的计算如下:
计数初值 = 输入时钟 ÷ 输出频率
输入时钟采用系统总线上CLK(1.041667MHz),报警时写入初值为1047,发声频率即为1041667/1047Hz,然后调用一个软件延时程序,再将0001写入初值,发声频率变为1041667/1Hz。由于正常人耳能听到的频率范围为20~20KHz,所以1041667Hz是听不到的,也就达到了消声的目的。设计中正是不断执行“判断温度大于等于50℃→发声→消声→再判断”这个循环来实现温度报警的功能。
3.8255:
8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种方式下工作:方式0--基本输入/出方式、方式1--选通输入/出方式、方式2--双向选通工作方式。8255的内部结构及引脚如图4所示,8255工作方式控制字和C口按位置位/复位控制字格式如图5所示。
图4 8255内部结构及引脚图
图5 8255工作方式控制字格式及C口置位/复位控制字
实验系统中的键盘及数码管显示单元提供了4行×4列共16个按键,4个7段数码管也接成扫描电路方式。共用段位控制信号A~Dp,各自独立的公共端及列选择信号X1~X4,行扫描信号为Y1~Y4。电路原理如图6所示。
图6 键盘及数码管显示单元电路原理图
8255的A,B口均为输出且为方式0,其中PA0~PA3接X1~X4用来选中需要显示的数码管;PB0~PB7接共用段位控制信号A~Dp,控制各个数码管具体显示的内容。
4.接线图:
综上所述,接线图如图7所示:
图7 设计接线图
对于此图有以下两点需要说明:
(1)系统总线上的XA2,XA3分别接芯片的A0,A1,因此芯片的地址要在片选基础上左移两位,即*4,例如8255片选接IOY2,则方式字地址为IOY2+03H*4 ,A口地址为IOY2+00H*4 ;
(2)作图软件中ADC0809无CS端,故采用了如图的连接方式,实际中只需将系统总线IOY0与ADC0809的CS连接即可。
三、 软件流程图
四、 软件代码
;***************根据CHECK配置信息修改下列符号值******************************* IOY0 EQU 0E000H IOY1 EQU 0E040H
IOY2 EQU 0E080H ;****************************************************************************** AD0809 EQU IOY0+00H*4 MY8254_0 EQU IOY1+00H*4 MY8254_MODE EQU IOY1+03H*4 MY8255_A EQU IOY2+00H*4 MY8255_B EQU IOY2+01H*4 MY8255_MODE EQU IOY2+03H*4
DATA SEGMENT
STR DB 'The temperature is: $'
DTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,67H ;初始化缓冲用于存放键值 DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV DX,MY8255_MODE ;初始化8255工作方式
MOV AL,80H OUT DX,AL
MOV DX,MY8254_MODE ;初始化8254工作方式 MOV AL,37H OUT DX,AL
LOOP1:MOV DX,AD0809 ;启动A/D转换
OUT DX,AL
MOV DX,OFFSET STR ;在屏幕上显示字符串“The temperature is:” MOV AH,9 INT 21H
MOV DX,AD0809 ;读出转换结果 IN AL,DX
MOV CL,AL
CMP AL,32H ;判断是否小于32H
JB LOOP2
MOV DX,MY8254_0 ;将计数初值1047装入8254计数器0, 发出对应频率声音 MOV AL,47H OUT DX,AL MOV AL,10H OUT DX,AL CALL DALLY
MOV DX,MY8254_0 MOV AL,01H OUT DX,AL MOV AL,00H OUT DX,AL
LOOP2:MOV AL,0FDH MOV DX,MY8255_A
OUT DX,AL
MOV AH,00H MOV AL,CL MOV BL,64H DIV BL
MOV CH,AH ADD AL,30H MOV DL,AL MOV AH,02H
INT 21H
SUB AL,30H MOV BX,OFFSET DTABLE AND AX,00FFH ADD BX,AX MOV AL,[BX] MOV DX,MY8255_B OUT DX,AL CALL DALLY
MOV AL,0FBH MOV DX,MY8255_A OUT DX,AL
MOV AL,CH MOV AH,00H
将计数初值0001装入8254计数器0,停止发声 ;选中X2对应的数码管
;将结果转换成十进制,将百位显示在屏幕上 ;将百位显示在数码管上,并调用延时子程序 ;选中X3对应的数码管 ;将十位显示在屏幕上 ; MOV BL,0AH DIV BL
MOV CH,AH ADD AL,30H MOV DL,AL MOV AH,02H INT 21H
SUB AL,30H ;将十位显示在数码管上,并调用延时子程序 MOV BX,OFFSET DTABLE AND AX,00FFH ADD BX,AX MOV AL,[BX]
MOV DX,MY8255_B OUT DX,AL CALL DALLY
MOV AL,0F7H MOV DX,MY8255_A OUT DX,AL
ADD CH,30H MOV DL,CH MOV AH,02H INT 21H
SUB CH,30H MOV AL,CH
MOV BX,OFFSET DTABLE AND AX,00FFH ADD BX,AX MOV AL,[BX] MOV DX,MY8255_B OUT DX,AL CALL DALLY
MOV DL,0DH MOV AH,02H INT 21H
MOV AH,1 INT 16H
JNZ QUIT JMP LOOP1
;选中X4对应的数码管 ;将个位显示在屏幕上 将个位显示在数码管上,并调用延时子程序 ;回车,置光标到行首 ;判断是否有按键按下 ;无按键则跳回继续循环,有则退出 ; QUIT: MOV AX,4C00H ;返回到DOS
INT 21H
DALLY PROC NEAR ;软件延时子程序
PUSH CX
PUSH AX
MOV CX,4000H
D1: MOV AX,0600H D2: DEC AX
JNZ D2 LOOP D1 POP AX POP CX RET
DALLY ENDP
CODE ENDS
END START
五、 设计收获
通过紧张有序的课程设计实践,不仅让我对ADC0809,8254,8255的原理,连接有了进一步的理解,更重要的是学会如何使用这些芯片解决实际问题,这让我的动手能力有了很大的提高,自信心也增强了。在课程设计中能够自己动脑解决所遇到的问题,书本上的知识有了用武之地,巩固和深化了自己的知识结构。
设计中遇到了的问题基本上都是关于如何控制报警方面的,关于8254控制发声课本上没有涉及,通过查资料才知道采用方式3的方法。第一次运行程序时,只要温度大于等于50℃时就开始报警,但不会停,于是想到了在每次报警之后加上一个消声的程序段,然而结果是温度超过50℃也不响,最终才想到在两者之前加上软件延时,才能基本上完美实现报警功能。
通过这次实践,我相信,只要自己在每一次实践中都能仔细思考,课程设计其实都不会很难,关键在于自己能不能认真思考,能不能亲自动手做实验,而不是想着其他人的劳动果实;其次还要多操作,只有多操作才能从中发现问题,才能及时向老师和同学请教,解决问题,从而更好的掌握书本中知识。还有通过这次实践也让我懂得了:安排课程设计目的不在于你做了多少,不在于你做得好不好,关键在于你能否认真去对待,在于你能否通过这次设计对课本上知识有了更深刻的认识,在于能否从中学到书本上学不到的知识。因此,我会认真地对待我的每一次实验。在此,非常感谢马老师,感谢他精心的授课,使我们有做这次课程设计的基本知识。
因篇幅问题不能全部显示,请点此查看更多更全内容