微机原理课程设计 温度测控系统.docx
《微机原理课程设计 温度测控系统.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计 温度测控系统.docx(15页珍藏版)》请在冰豆网上搜索。
微机原理课程设计温度测控系统
微机原理课程设计
报告书
课题名温度测控系统
目录
1、设计目的--------------------------------------------3
二、设计内容和要求--------------------------------------3
三、设计原理--------------------------------------------3
四、程序代码--------------------------------------------6
五、硬件系统调试----------------------------------------10
六、设计总结与体会--------------------------------------13
七、参考文献--------------------------------------------14
Proteus是英国Labcenter公司开发的电路分析与实物仿真及印制电路板设计软件,它可以仿真、分析各种模拟电路与集成电路。
软件提供了大量模拟与数字元器件及外部设备,各种虚拟仪器,特别是它具有对单片机及其外围电路组成的综合系统的交互仿真功能。
Proteus7主要由ISIS和ARES两部分组成,ISIS的主要功能是原理图设计及与电路原理图的交互仿真,ARES主要用于印制电路板的设计。
一、设计目的
1.巩固和加深课堂所学知识;通过课程设计,熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,得到微机开发应用方面的初步训练。
2.学习掌握一般的硬件的设计方法和查阅、运用资料的能力;真正做到理论联系实际,提高动手能力和分析问题、解决问题的能力,实现由学习知识到应用知识的初步过渡。
3.熟练掌握微机系统与接口扩展电路的设计方法,熟练应用8086汇编语言编写应用程序和实际设计中的硬软件调试方法和步骤,熟悉微机系统的硬软件开发工具的使用方法
4.通过温度测控系统仿真系统设计与制作,深入了解与掌握数模转换,数码管显示和电动机驱动的方法,熟悉proteus软件操作。
二、设计内容和要求
总体要求:
根据题意自行设计电路,在实验箱上连接线路并编写相关汇编程序,调试成功。
设计内容:
利用ADC0809采用中断方式设计一个温度测控系统,在七段数码管上显示温度值,并根据测试的温度进行控制。
当检测温度到达温度上限60℃时启动直流电动机,而温度低于下限30℃时停止电动机。
数码管上的显示内容为:
XXC(采用十进制显示)
三、设计原理
温度测试系统主要由温度传感器、A/D转换、显示及电动机块组成。
温度传感器将外部温度信号转换为电压信号,经放大电路,再经由ADC0808转化为数字信号进行处理,软件中对数字量进行判断,并作相应的跳转,由8255实现正常显示和启动电动机。
各个芯片由8086来进行整体的控制。
1.电路原理图
上图中ADC0808的INO输入端接温度传感的ANZ端,进行温度量的采集,CLOCK接1M;8255A中A、B口与数码管连接如上图,PA0接直流电机的OUTPUT,其中地址端口接40H。
2.系统功能框图
3.程序流程图
上图实现了本次实验所要要求的功能:
检测温度到达温度上限60℃时启动直流电动机,而温度低于下限30℃时停止电动机,并在数码管上显示所采集到的数字量和转换后的模拟量。
程序采用中断处理的方式。
四、程序代码
DATASEGMENT
tabdb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h
bufdb0
a8255equ40h;8255的A,B,C口及控制口地址
b8255equ42h
c8255equ44h
Q8255equ46h
adc0808equ20h;ADC0808端口地址
DATAENDS
CODESEGMENT'CODE'
ASSUMEDS:
DATA,CS:
CODE
START:
movax,data
movds,ax
cli;关中断
movdx,Q8255;8255A初始化设置。
8255A控制字,A口为输出,B口为输出,C口的高四位为输出
moval,80h
outdx,al
movax,0;设置中断向量,非屏蔽中断NMI
moves,ax
movsi,02H*4
movax,offsetint0
moves:
[si],ax
movax,segint0
moves:
[si+2],ax
moval,00010011b;设置ICW1
movdx,30H
outdx,al
moval,00010000b;ICW2
movdx,32h
outdx,al
moval,1bh;ICW4
outdx,al
moval,0feH;OCW1
outdx,al
moval,80H;OCW2
movdx,30H
outdx,al
sti;开中断
movsi,offsetbuf
MAIN:
movdx,adc0808;启动ADC0808转换
moval,0
outdx,al
moval,80H;OCW2
movdx,30H
outdx,al
MOVCX,5
MON:
moval,[si]
movah,0
movbl,20
divbl
movbx,offsettab
xlat;换码指令,换成对应的段码
movdx,b8255;显示十位
outdx,al
moval,11101111b;位码选通
movdx,c8255
outdx,al
callDELAY_1S
moval,0ffh;不选中任何位选
outdx,al
moval,ah
movah,0
movbl,2
divbl
movbx,offsettab
xlat;换码指令
oral,80h;个位带小数点
movdx,b8255
outdx,al;显示个位及小数点
moval,11011111b;位码选通
movdx,c8255
outdx,al
callDELAY_1S;调用延时
moval,0ffh;不选中任何位选
outdx,al
moval,ah;小数位显示
movbx,offsettab
xlat
movdx,b8255
outdx,al
moval,10111111b
movdx,c8255
outdx,al
callDELAY_1S
moval,0ffh
outdx,al
moval,01111111b
outdx,al
moval,00111001b;显示最后字母”C”
movdx,b8255
outdx,al
callDELAY_1S
movdx,c8255
moval,0ffh
outdx,al
callDELAY_1S
moval,[si]
shral,1;逻辑右移一位,减小位扩展时的误差
cmpal,30;温度低于30时,跳到down
jbdown
cmpal,60;温度高于60度时,跳到up
jaup
jmpMAIN
LOOPMON
down:
movdx,a8255
moval,00h;PA0输出0,低电平不启动电机
outdx,al
jmpMAIN
up:
movdx,a8255
moval,01h;PA0输出1,高电平启动电机
outdx,al
jmpMAIN
int0procnear;中断程序
pushax
pushbx
PUSHSI
pushf
CLI
movdx,adc0808;读取转换好的数据
inal,dx
mov[si],al
moval,80H;OCW2
movdx,30H
outdx,al
sti
popf
POPSI
popbx
popax
iret
int0endp
DELAY_1Sproc;延时子程序
Pushbx
Pushcx
pushsi
movbx,1
LP2:
movcx,10
LP1:
LOOPLP1
DECbx
JNZLP2
Popsi
Popcx
Popbx
ret
DELAY_1SENDP
CODEENDS
ENDSTART
五、硬件系统调试
译码电路:
显示电路:
模数转化电路:
中断电路:
电动机电路:
调试过程中遇到的主要问题和解决办法
(1)仿真过程中,不能启动模数转换电路
仿真运行中,改变模拟信号时,系统并不能做出相应的显示。
解决办法:
利用debug下8086\SourceCode单步运行调试程序后,发现程序返回点过了0809启动的程序段,所以将程序中返回点由MON改至MAIM启动处,进而实现程序启动。
(2)当压力超出30~60范围,程序里只调用电机停止模块,而不调用数码管显示模块。
单步调试发现,此时数码管显示模块被跳过。
解决办法:
在电机控制程序段结束后,跳转到数码管显示部分。
六、设计总结与体会
这次微机原理的课程设计历时一个星期,我们组做的是一个温度测控系统,同时采用了中断控制,用到了ADC0809、8255A和8259A等芯片。
通过上网进行了相关内容的查询,了解了实验的基本原理,设计出了本系统的基本思想,然后按照实验的要求由简单到难,逐步实现了在七段数码管上显示出采集过来的数字量部分,在此基础之上实现了当检测温度到数字量上限60时启动直流电动机,而温度低于下限30时停止电动机这个功能。
以前对编程工具的使用还处于一知半解的状态,但是经过了一段上机的实践,对于怎么排错,差错,怎么看每一步的运行结果,怎么去了解每个寄存器的内容以确保程序的正确性上都有了很大程度的提高。
由于实验采集到的数字量不是很直观,最后我们将三位的数字量转换为了温度并和数字量一并在数码管上显示出来,进一步完善了本系统。
在实现各个功能的过程中遇到的主要问题:
(1)中断程序不执行,0809不能启动,这个问题经过单步调试才发现是跳转的程序段不正确。
(2)第二个问题是经老师提醒才发现,设计电路在采集。
相当于把所学的接口知识又复习了一遍,同时将平时实验中存在的一些疑问都解决掉了。
对于8255数码管的显示和0809A/D转换器基本工作原理有了更深入的了解,对两者结合起来实现比较复杂的功能(本实验中实现了在数码管上显示温度值,并用温度值来控制直流电机的运行情况的功能)也有了一定的了解。
通过这次课程设计使我懂得了理论和实践相结合起来是很重要的,从理论中知识是远远不够的,只有把所学的理论知识和实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
七、参考文献
[1]顾晖,梁惺彦.微机原理与接口技术—基于8086和Proteus仿真[M].北京:
电子工业出版社,2011,262-293
[2]徐晨,陈继红.微机原理及应用[M].北京:
高等教育出版社,2004
[3]康华光.电子技术基础(数电部分)[M].北京:
高等教育出版社,2006,143-151
[4]沈美明,温冬婵.IBM-PC汇编程序设计[M].北京:
清华大学出版社,2001
[5]周润景,张丽娜.Proteus入门实用教程[M].北京:
机械工业出版社,2007