微机基础原理与接口技术课程教学设计温度报警器.doc
-/微机原理与接口技术课程设计报告设计名称:温度报警器专 业: 计算机科学与技术班 级: 姓 名: 学 号: 指导教师: 一、 功能分析本设计采且PC微机一台和TD-PIT+实验系统一套实现了温度报警的功能,输入由A/D转换单元可调电位器提供05V来模拟0255的温度,具体所能实现的功能如下:输出数字量显示在显示器屏幕上,显示形式为:The temperature is:XXX;输出数字量显示在数码管上;当温度大于等于50时,报警器发出声音报警,否则不发声。二、 设计原理设计中采用的芯片有ADC0809,8254和8255。1.ADC0809:ADC0809包括一个8位的逐次逼近型的ADC部分,并提供一个8通道的模拟多路开关和联合寻址逻辑。用它可直接输入8个单端的模拟信号,分时进行A/D转换,在多点巡回检测、过程控制等应用领域中使用非常广泛。ADC0809的主要技术指标为: 分辨率:8位单电源:5V总的不可调误差:1LSB转换时间:取决于时钟频率模拟输入范围:单极性 05V时钟频率范围:10KHz1280KHz ADC0809的外部管脚如图1所示,地址信号与选中通道的关系如表1所示。图1 ADC0809引脚图表1 地址输入线与模拟输入端的关系ADDCADDBADDA模拟信号通道000IN0001IN1010IN2011IN3100IN4101IN5110IN6111IN7设计中使用通道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=fCLKifOUTi、其中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。由于正常人耳能听到的频率范围为2020KHz,所以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段数码管也接成扫描电路方式。共用段位控制信号ADp,各自独立的公共端及列选择信号X1X4,行扫描信号为Y1Y4。电路原理如图6所示。图6 键盘及数码管显示单元电路原理图8255的A,B口均为输出且为方式0,其中PA0PA3接X1X4用来选中需要显示的数码管;PB0PB7接共用段位控制信号ADp,控制各个数码管具体显示的内容。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 0E000HIOY1 EQU 0E040HIOY2 EQU 0E080H;*AD0809 EQU IOY0+00H*4MY8254_0 EQU IOY1+00H*4MY8254_MODE EQU IOY1+03H*4MY8255_A EQU IOY2+00H*4MY8255_B EQU IOY2+01H*4MY8255_MODE EQU IOY2+03H*4DATA SEGMENTSTR DB The temperature is: $DTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,67H ;初始化缓冲用于存放键值DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV DX,MY8255_MODE ;初始化8255工作方式MOV AL,80HOUT DX,ALMOV DX,MY8254_MODE ;初始化8254工作方式MOV AL,37HOUT DX,ALLOOP1:MOV DX,AD0809 ;启动A/D转换OUT DX,ALMOV DX,OFFSET STR ;在屏幕上显示字符串“The temperature is:”MOV AH,9INT 21HMOV DX,AD0809 ;读出转换结果IN AL,DXMOV CL,ALCMP AL,32H ;判断是否小于32HJB LOOP2MOV DX,MY8254_0 ;将计数初值1047装入8254计数器0, 发出对应频率声音MOV AL,47HOUT DX,ALMOV AL,10HOUT DX,ALCALL DALLYMOV DX,MY8254_0 ;将计数初值0001装入8254计数器0,停止发声MOV AL,01HOUT DX,ALMOV AL,00HOUT DX,ALLOOP2:MOV AL,0FDH ;选中X2对应的数码管MOV DX,MY8255_AOUT DX,ALMOV AH,00H ;将结果转换成十进制,将百位显示在屏幕上MOV AL,CLMOV BL,64HDIV BLMOV CH,AHADD AL,30HMOV DL,AL MOV AH,02HINT 21HSUB AL,30H ;将百位显示在数码管上,并调用延时子程序MOV BX,OFFSET DTABLEAND AX,00FFHADD BX,AXMOV AL,BXMOV DX,MY8255_BOUT DX,ALCALL DALLYMOV AL,0FBH ;选中X3对应的数码管MOV DX,MY8255_AOUT DX,ALMOV AL,CH ;将十位显示在屏幕上MOV AH,00HMOV BL,0AHDIV BLMOV CH,AHADD AL,30HMOV DL,ALMOV AH,02HINT 21HSUB AL,30H ;将十位显示在数码管上,并调用延时子程序MOV BX,OFFSET DTABLEAND AX,00FFHADD BX,AXMOV AL,BXMOV DX,MY8255_BOUT DX,ALCALL DALLYMOV AL,0F7H ;选中X4对应的数码管MOV DX,MY8255_AOUT DX,ALADD CH,30H ;将个位显示在屏幕上MOV DL,CHMOV AH,02HINT 21HSUB CH,30H ;将个位显示在数码管上,并调用延时子程序MOV AL,CHMOV BX,OFFSET DTABLEAND AX,00FFHADD BX,AXMOV AL,BXMOV DX,MY8255_BOUT DX,ALCALL DALLYMOV DL,0DH ;回车,置光标到行首MOV AH,02HINT 21HMOV AH,1 ;判断是否有按键按下INT 16HJNZ QUIT ;无按键则跳回继续循环,有则退出JMP LOOP1QUIT: MOV AX,4C00H ;返回到DOSINT 21HDALLY PROC NEAR ;软件延时子程序PUSH CXPUSH AXMOV CX,4000HD1: MOV AX,0600HD2: DEC AXJNZ D2LOOP D1POP AXPOP CXRETDALLY ENDPCODE ENDS END START五、 设计收获通过紧张有序的课程设计实践,不仅让我对ADC0809,8254,8255的原理,连接有了进一步的理解,更重要的是学会如何使用这些芯片解决实际问题,这让我的动手能力有了很大的提高,自信心也增强了。在课程设计中能够自己动脑解决所遇到的问题,书本上的知识有了用武之地,巩固和深化了自己的知识结构。设计中遇到了的问题基本上都是关于如何控制报警方面的,关于8254控制发声课本上没有涉及,通过查资料才知道采用方式3的方法。第一次运行程序时,只要温度大于等于50时就开始报警,但不会停,于是想到了在每次报警之后加上一个消声的程序段,然而结果是温度超过50也不响,最终才想到在两者之前加上软件延时,才能基本上完美实现报警功能。通过这次实践,我相信,只要自己在每一次实践中都能仔细思考,课程设计其实都不会很难,关键在于自己能不能认真思考,能不能亲自动手做实验,而不是想着其他人的劳动果实;其次还要多操作,只有多操作才能从中发现问题,才能及时向老师和同学请教,解决问题,从而更好的掌握书本中知识。还有通过这次实践也让我懂得了:安排课程设计目的不在于你做了多少,不在于你做得好不好,关键在于你能否认真去对待,在于你能否通过这次设计对课本上知识有了更深刻的认识,在于能否从中学到书本上学不到的知识。因此,我会认真地对待我的每一次实验。在此,非常感谢马老师,感谢他精心的授课,使我们有做这次课程设计的基本知识。
收藏
- 资源描述:
-
-/
微机原理与接口技术
课程设计报告
设计名称:温度报警器
专 业: 计算机科学与技术
班 级:
姓 名:
学 号:
指导教师:
一、 功能分析
本设计采且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
ADDB
ADDA
模拟信号通道
0
0
0
IN0
0
0
1
IN1
0
1
0
IN2
0
1
1
IN3
1
0
0
IN4
1
0
1
IN5
1
1
0
IN6
1
1
1
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=fCLKifOUTi、其中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 ;将计数初值0001装入8254计数器0,停止发声
MOV AL,01H
OUT DX,AL
MOV AL,00H
OUT DX,AL
LOOP2:MOV AL,0FDH ;选中X2对应的数码管
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 ;选中X3对应的数码管
MOV DX,MY8255_A
OUT DX,AL
MOV AL,CH ;将十位显示在屏幕上
MOV AH,00H
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 ;选中X4对应的数码管
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
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℃也不响,最终才想到在两者之前加上软件延时,才能基本上完美实现报警功能。
通过这次实践,我相信,只要自己在每一次实践中都能仔细思考,课程设计其实都不会很难,关键在于自己能不能认真思考,能不能亲自动手做实验,而不是想着其他人的劳动果实;其次还要多操作,只有多操作才能从中发现问题,才能及时向老师和同学请教,解决问题,从而更好的掌握书本中知识。还有通过这次实践也让我懂得了:安排课程设计目的不在于你做了多少,不在于你做得好不好,关键在于你能否认真去对待,在于你能否通过这次设计对课本上知识有了更深刻的认识,在于能否从中学到书本上学不到的知识。因此,我会认真地对待我的每一次实验。在此,非常感谢马老师,感谢他精心的授课,使我们有做这次课程设计的基本知识。
展开阅读全文