微机原理三级项目.docx
《微机原理三级项目.docx》由会员分享,可在线阅读,更多相关《微机原理三级项目.docx(27页珍藏版)》请在冰豆网上搜索。
微机原理三级项目
瓶装饮品灌装的计算机控制技术的实现
班
学
姓
级:
机制2班号:
名:
课
指
程
导
名
教
称:
微机原理、汇编语言及接口技术师:
2016年5月
1
摘要
本次三级项目的题目是瓶装饮品生产线的自动控制,通过分析题目给定的要求确定了5个主要的
步骤,分别是空瓶检测、自动灌装、质量检测、不合格处理、记录不合格数。
选择使用的芯片有
8255、8155、8253,外接设备有步进电机、数码管、LED灯、液晶屏、逻辑笔。
其中8255C端口控制
步进电机模拟的是灌装过程,A口和B口控制数码管显示不合格数。
LED的闪烁表示检测到质量不合格
瓶子。
逻辑笔检测8253输出口的状态,便于观察。
液晶屏用于显示程序运行的状态。
通过调试和接线,实现了预定的功能和要求。
关键字:
自动控制、8255、8253、8155、步进电机、数码管、液晶屏。
2
1.项目的描述及要求.................................................................................................1
2.项目的模拟方案.....................................................................................................1
2.1硬件设备及功能.................................................................................................1
2.2系统接线图.........................................................................................................2
2.控制程序.................................................................................................................3
3.1详细程序..............................................................................................................3
3.2程序流程图........................................................................................................13
4.模拟的实验结果...................................................................................................14
4.1程序调试的情况................................................................................................14
4.2程序运行的结果的分析....................................................................................14
5.项目的结论...........................................................................................................14
5.1结论描述及分析................................................................................................14
5.2程序设计改进....................................................................................................14
6.感言.......................................................................................................................14
7.参考文献...............................................................................................................15
3
前言
本次三级项目的题目是瓶装饮品的生产线自动控制,工程实际要求实现自动检测空瓶到位、自动
开启灌装、自动检测质量是否合格、不合格处理、记录不合格件数。
这些功能的实现需要用到不同的
芯片的外接设备。
结合实际情况和所学的知识编写了程序,通过外接设备的功能来模拟工程实际现象,
做到了理论与实际相结合。
在实际生产中,遇到的情况比较多,由于无法一一地模拟,所以设计的结
果还有很大改善的空间。
程序的设计过程需要反复的调试,才能顺利的出现现象和结果。
项目报告的
内容主要包括了题目的分析,程序流程图和详细程序,系统接线图,结果分析以及对程序的改进。
最后是感言和参考文献,详细地介绍了项目的实施过程和结果。
4
1.项目的描述及要求
项目描述:
某厂生产瓶装保健饮品,要求设计自动化控制装置,检测每个空瓶到位后,启动灌装,装满600克,停止该瓶的灌装。
为保证顾客利益,每瓶不得少于595克,少于595克的,通过另一传送带再处理,并记录而且显示少于595克的瓶数。
要求分析:
根据给定的题目,按实际情况进行分析后确定了项目实施方案。
第一步:
检测空瓶是否到位;第二步:
空瓶到位后模拟灌装过程;第三步:
质量检测,判断是否合格;第四步:
进行不合格处理。
第五步:
显示不合格件数。
根据实验箱的硬件设备进行选择,编写程序实现预定的功能和要求。
2.项目的模拟方案
2.1硬件设备及功能
8086芯片:
中央处理器。
8255芯片:
PA、PB、PC三个端口均作为输出口,用于连接处理器和外接设备。
其中PA口用于输出数码管的位码,PB口用于输出数码管的段码。
PC口低四位连接步进电机的接口,用于控制电机转动;
8155芯片:
PA口作为输出端口,PB口作为输入端口。
PA口用于控制LED灯,PB口接8253输出口,根据输入高低电平判断空瓶是否到位。
8253芯片:
其输出信号输入给8155的PB口。
通过输入三次方式控制字,将1M的输入频率三次变频,前两次使用方式3产生方波,第三次使用方式0,计数初值为20,计数结束后输出变为高电平表示20个空瓶到位。
步进电机:
连接8255的PC口低四位,通过输出信号正转或者反转。
启动灌装用步进电机正转模拟,不合格处理用步进电机反转模拟。
LED灯:
当质量不合格时通过8155的PA口输出信号控制三个红灯闪烁三次。
数码管:
通过8255的PA和PB口输出信号显示不合格的瓶数。
液晶屏:
在程序运行中相应地显示“灌装开始”、“灌装结束”、“不合格数为六”。
逻辑笔:
实时地显示8253输出信号是高电平还是低电平。
1
2.2系统接线图
图1:
8255接线图
图2:
8155和8253接线图
2
3.控制程序
3.1详细程序
.modelsmall
wr_com_ad_lequ0d004h;写左半屏指令地址wr_com_ad_requ0d000h;写右半屏指令地址wr_data_ad_lequ0d006h;写左半屏数据地址wr_data_ad_requ0d002h;写右半屏数据地址rd_busy_adequ0d001h;查忙地址rd_data_adequ0d003h;读数据地址
xxxx0b8h
yyyy040h
;起始显示行基址;起始显示列基址
firstlineequ0c0h;起始显示行.stack
.data
;--文字:
灌--
Line1_1db50h,48h,47h,0fch,44h,44h,42h,3ah
db0efh,0bah,82h,0fah,0afh,0bah,02h,00hdb00h,7fh,20h,3fh,20h,7fh,02h,01hdb0ffh,4ah,4ah,7fh,4ah,6ah,40h,00h
;--文字:
装--
Line1_2db00h,42h,24h,10h,0ffh,00h,44h,0a4h
db24h,3fh,24h,34h,26h,84h,00h,00hdb01h,21h,21h,11h,09h,0fdh,43h,21hdb0dh,11h,29h,25h,43h,0c1h,41h,00h
;--文字:
开--
Line1_3db80h,82h,82h,82h,0feh,82h,82h,82h
db82h,82h,0feh,82h,83h,0c2h,80h,00hdb00h,80h,40h,30h,0fh,00h,00h,00hdb00h,00h,0ffh,00h,00h,00h,00h,00h
;--文字:
始--
Line1_4db10h,10h,0f0h,1fh,10h,0f0h,40h,60h
db58h,47h,40h,40h,50h,60h,0c0h,00hdb40h,22h,15h,08h,16h,61h,00h,0fehdb42h,42h,42h,42h,42h,0ffh,02h,00h
;--文字:
灌--
Line2_1db50h,48h,47h,0fch,44h,44h,42h,3ah
db0efh,0bah,82h,0fah,0afh,0bah,02h,00hdb00h,7fh,20h,3fh,20h,7fh,02h,01hdb0ffh,4ah,4ah,7fh,4ah,6ah,40h,00h
;--文字:
装--
Line2_2db00h,42h,24h,10h,0ffh,00h,44h,0a4h
db24h,3fh,24h,34h,26h,84h,00h,00hdb01h,21h,21h,11h,09h,0fdh,43h,21hdb0dh,11h,29h,25h,43h,0c1h,41h,00h
3
;--文字:
结--
Line2_3db00h,30h,28h,0a4h,63h,10h,08h,48h
db48h,48h,7fh,48h,48h,4ch,08h,00h
db00h,22h,63h,22h,12h,12h,00h,0feh
db42h,42h,42h,42h,42h,0ffh,02h,00h
;--文字:
束--
Line2_4db04h,04h,0e4h,24h,24h,24h,24h,0ffh
db24h,24h,24h,24h,0f4h,26h,04h,00h
db40h,40h,27h,22h,12h,0ah,06h,0ffh
db06h,0ah,12h,12h,27h,60h,20h,00h
;--文字:
不--
Line3_1db02h,02h,02h,02h,02h,82h,42h,0f2h
db0eh,42h,82h,02h,02h,03h,02h,00h
db00h,08h,04h,02h,01h,00h,00h,0ffh
db00h,00h,00h,01h,03h,06h,00h,00h
;--文字:
合--
Line3_2db80h,80h,40h,20h,50h,48h,44h,43h
db44h,48h,50h,20h,40h,0c0h,40h,00h
db00h,00h,00h,0feh,42h,42h,42h,42h
db42h,42h,42h,0ffh,02h,00h,00h,00h
;--文字:
格--
Line3_3db10h,10h,0d0h,0ffh,50h,0b0h,18h,17h
db0a4h,44h,0a4h,14h,0ch,00h,00h,00h
db04h,03h,00h,0ffh,08h,04h,0feh,45h
db44h,44h,44h,45h,0feh,06h,02h,00h
;--文字:
数--
Line3_4db10h,92h,54h,30h,0ffh,50h,94h,32h
db0d8h,17h,10h,10h,0f0h,18h,10h,00h
db02h,82h,4eh,33h,22h,52h,8eh,40h
db23h,14h,08h,16h,61h,0C0h,40h,00h
;--文字:
六--
Line3_5db20h,20h,20h,20h,20h,22h,2ch,38h
db20h,20h,20h,20h,20h,30h,20h,00h
db00h,40h,20h,18h,06h,03h,00h,00h
db00h,01h,02h,0ch,38h,70h,00h,00h
leddb3fh,06h,5bh,4fh,66h,
db6dh,7dh,07h,7fh,6fh;定义LED变量数码管显示0-9的数字quadb1,1,0,1,1,1,0,1,0,1,
db1,1,0,1,0,1,1,1,0,1;定义qua变量存放20个质量数据.code
start:
nop
calllcd_init;调用清屏子程序
movdx,0f003h;dx指向8255控制端口地址
moval,80h;al存放方式控制字,A、B、C全为输出口
4
outdx,al;将方式控制字存入控制端口
movdx,0e100h;dx指向8155控制端口地址
moval,01h;al存放方式控制字,A口输出B口输入
outdx,al;将方式控制字存入控制端口
movdx,0b003h;dx指向8253控制端口地址
moval,00100111b;第一次写入方式控制字
outdx,al
movdx,0b000h;8253A口方式3工作,计数初值为1000
moval,10h
outdx,al
movdx,0b003h;第二次写入方式控制字
moval,01100111b
outdx,al
movdx,0b001h;8253B口方式3工作,计数初值为200
moval,02h
outdx,al
movdx,0b003h;第三次写入方式控制字
moval,10010001b
outdx,al
movdx,0b002h;8253C口方式1工作计数初值20用于计数20个空瓶moval,20h
outdx,al
l1:
movdx,0e102h;检测8155B端口状态
inal,dx
andal,80h;判断最高位是否为1
jzl1;不为1,说明空瓶未到位继续检测
calldisline1;最高位是1,液晶屏第1行显示"灌装开始"字样calldelaytime;调用显示延时子程序
callbujin1;调用步进电机子程序,模拟灌装过程
calllcd_init;调用液晶屏清屏子程序
calldisline2;液晶屏第2行显示"灌装结束"
calldelaytime;调用显示延时子程序
movbx,0;bx存放qua地址,先清零
movcl,0;cl记录不合格数,先清零
movah,0;作为指针取出qua变量存放的数据
l3:
leabx,qua;bx取得qua的初始地址
moval,ah;al取出qua中的数值
xlat
cmpal,0;判断质量是否合格
jnzl5;质量合格,判断下一个
movcx,3;质量不合格,通过8155A口控制红灯闪3次l4:
movdx,0e101h
moval,11100011b
outdx,al
calldelay1
5
moval,0ffh
outdx,al
calldelay1
loopl4
callbujin2;质量不合格的转到另外一条处理线上,用步进电机模拟inccl;取下一个质量进行检测,记录不合格数
l5:
incah
cmpah,20;依次对20个质量检测
jbl3
calllcd_init;调用清屏子程序
calldisline3;检测完成,液晶屏第3行显示"不合格数为6"
calldelaytime;调用延时子程序
l6:
movdx,0f000h;8255A端口控制数码管的位码,让最低位的数码管显示moval,11111110b
outdx,al
movdx,0f001h;8255B端口控制数码管的段码,显示数字"6"
lllll,led
mmmmm,cl
xlat
outdx,al
calldelay1
jmpl6
delay1proc;延时子程序delay1的定义
pushcx;将cx.dx.bx.ax压入堆栈
pushdx
pushbx
pushax
movcx,8000h;循环次数8000h
again:
nop
loopagain
popax;将ax.bx.dx.cx取出堆栈
popbx
popdx
popcx
ret;返回主程序,定义结束
endpdelay1
delay2proc;延时子程序delay2的定义
pushcx;将cx.dx.bx.ax压入堆栈
pushdx
pushbx
pushax
movcx,4000h;循环次数4000h
l9:
nop
loopl9
popax;将ax.bx.dx.cx取出堆栈
6
popbx
popdx
popcx
ret;返回主程序,定义结束
endpdelay2
bujin1proc;定义步进电机1的程序
pushbx;将bx.dx.cx.ax压入堆栈
pushdx
pushcx
pushax
movcx,10;循环10次
l7:
movdx,0f002h;8255C端口控制步进电机的运转
moval,01h;依次给步进电机A-B-C-D高电平,并调用延迟子程序delay1outdx,al
calldelay1
moval,02h
outdx,al
calldelay1
moval,04h
outdx,al
calldelay1
moval,08h
outdx,al
calldelay1
loopl7
popax;将ax.cx.dx.bx取出堆栈
popcx
popdx
popbx
ret;返回主程序
endpbujin1;步进电机1定义结束
bujin2proc;定义步进电机2子程序
pushbx;将bx.cx.dx.ax压入堆栈
pushcx
pushdx
pushax
movcx,10;循环10次
l8:
movdx,0f002h;8255C端口控制步进电机的运转
moval,08h;依次给步进电机D-C-B-A高电平,调用延时子程序delay2outdx,al
calldelay2
moval,04h
outdx,al
calldelay2
moval,02h
7
outdx,al
calldelay2
moval,01h
outdx,al
calldelay2
loopl8
popax;将ax.dx.cx.bx取出堆栈
popdx
popcx
popbx
ret;返回主程序
endpbujin2;步进电机2子程序结束delaytimeproc;定义液晶屏显示延时子程序movcx,0
loop$
ret
delaytimeendp;子程序结束
disline1proc;液晶屏第一行显示字样子程序leasi,line1_1
moval,2
movah,32
callworddisl
lllll,line1_2
mmmmm,2
movah,48
callworddisl
lllll,line1_3
mmmmm,2
movah,0
callworddisr
lllll,line1_4
mmmmm,2
movah,16
callworddisr
ret
disline1endp;子程序结束
disline2proc;液晶屏显示第二行字样子程序leasi,line2_1
moval,4
movah,32
callworddisl
lllll,line2_2
mmmmm,4
movah,48
callworddisl
8
lllll,line2_3
mmmmm,4
movah,0
callworddisr
lllll,line2_4
mmmmm,4
movah,16
callworddisr
ret
disline2endp;子程序结束
disline3proc;液晶屏显示第三行字样子程序leasi,line3_1
moval,6
movah,32
callworddisl
lllll,line3_2
mmmmm,6
movah,48
callworddisl
lllll,line3_3
mmmmm,6
movah,0
callworddisr
lllll,l