微机原理三级项目_第1页
微机原理三级项目_第2页
微机原理三级项目_第3页
微机原理三级项目_第4页
微机原理三级项目_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上瓶装饮品灌装的计算机控制技术的实现班 级:机制2班学 号:姓 名:课 程 名 称:微机原理、汇编语言及接口技术指 导 教 师: 2016年5月摘要 本次三级项目的题目是瓶装饮品生产线的自动控制,通过分析题目给定的要求确定了5个主要的步骤,分别是空瓶检测、自动灌装、质量检测、不合格处理、记录不合格数。选择使用的芯片有8255、8155、8253,外接设备有步进电机、数码管、LED灯、液晶屏、逻辑笔。其中8255C端口控制步进电机模拟的是灌装过程,A口和B口控制数码管显示不合格数。LED的闪烁表示检测到质量不合格瓶子。逻辑笔检测8253输出口的状态,便于观察。液晶屏用于显

2、示程序运行的状态。通过调试和接线,实现了预定的功能和要求。 关键字:自动控制、8255、8253、8155、步进电机、数码管、液晶屏。目录前言 本次三级项目的题目是瓶装饮品的生产线自动控制,工程实际要求实现自动检测空瓶到位、自动开启灌装、自动检测质量是否合格、不合格处理、记录不合格件数。这些功能的实现需要用到不同的芯片的外接设备。结合实际情况和所学的知识编写了程序,通过外接设备的功能来模拟工程实际现象,做到了理论与实际相结合。在实际生产中,遇到的情况比较多,由于无法一一地模拟,所以设计的结果还有很大改善的空间。程序的设计过程需要反复的调试,才能顺利的出现现象和结果。项目报告的内容主要包括了题目

3、的分析,程序流程图和详细程序,系统接线图,结果分析以及对程序的改进。最后是感言和参考文献,详细地介绍了项目的实施过程和结果。专心-专注-专业1.项目的描述及要求项目描述:某厂生产瓶装保健饮品,要求设计自动化控制装置,检测每个空瓶到位后,启动灌装,装满600克,停止该瓶的灌装。为保证顾客利益,每瓶不得少于595克,少于595克的,通过另一传送带再处理,并记录而且显示少于595克的瓶数。要求分析:根据给定的题目,按实际情况进行分析后确定了项目实施方案。第一步:检测空瓶是否到位;第二步:空瓶到位后模拟灌装过程;第三步:质量检测,判断是否合格;第四步:进行不合格处理。第五步:显示不合格件数。根据实验箱

4、的硬件设备进行选择,编写程序实现预定的功能和要求。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,计

5、数结束后输出变为高电平表示20个空瓶到位。步进电机:连接8255的PC口低四位,通过输出信号正转或者反转。启动灌装用步进电机正转模拟,不合格处理用步进电机反转模拟。LED灯:当质量不合格时通过8155的PA口输出信号控制三个红灯闪烁三次。数码管:通过8255的PA和PB口输出信号显示不合格的瓶数。液晶屏:在程序运行中相应地显示“灌装开始”、“灌装结束”、“不合格数为六”。逻辑笔:实时地显示8253输出信号是高电平还是低电平。2.2系统接线图图1:8255接线图 图2:8155和8253接线图3.控制程序3.1详细程序.model smallwr_com_ad_l equ 0d004h ;写左半

6、屏指令地址wr_com_ad_r equ 0d000h ;写右半屏指令地址wr_data_ad_l equ 0d006h ;写左半屏数据地址wr_data_ad_r equ 0d002h ;写右半屏数据地址rd_busy_ad equ 0d001h ;查忙地址rd_data_ad equ 0d003h ;读数据地址x equ 0b8h ;起始显示行基址y equ 040h ;起始显示列基址firstline equ0c0h ;起始显示行.stack.data;- 文字: 灌 -Line1_1 db 50h, 48h, 47h,0fch, 44h, 44h, 42h, 3ah db0efh,0b

