微机原理及其应用微型计算机温度控制系统设计课程设计报告之令狐文艳创作.docx

上传人:b****6 文档编号:7793836 上传时间:2023-01-26 格式:DOCX 页数:11 大小:42.97KB
下载 相关 举报
微机原理及其应用微型计算机温度控制系统设计课程设计报告之令狐文艳创作.docx_第1页
第1页 / 共11页
微机原理及其应用微型计算机温度控制系统设计课程设计报告之令狐文艳创作.docx_第2页
第2页 / 共11页
微机原理及其应用微型计算机温度控制系统设计课程设计报告之令狐文艳创作.docx_第3页
第3页 / 共11页
微机原理及其应用微型计算机温度控制系统设计课程设计报告之令狐文艳创作.docx_第4页
第4页 / 共11页
微机原理及其应用微型计算机温度控制系统设计课程设计报告之令狐文艳创作.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

微机原理及其应用微型计算机温度控制系统设计课程设计报告之令狐文艳创作.docx

《微机原理及其应用微型计算机温度控制系统设计课程设计报告之令狐文艳创作.docx》由会员分享,可在线阅读,更多相关《微机原理及其应用微型计算机温度控制系统设计课程设计报告之令狐文艳创作.docx(11页珍藏版)》请在冰豆网上搜索。

微机原理及其应用微型计算机温度控制系统设计课程设计报告之令狐文艳创作.docx

微机原理及其应用微型计算机温度控制系统设计课程设计报告之令狐文艳创作

《微机原理及其应用》课程设计报告

令狐文艳

2011年3月2日

一、课程设计题目及系统功能介绍

微型计算机温度控制系统设计,假设工业现场温度范围为0~75℃,温度值经传感器检测后,经变送器变成0~5V范围内的电压信号。

电压信号送A/D转换器ADC0809转换成对应的数字量。

数字量经数字滤波后送入CPU作为本次采样值。

在LED数码显示器上显示温度值(采用十进制显示),并对温度进行测试和控制,当检测温度到达温度上限60℃时红灯亮,蜂鸣器报警,低于下限30℃时黄灯亮,蜂鸣器报警,以达到监控温度的目的。

本设计采用程序控制方式。

系统功能:

每隔0.1秒钟对现场温度连续采集三次取平均值作为本次采样的有效值;判断温度是否高于上限值60℃或低于下限值30℃,如超出该范围则分别用红、黄发光二极管和报警;把采集来的电压值转化成温度值在LED显示器上显示;若键盘输入“R”则返回DOS,结束程序。

二、硬件设计

系统的硬件工作原理:

CPU通过8255查询8253的定时时间是否已到,若到则对8253接口2重新初始化且用ADC0809模/数转换器采样,不到则继续七段数码管显示与LED灯和蜂鸣器的过程,循环以上。

系统框图如下:

地址分配:

8255288h

8253280h

ADC0809298h-29fh

DAC0832290h

重要芯片功能介绍:

1、可编程并行接口8255

采取工作方式0,输入控制字88h,即A口输出,C口高四位输入,C口低四位输出

PA0—PA6对应接七段数码管abcdefg接口,PC0PC1对应七段数码管的位码接口

PC2PC3对应黄红LED灯,PC4接8253计数器2的OUT2端口

2、可编程定时器/计数器(8253)

分别对8253的计数器1和计数器2初始化采用方式3和方式0,使计数器2产生每隔0.1秒的高电平

3、ADC0809模/数转换器

如图虚线接线即可

3、DAC0832数/模转换器

DAC0832是用于蜂鸣器报警的

三、软件设计

先对硬件82558253进行初始化且用ADC0809第一次采样,通过8255的PC4端口查询8253的定时时间是否已到,若到则对8253接口2重新初始化且用ADC0809模/数转换器采样,不到则继续七段数码管显示与LED灯和蜂鸣器的过程,最后若有键按下则返回DOS,否则返回继续查询PC4端口、循环。

主程序流程图:

七段数码管流程图

红黄灯及蜂鸣器程序如下:

movcl,[shuju]

cmpcl,60;采样得来的数据与30和60进行比较,不在它们之间的红黄灯、蜂鸣器报警

jncli

cmpcl,30

jcxiong

jmpexit

li:

oral,08h

callbeep

jmpexit

xiong:

oral,04h

callbeep

exit:

movdx,io8255a;通过8255C端口输出到LED灯

outdx,al

采样子程序

movbx,0

movcx,3

xun:

movdx,io0809

outdx,al

pushcx

movcx,0FFH;延时

delay1:

loopdelay1

popcx

inal,dx

movah,0

movdl,5;将采样数据转化为0-75之间的温度值

muldl

movdl,17

divdl

movah,0

addbx,ax;循环三次取样

loopxun

movax,bx

movcl,3

divcl;取三次数据后平均值

mov[shuju],al

movah,0

movcl,10

divcl

movdi,offsetbuffer1;将采样三次得出的均值的个位与十位分别存在buffer与buffer+1中

mov[di],ah

mov[di+1],al

四、讨论和感想

首先感受最深的的是汇编的基础一定要扎实,否则很容易出现低级错误,比如说一些死循环之类的东西。

我们这组最开始的时候连硬件检测都没做就直接执行程序,当然做不出什么来的。

