8086微机原理课程设计压力测量系统的设有硬件电路图计文档格式.docx
《8086微机原理课程设计压力测量系统的设有硬件电路图计文档格式.docx》由会员分享,可在线阅读,更多相关《8086微机原理课程设计压力测量系统的设有硬件电路图计文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
![8086微机原理课程设计压力测量系统的设有硬件电路图计文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/9/0dad52c1-6b83-4094-b7da-9a60547db8b3/0dad52c1-6b83-4094-b7da-9a60547db8b31.gif)
《微型计算机技术及应用》清华大学出版社史嘉权
《微机原理与接口技术基础与应用》海洋出版社邓振杰
《微机原理与接口技术实验及课程设计》西南交通大学出版社杨斌
《单片机原理及接口技术》清华大学出版社梅丽凤王艳秋
学科部主任(签字)
Ⅵ、成绩评定:
设计成绩:
(教师填写)
指导老师:
(签字)
二○一一年七月八日
一、设计要求
设计一个对压力传感器的信号进行检测并在LED数码显示器上显示压力值的系统,当压力低于30pa时,黄灯闪烁,闪烁周期为1秒。
二.设计思想
压力测试系统的设计,必然要牵涉到压力的感应与转化,所以必须要有压力传感与A/D转换器。
将自然中的模拟量转化为电压信号,再转化位数字信号进行处理。
一个小型的微机系统,必须要有8086cpu来进行整体的控制,将其通过8255与A/D传感器进行连接。
这就是这个系统的主要框架。
而具体的应用框架则是在主要的框架上添加。
要当压力低于30pa时,黄灯闪烁。
则应添加8255。
模块。
通过编程来控制黄灯与红灯的亮灭情况,考虑到要进行比较,所以我用了两个比较器进行数据的比较。
同时,由于灯要闪烁,闪烁周期要一秒,所以我们考虑到还要加一个8253芯片去控制。
但根据个人情况,这个模块我省略了。
而至于LED显示,且显示内容为三位。
我只在程序之中体现,而在硬件图中没有去体现。
三.系统设计框图
四.程序流程图
五.源程序
;
宏定义
addr_8253equ208h
a_8253equaddr_8253
b_8253equaddr_8253+1h
ctrl_8253equaddr_8253+3h
addr_adc0809equ210h
addr_8255equ200h
a_8255equaddr_8255
b_8255equaddr_8255+1h
c_8255equaddr_8255+2h
ctrl_8255equaddr_8255+3h
******************************************
codesegment
assumecs:
code,ds:
code
start:
movax,cs
movds,ax
;
8253产生方形波,周期为1s,通道0
movdx,ctrl_8253;
设置8253控制口
moval,3eh;
控制字0011111000表示计时器0;
11表示先读写低八位,后写读高八位;
X11表示工作在模式3;
0表示二进制计数
outdx,al;
写控制字
movdx,a_8253;
设置计数初值(计数器0)
movax,1000d
outdx,al;
先写低八位,后写高八位
moval,ah
outdx,al
8253产生方形波,周期为1s,通道1
moval,7eh;
控制字0111111001表示计时器1;
movdx,b_8253;
设置计数初值(计数器1)
movax,500d
启动A/D
movdx,addr_adc0809;
ADC0809
outdx,al
disp:
8255初始化
A口做为段码输出,B口做为位码输出,C口低2位做为有色灯的输出
movdx,ctrl_8255;
8255初始化
moval,80h;
控制字100000001表示方式控制字;
00端口A方式0;
0输出;
0PC7-PC4输出;
0定义端口B为0输出;
0PC0-PC3输出
repeat:
初始化地址指针和位码
leabx,TABLE;
段码表首址送bxLoadeffectaddress——取有效地址,也就是取偏移地址
leadi,BUFDA;
指向缓冲区首地址Loadeffectaddress——取有效地址,也就是取偏移地址
movcl,0dfh;
11011111b位码,共阴极,便于从第六位开始向低位依次显示
next:
显示子程序
输出位码
movdx,b_8255;
8255B口,输出位码
moval,cl
outdx,al
moval,[di];
从缓冲区取段码
xlat
movdx,a_8255;
输出段码到8255A口
延迟
pushcx
movcx,30h
delay:
loopdelay
popcx
关LED显示
movdx,a_8255
moval,0
cmpcl,11111110b;
已经显示最低位
jzconvey;
显示完成
incdi;
指向下一个段码
rorcl,1;
显示向低一位转移
jmpnext
convey:
延时,方便LED显示结果及有色灯的闪烁
cmpcount,0;
count在后面定义
jzadcall;
延时时间到,开始下一次的数据采样
deccount;
延时时间未到
jmprepeat;
******************jmpconvey
ADC0809接收模拟信号并转化为数字信号
adcall:
callad
movcount,0ffh;
设置下一次数据采集的时间间隔
jmprepeat
TABLE:
;
段码表
db3fh;
db06h;
1
db5bh;
2
db4fh;
3
db66h;
4
db6dh;
5
db7dh;
6
db07h;
7
db7fh;
8
db6fh;
9
db73h;
P
db48h;
=
db00h;
NULL
BUFDA:
;
显示缓冲区
db10,11,12,12,12,0;
初始显示P=0
countdw0ffh
******************************************
adproc
读取AD转换结果并启动AD
pushax
pushbx
pushdx
pushdi
通道0
读结果
inal,dx;
数字量存放在al中
启动下一次的ad转换
根据数字量的值判断有色灯是否要亮
cmpal,30d
jbyellow;
小于30小于则转移到目标指令执行
cmpal,150d
jared;
大于150大于则转移到目标指令执行
movdx,ctrl_8255;
8255控制口
pushax
moval,00h;
介于30和150之间,PC0输出低电平
popax
jmpred_yellow
red:
movdx,c_8255;
控制口
moval,02h;
8255PC1输出高电平
yellow:
moval,01h;
8255PC0输出高电平
outdx,al
red_yellow:
popax
movah,0
将数字量转换成十进制,方便显示
callbinidec
popdi
popdx
popbx
ret
adendp
binidecproc
将存放于AL中的数转换为十进制数存放到BUFDA中
movah,0;
ax=al
movbl,10
movcx,4;
leadi,BUFDA+5;
指向显示缓冲区末尾
binidec_next:
divbl;
al:
商,ah:
余数
mov[di],ah
decdi
deccx
cmpal,0
jnzbinidec_next
binidec_null:
movbyteptr[di],12
loopbinidec_null
binidecendp
codeends
endstart
六、设计心得
经过一周的微机课程设计,让我对微机这一门课程有了系统的疏导。
在学习这门课程是我们只是独立的讲解一些芯片的结构及用法,而通过微机课程设计,在我们在构建一个小型的微机系统时,而真正的去关注这些芯片的连接。
这不但要求我们对各个芯片要有一定的了解与认知。
而且要懂得怎么融会贯通。
这是我在这次微机实习中体会最深的。
其二,通过微机课程设计,培养了我们想问题的思维方式。
以前我们想问题时总是将一些问题孤立出来去思考,而这次实习,他引导我们以多维的方式去解析整个问题。
在课程设计中,我们不但要理解好系统的结构,进而画出硬件连接图、而且要写出程序流程图及源程序就,这些虽然是不同的表现形式,但他们必须用统一的思想去认识。
其三,通过对压力测试系统的设计,让我们更加了解了CPU8086、ADC0809、8255等芯片的用法,同时,也对汇编语言的编程有了更加深入的认识。
为以后单片机的学习奠定了一定的基础。
最后,我通过课程设计认知了团队合作的重要性。
通过与搭档的交流,让我对有些以前不是很熟悉的内容有了提高。
同时在与之合作中,让我对工程这个概念有了新的认识,因为在以后工作中我们都必须面对与团体的合作。
只有在平常,我们多去与人交流。
才能提升我们的这个能力。
总之,一周的微机的课程设计尽管很短,但让我们受益颇多。
设计硬件电路图