7、ah, 82h,0fah,0afh,0bah, 02h, 00h db 00h, 7fh, 20h, 3fh, 20h, 7fh, 02h, 01h db0ffh, 4ah, 4ah, 7fh, 4ah, 6ah, 40h, 00h;- 文字: 装 -Line1_2 db 00h, 42h, 24h, 10h,0ffh, 00h, 44h,0a4h db 24h, 3fh, 24h, 34h, 26h, 84h, 00h, 00h db 01h, 21h, 21h, 11h, 09h,0fdh, 43h, 21h db 0dh, 11h, 29h, 25h, 43h,0c1h, 41h, 00

8、h;- 文字: 开 -Line1_3 db 80h, 82h, 82h, 82h,0feh, 82h, 82h, 82h db 82h, 82h,0feh, 82h, 83h,0c2h, 80h, 00h db 00h, 80h, 40h, 30h, 0fh, 00h, 00h, 00h db 00h, 00h,0ffh, 00h, 00h, 00h, 00h, 00h;- 文字: 始 -Line1_4 db 10h, 10h,0f0h, 1fh, 10h,0f0h, 40h, 60h db 58h, 47h, 40h, 40h, 50h, 60h,0c0h, 00h db 40h, 22h,

9、 15h, 08h, 16h, 61h, 00h,0feh db 42h, 42h, 42h, 42h, 42h,0ffh, 02h, 00h;- 文字: 灌 -Line2_1 db 50h, 48h, 47h,0fch, 44h, 44h, 42h, 3ah db0efh,0bah, 82h,0fah,0afh,0bah, 02h, 00h db 00h, 7fh, 20h, 3fh, 20h, 7fh, 02h, 01h db0ffh, 4ah, 4ah, 7fh, 4ah, 6ah, 40h, 00h;- 文字: 装 -Line2_2 db 00h, 42h, 24h, 10h,0ffh

10、, 00h, 44h,0a4h db 24h, 3fh, 24h, 34h, 26h, 84h, 00h, 00h db 01h, 21h, 21h, 11h, 09h,0fdh, 43h, 21h db 0dh, 11h, 29h, 25h, 43h,0c1h, 41h, 00h;- 文字: 结 -Line2_3 db 00h, 30h, 28h,0a4h, 63h, 10h, 08h, 48h db 48h, 48h, 7fh, 48h, 48h, 4ch, 08h, 00h db 00h, 22h, 63h, 22h, 12h, 12h, 00h,0feh db 42h, 42h, 42

11、h, 42h, 42h,0ffh, 02h, 00h;- 文字: 束 -Line2_4 db 04h, 04h,0e4h, 24h, 24h, 24h, 24h,0ffh db 24h, 24h, 24h, 24h,0f4h, 26h, 04h, 00h db 40h, 40h, 27h, 22h, 12h, 0ah, 06h,0ffh db 06h, 0ah, 12h, 12h, 27h, 60h, 20h, 00h;- 文字: 不 -Line3_1 db 02h, 02h, 02h, 02h, 02h, 82h, 42h,0f2h db 0eh, 42h, 82h, 02h, 02h, 0

12、3h, 02h, 00h db 00h, 08h, 04h, 02h, 01h, 00h, 00h,0ffh db 00h, 00h, 00h, 01h, 03h, 06h, 00h, 00h;- 文字: 合 -Line3_2 db 80h, 80h, 40h, 20h, 50h, 48h, 44h, 43h db 44h, 48h, 50h, 20h, 40h,0c0h, 40h, 00h db 00h, 00h, 00h,0feh, 42h, 42h, 42h, 42h db 42h, 42h, 42h,0ffh, 02h, 00h, 00h, 00h;- 文字: 格 -Line3_3 d

13、b 10h, 10h,0d0h,0ffh, 50h,0b0h, 18h, 17h db0a4h, 44h,0a4h, 14h, 0ch, 00h, 00h, 00h db 04h, 03h, 00h,0ffh, 08h, 04h,0feh, 45h db 44h, 44h, 44h, 45h,0feh, 06h, 02h, 00h;- 文字: 数 -Line3_4 db 10h, 92h, 54h, 30h,0ffh, 50h, 94h, 32h db 0d8h, 17h, 10h, 10h,0f0h, 18h, 10h, 00h db 02h, 82h, 4eh, 33h, 22h, 52h