后来又入入续续发现了一些低级错误,不过都一步步改正了。

还有就是主程序一定要简洁易读,最好事先画好流程图。

硬件不要频繁初始化,最好是在程序开头就全部初始化完毕,像82558253一类。

为保证程序易读、便于添加和修改,必要的注释是很好的,子程序中最好开头和结尾对子程序中用到的寄存器都进行入出栈操作,这能有效的防止一些低级错误。

以上是我碰到的问题及其解决方法、心得体会。

五、源程序的清单:

datasegment

ioportequ0c400h-0280h

io8255aequioport+28ah;8255C口地址

io8255bequioport+28bh;8255控制寄存器地址

io8255cequioport+288h;8255A口地址

io0832aequioport+290h

io8253aequioport+283h;8253工作方式控制寄存器地址

io8253bequioport+281h;计数器1

io8253cequioport+282h;计数器2

io0809equioport+298h;蜂鸣器

leddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;段码

buffer1db0,0;存放要显示的十位和个位

bzdw?

;位码

data1db80h,0,0,0,0,0,0,0

db0ffh,0,0,0,0,0,0,0

db80h,0,0,0,0,0,0,0

db00h,0,0,0,0,0,0,0;红灯正弦波数据

data2db80h,96h,0aeh,0c5h,0d8h,0e9h,0f5h,0fdh

db0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96h

db80h,66h,4eh,38h,25h,15h,09h,04h

db00h,04h,09h,15h,25h,38h,4eh,66h;黄灯正弦波数据

shujudb0;存放采样三次后的均值

dataends

codesegment

assumecs:

code,ds:

data

start:

movax,data

movds,ax

movdx,io8255b;将8255设为A口输出C高4位输入低四位输出

moval,88h

outdx,al

moval,70h;设8253通道1工作方式0

movdx,io8253a

outdx,al

movax,100;写入计数器初值2000

movdx,io8253b

outdx,al

moval,ah

outdx,al

moval,0b6h;设8253通道2工作方式3

movdx,io8253a

outdx,al

movax,1000;写入计数器初值500

movdx,io8253c

outdx,al

moval,ah

outdx,al

calladcy

panduan:

movdx,io8255a;从8255的c口输入

inal,dx

andal,10h

jzxianshi;Pc4不为1跳到显示

calldelay

calladcy

xianshi:

callqiduan

pushax;LED灯与蜂鸣器程序段

pushcx

pushdx

movcl,[shuju]

cmpcl,60

jncli

cmpcl,30

jcxiong

jmpexit

li:

oral,08h

callbeep

jmpexit

xiong:

oral,04h

callbeep

exit:

movdx,io8255a

outdx,al

popdx

popcx

popax

movdx,0ffh

movah,06

int21h

jepanduan;有按键退出否则循环

movah,4ch;返回

int21h

qiduanprocnear;七段数码管子程序

pushdi

pushsi

pushbx

pushcx

pushdx

movdi,offsetbuffer1;设di为显示缓冲区

loop2:

movbh,02

lll:

movbyteptrbz,bh

pushdi

decdi

adddi,bz

movbl,[di];bl为要显示的数

popdi

moval,0

movdx,io8255a

outdx,al

movbh,0

movsi,offsetled;置led数码表偏移地址为SI

addsi,bx;求出对应的led数码

moval,byteptr[si]

movdx,io8255c;自8255a的口输出

outdx,al

moval,byteptrbz;使相应的数码管亮

movdx,io8255a;位选变化

outdx,al

movcx,3000

delay2:

loopdelay2;延时

movbh,byteptrbz

shrbh,1

jnzlll

popdx

popcx

popbx

popsi

popdi

ret;子程序返回

qiduanendp

adcyprocnear;AD采样子程序

pushax

pushbx

pushcx

pushdx

pushdi

movbx,0

movcx,3

xun:

movdx,io0809

outdx,al

pushcx

movcx,0FFH;延时

delay1:

loopdelay1

popcx

inal,dx

movah,0

movdl,5

muldl

movdl,17

divdl

movah,0

addbx,ax;循环三次取样

loopxun

movax,bx

movcl,3

divcl;取三次数据后平均值

mov[shuju],al

movah,0

movcl,10

divcl

movdi,offsetbuffer1

mov[di],ah

mov[di+1],al

popdi

popdx

popcx

popbx

popax

ret

adcyendp

delayprocnear

pushax;8253初始化

pushdx

moval,70h;设8253通道0工作方式0

movdx,io8253a

outdx,al

movax,500;写入计数器初值500

movdx,io8253b

outdx,al

moval,ah

outdx,al

popdx

popax

ret;子程序返回

delayendp

beepprocnear;蜂鸣器子程序

pushcx

pushax

pushdx

pushsi

movcx,60;取60次32个正弦波数据

dd:

movsi,0

ooo:

moval,data1[si];取正弦波数据

movdx,io0832a

outdx,al;放音

pushcx

movcx,6000

delay6:

loopdelay6;软件延时

popcx

incsi

cmpsi,32;是否取完32个数据

jlooo;若没有,则继续

loopdd;总循环次数60是否完,没有,则继续

popsi

popdx

popax

popcx

ret;子程序返回

beependp

codeends

endstart

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1