14、, 8eh, 40h db 23h, 14h, 08h, 16h, 61h,0C0h, 40h, 00h;- 文字: 六 -Line3_5 db 20h, 20h, 20h, 20h, 20h, 22h, 2ch, 38h db 20h, 20h, 20h, 20h, 20h, 30h, 20h, 00h db 00h, 40h, 20h, 18h, 06h, 03h, 00h, 00h db 00h, 01h, 02h, 0ch, 38h, 70h, 00h, 00hled db 3fh,06h,5bh,4fh,66h,db 6dh,7dh,07h,7fh,6fh ;定义LED变量数码管显示

15、0-9的数字qua db 1,1,0,1,1,1,0,1,0,1,db 1,1,0,1,0,1,1,1,0,1 ;定义qua变量存放20个质量数据.codestart:nopcall lcd_init ;调用清屏子程序mov dx,0f003h ;dx指向8255控制端口地址mov al,80h ;al存放方式控制字,A、B、C全为输出口out dx,al ;将方式控制字存入控制端口mov dx,0e100h ;dx指向8155控制端口地址mov al,01h ;al存放方式控制字,A口输出B口输入out dx,al ;将方式控制字存入控制端口mov dx,0b003h ;dx指向8253控制

16、端口地址mov al,b ;第一次写入方式控制字out dx,almov dx,0b000h ;8253A口方式3工作,计数初值为1000mov al,10hout dx,almov dx,0b003h ;第二次写入方式控制字mov al,bout dx,almov dx,0b001h ;8253B口方式3工作,计数初值为200mov al,02hout dx,almov dx,0b003h ;第三次写入方式控制字mov al,bout dx,almov dx,0b002h ;8253C口方式1工作计数初值20用于计数20个空瓶mov al,20hout dx,all1:mov dx,0e10

17、2h ;检测8155B端口状态in al,dxand al,80h ;判断最高位是否为1jz l1 ;不为1,说明空瓶未到位继续检测call disline1 ;最高位是1,液晶屏第1行显示"灌装开始"字样call delaytime ;调用显示延时子程序call bujin1 ;调用步进电机子程序,模拟灌装过程call lcd_init ;调用液晶屏清屏子程序call disline2 ;液晶屏第2行显示"灌装结束"call delaytime ;调用显示延时子程序mov bx,0 ;bx存放qua地址,先清零mov cl,0 ;cl记录不合格数,先清

18、零mov ah,0 ;作为指针取出qua变量存放的数据l3:lea bx,qua ;bx取得qua的初始地址mov al,ah ;al取出qua中的数值xlatcmp al,0 ;判断质量是否合格 jnz l5 ;质量合格,判断下一个mov cx,3 ;质量不合格,通过8155A口控制红灯闪3次l4:mov dx,0e101h mov al,b out dx,alcall delay1mov al,0ffhout dx,alcall delay1loop l4call bujin2 ;质量不合格的转到另外一条处理线上,用步进电机模拟inc cl ;取下一个质量进行检测,记录不合格数l5:inc

19、 ah cmp ah,20 ;依次对20个质量检测jb l3call lcd_init ;调用清屏子程序call disline3 ;检测完成,液晶屏第3行显示"不合格数为6"call delaytime ;调用延时子程序l6:mov dx,0f000h ;8255A端口控制数码管的位码,让最低位的数码管显示mov al,bout dx,almov dx,0f001h ;8255B端口控制数码管的段码,显示数字"6"lea bx,ledmov al,clxlatout dx,alcall delay1jmp l6delay1 proc ;延时子程序del

20、ay1的定义push cx ;将cx.dx.bx.ax压入堆栈push dxpush bxpush axmov cx,8000h ;循环次数8000hagain:noploop againpop ax ;将ax.bx.dx.cx取出堆栈pop bxpop dxpop cxret ;返回主程序,定义结束 endp delay1delay2 proc ;延时子程序delay2的定义push cx ;将cx.dx.bx.ax压入堆栈push dxpush bxpush axmov cx,4000h ;循环次数4000hl9:noploop l9pop ax ;将ax.bx.dx.cx取出堆栈pop

21、bxpop dxpop cxret ;返回主程序,定义结束endp delay2 bujin1 proc ;定义步进电机1的程序push bx ;将bx.dx.cx.ax压入堆栈push dxpush cxpush axmov cx,10 ;循环10次l7:mov dx,0f002h ;8255C端口控制步进电机的运转mov al,01h ;依次给步进电机A-B-C-D高电平,并调用延迟子程序delay1 out dx,al call delay1mov al,02hout dx,alcall delay1mov al,04hout dx,alcall delay1mov al,08hout

22、dx,alcall delay1loop l7pop ax ;将ax.cx.dx.bx取出堆栈pop cxpop dxpop bxret ;返回主程序endp bujin1 ;步进电机1定义结束bujin2 proc ;定义步进电机2子程序push bx ;将bx.cx.dx.ax压入堆栈push cxpush dxpush axmov cx,10 ;循环10次l8:mov dx,0f002h ;8255C端口控制步进电机的运转mov al,08h ;依次给步进电机D-C-B-A高电平,调用延时子程序delay2out dx,alcall delay2mov al,04hout dx,alca

23、ll delay2 mov al,02hout dx,alcall delay2mov al,01hout dx,alcall delay2loop l8pop ax ;将ax.dx.cx.bx取出堆栈pop dxpop cxpop bxret ;返回主程序endp bujin2 ;步进电机2子程序结束delaytime proc ;定义液晶屏显示延时子程序mov cx, 0loop $retdelaytime endp ;子程序结束disline1 proc ;液晶屏第一行显示字样子程序lea si,line1_1mov al,2mov ah,32call worddisllea si,li

24、ne1_2mov al,2mov ah,48call worddisllea si,line1_3mov al,2mov ah,0call worddisrlea si,line1_4mov al,2mov ah,16call worddisrretdisline1 endp ;子程序结束disline2 proc ;液晶屏显示第二行字样子程序lea si,line2_1mov al,4mov ah,32call worddisllea si,line2_2mov al,4mov ah,48call worddisllea si,line2_3mov al,4mov ah,0call word

25、disrlea si,line2_4mov al,4mov ah,16call worddisrretdisline2 endp ;子程序结束disline3 proc ;液晶屏显示第三行字样子程序lea si,line3_1 mov al, 6mov ah, 32call worddisllea si,line3_2mov al,6mov ah,48call worddisllea si,line3_3mov al,6mov ah,0call worddisrlea si,line3_4mov al,6mov ah,16call worddisrlea si,line3_5mov al,6m

26、ov ah,32call worddisrretdisline3 endp ;子程序结束lcd_init proc ;液晶初始化mov al,3eh ;初始化左半屏,关显示 call wrcoml ;写指令子程序 mov al,firstline ;设置起始显示行,第0行 call wrcoml mov al,3eh ;初始化右半屏,关显示 call wrcomr ;写指令子程序 mov al,firstline ;设置起始显示行,第0行 call wrcomr call lcdclear ;清屏 mov al,3fh ;开显示 call wrcoml mov al,3fh ;开显示call

27、wrcomr ret lcd_init endplcdclear proc ;清屏,清左半屏mov al,0 ;起始行,第0行 mov ah,0 ;起始列,第0列 lcdclearl1: push ax mov cx,64call setxyl ;设置起始显示行列地址 lcdclearl2: mov al,0 call wrdatal loop lcdclearl2 pop ax inc ax cmp al,8 ;共8行 jnz lcdclearl1 ;清右半屏 mov al,0 ;起始行,第0行 mov ah,0 ;起始列,第0列 lcdclearr1: push ax mov cx,64

28、call setxyr ;设置起始显示行列地址 lcdclearr2: xor al,al call wrdatar loop lcdclearr2 pop ax inc al cmp al,8 ;共8行 jnz lcdclearr1 ret lcdclear endpworddisl proc mov cx,16 ;显示16字节数据,用于显示一个汉字 call displ ret worddisl endp displ proc push ax push cx call setxyl ;设置起始显示行列地址 call displayl ;显示上半行数据 pop cx pop ax inc a

29、l call setxyl ;设置起始显示行列地址 call displayl ;显示下半行数据 ret displ endp worddisr proc mov cx,16 ;显示16字节数据,用于显示一个汉字 call dispr ret worddisr endp dispr proc push ax push cx call setxyr ;设置起始显示行列地址 call displayr ;显示上半行数据 pop cxpop ax inc al call setxyr ;设置起始显示行列地址 call displayr ;显示下半行数据 ret dispr endp ;显示图形 li

30、nedisl proc ;显示左半屏一行图形,AL-X起始行序数(0-7),AH-Y起始列地址序数(0-63)mov cx,64 call setxyl ;设置起始显示行列 call displayl ;显示数据 ret linedisl endplinedisr proc ;显示右半屏一行图形,AL-X起始行地址序数(0-7),AH-Y起始列地址序数(0-63)mov cx,64 call setxyr ;设置起始显示行列 call displayr ;显示数据 ret linedisr endp displayl proc ;显示左半屏数据,R7-显示数据个数lodsb call wrda

31、tal ;写左半屏数据loop displayl ret displayl endpdisplayr proc ;显示右半屏数据,R7-显示数据个数lodsb call wrdatar ;写左半屏数据 loop displayr ret displayr endp setxyl proc ;设置左半屏起始显示行列地址,AL-X起始行序数(0-7),AH-Y起始列序数(0-63)or al,x ;行地址=行序数+行基址call wrcoml mov al,ah or al,y ;列地址=列序数+列基址 call wrcoml ret setxyl endp ;设置右半屏起始显示行列地址,AL-X

32、起始行序数(0-7),AH-Y起始列序数(0-63) setxyr proc or al,x ;行地址=行序数+行基址call wrcomr mov al,ah or al,y ;列地址=列序数+列基址 call wrcomr ret setxyr endp ;写左半屏控制指令,A-写入指令wrcoml proc mov dx,wr_com_ad_l out dx,al wrcoml1: mov dx,rd_busy_ad in al,dx test al,80h ;检查液晶显示是否处于忙状态 jnz wrcoml1 ret wrcoml endp ;写右半屏控制指令,A-写入指令 wrcom

33、r proc mov dx,wr_com_ad_r out dx,al wrcomr1: mov dx,rd_busy_ad in al,dx test al,80h ;检查液晶显示是否处于忙状态 jnz wrcomr1 ret wrcomr endp ;写左半屏数据,A-写入数据 wrdatal proc mov dx,wr_data_ad_l out dx,al wrdatal1: mov dx,rd_busy_ad in al,dx test al,80h ;检查液晶显示是否处于忙状态 jnz wrdatal1 ret wrdatal endp ;写右半屏数据,A-写入数据 wrdata

34、r proc mov dx,wr_data_ad_r out dx,al wrdatar1: mov dx,rd_busy_ad in al,dx test al,80h ;检查液晶显示是否处于忙状态 jnz wrdatar1 ret wrdatar endp end start3.2程序流程图4.模拟的实验结果4.1程序调试的情况 根据预定的步骤和要实现功能编写了所需的程序,连接好线路进入调试状态,在运行过程中出现了几个问题,一是步进电机的转速比较慢,通过调节延时程序的循环次数,最后使电机的转数适中,方便观察和节约程序的运行时间;二是数码管显示的数字与要求的不符合,首先判断是否是接线的问题,经过检查排除接线错误,然后检查程序,发现取得的数码管的段码有误,经过改正最终显示正确的结果。三是程序运行到某处时无法往下

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论