1 / 28

06 级机电三班 许信

06 级机电三班 许信. 阀门控制系统设计. 项目要求. 阀门控制系统设计:某化工厂输气管道用压力自动控制阀门,设计电路实现如下控制:( 1 )可以把阀门开、关至某一设定值;( 2 )自动检测管道压力,并设定管道压力值,当高于设定压力时阀门开度增大,当低于设定值时,阀门开度减小,至设定值停止。设计系统实现上述控制,并能记录阀门开度。. 项目连线图. 项目连线图. 8255A 端口地址表. 8255 端口地址表. 项目工作简要说明.

sue
Download Presentation

06 级机电三班 许信

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 06级机电三班许信 阀门控制系统设计

  2. 项目要求 阀门控制系统设计:某化工厂输气管道用压力自动控制阀门,设计电路实现如下控制:(1)可以把阀门开、关至某一设定值;(2)自动检测管道压力,并设定管道压力值,当高于设定压力时阀门开度增大,当低于设定值时,阀门开度减小,至设定值停止。设计系统实现上述控制,并能记录阀门开度。

  3. 项目连线图

  4. 项目连线图

  5. 8255A端口地址表

  6. 8255端口地址表

  7. 项目工作简要说明 • 8255A用C口输入、工作在方式0,B口与A口输出、工作在方式0,另一个8255A口和C口输出,工作在方式0,B口输入,工作在方式0。实际连线时,8255的C口不参与工作。

  8. K0 总上电按钮K1 设定开门度按钮 K2 设定压力按钮L0 总上电工作指示灯 L1 设定开门度指示灯 L2 正转指示灯 L3 反转指示灯 L4 设定压力指示灯

  9. 当总上电按钮被按下的时候,整个系统才能开始工作。阀门的初始状态为完全关闭,所以要先将阀门打开。当设定开门度灯亮的时候,在键盘上输入设定开门度,阀门则逐渐打开到设定值。数码管可以显示从初始值到设定值的变化过程,当做是阀门运动的数字显示,期间设定灯是灭的。当总上电按钮被按下的时候,整个系统才能开始工作。阀门的初始状态为完全关闭,所以要先将阀门打开。当设定开门度灯亮的时候,在键盘上输入设定开门度,阀门则逐渐打开到设定值。数码管可以显示从初始值到设定值的变化过程,当做是阀门运动的数字显示,期间设定灯是灭的。

  10. 阀门开了以后,可以继续设定开门度,或者接下来根据压力设定值。设定压力值与前面设定开门度是一样的,且压力的自动检测值是已经给定了的。数码管显示从自动检测值到设定压力值变化的过程,然后亦可以根据按钮的情况进行两种设定或结束系统工作。阀门开了以后,可以继续设定开门度,或者接下来根据压力设定值。设定压力值与前面设定开门度是一样的,且压力的自动检测值是已经给定了的。数码管显示从自动检测值到设定压力值变化的过程,然后亦可以根据按钮的情况进行两种设定或结束系统工作。

  11. 设计程序 • DATA SEGMENT • press dw 5 • num dw ? • num1 dw ? • left dw ? • left1 dw ? • array db 3fh,6h,5bh,4fh,66h,6dh,7dh,7h,7fh,6fh • char db 00h,01h,02h,03h,04h,05h,06h,07h,08h,09h • table dw 0fe0eh,0fe0dh,0fe0bh,0fe07h,0fd0eh, • 0fd0dh,0fd0bh,0fd07h,0fb0eh,0fb0dh • ;此处输入数据段代码 • DATA ENDS

  12. STACK SEGMENT stack db 1024 dup(0);此处输入堆栈段代码STACK ENDSCODE SEGMENT 'code' ASSUME CS:CODE,DS:DATA,SS:STACK

  13. START: MOV AX,DATA MOV DS,AX mov al,10000001b ;8255A设置out 0e3h,al mov al,10000010b ;8255b设置out 063h,alA: mov al,0ffh out 0e1h,al ;使灯全灭in al,0e2h and al,00000001b jnz A mov al,11111110b out 0e1h,al ;总上电灯亮mov num1,0 ;初值为0,门关闭

  14. B: in al,0e2h and al,00000011b jnz B ;设定按钮被按下才执行设定开门F: mov al,11111100b out 0e1h,al ;设定灯亮call zong mov al,11111110b out 0e1h,alC: in al,0e2h and al,00000101b jnz F ;按下设定压力按钮则继续,否则再返回执行设定开门mov dx,press mov num1,dx ;压力检测值为press

  15. E: mov al,11101110b out 0e1h,al call zong mov al,11111110b out 0e1h,alD: in al,0e2h ;读入A口按钮状态and al,00000101b jz E in al,0e2h ;按下设定压力按钮,返回执行and al,00000011b jz F ;按下设定开门按钮,返回执行

  16. mov cl,al and cl,00000001b jz D ;总上电按钮有效,继续比较,否则关闭系统mov al,0 out 0e0h,al ;关闭数码管mov al,0ffh out 0e1h,al ;关闭灯out 062h,al out 061h,al ;此处输入代码段代码MOV AX,4C00H INT 21H

  17. zong procpush ax call key ;设定开门值或压力值mov ax,num1 mov num,ax and bx,00ffh mov left,bx call cha ;算差值call zhuan ;显示正反转call led ;数码管显示pop ax retzong endp

  18. key proc;键盘扫描第1段:判断是否有键按下key1: mov al,00 out 62h,al ;使所有行线为低电平in al,61h and al,0fh ;判定是否有列线为低电平cmp al,0fh jz key1 ;没有,无闭合键,则循环等待call delay1 ;有,则延时清除抖动

  19. ;键盘扫描第2段:识别按键(扫描法) mov cx,3 ;行数送CX mov ah,0feh ;扫描初值送AH key2: mov al,ah out 62h,al ;输出行值(扫描值)in al,61h ;读进列值and al,0fh cmp al,0fh ;判断有无低电平列线jnz l1 ;有,则转入下一步处理rol ah,1 ;无,则移位扫描值loop key2 ;准备下一行扫描jmp key1 ;所有行都没有键按下,则返回继续 检测;此时,AL=列值,AH=行值,进行后续处理

  20. ;键盘扫描第3段:查找键代码l1: mov si,offset table ;table为键行列值表mov di,offset array ;array为数码管显示表mov bx,offset char ;char为键代码表mov cx,10 ;CX=键的个数key3: cmp ax,[si] ;与键值比较jz key4 ;相同,说明查到inc si inc si ;不相同,继续比较inc di inc bx loop key3 jmp key1 ;全部比较完,仍无相同,说明是重键

  21. key4: call delay1 ;按键释放,延时消除抖动mov al,[di] out 0e0h,al ;数码管显示设定值mov bl,[bx] ;取键代码送bl ;jmp key1 retkey endp

  22. cha proc push dx mov dx,num sub left,dx mov dx,left mov left1,dx cmp left,0 jnl next ;大于等于0则left加1 neg left ;小于0则取反next:inc left pop dx retcha endp

  23. zhuan proccmp left1,0 jnl z1 ;大于等于0则跳转mov al,11110110b out 0e1h,al ;小于0则反转,设定灯灭,门关小jmp z2 z1: cmp left1,0 je z2 ;等于0则无动作mov al,11111010b out 0e1h,al ;大于0则正转,设定灯灭,门打开z2: call delay retzhuan endp

  24. led procpush ax push bx push cx mov cx,leftread:mov ax,num1 mov bx, offset array and ax,0ffh xlat out 0e0h,al ;显示当前值cmp left1,0 jnl read1 ;大于等于0 dec num1 jmp read2 ;小于0

  25. read1:inc num1read2:call delay loop read cmp left1,0 jnl read3 ;大于等于0 jmp read4 ;小于0read3:dec num1 jmp read5read4:inc num1read5:pop cx pop bx pop ax retled endp

  26. delay procpush cx push di mov cx,300hY1: mov di,100X1: dec di jnz X1 loop Y1 pop di pop cxdelay endp

  27. delay1 procpush cx push di mov cx,30Y: mov di,100X: dec di jnz X loop Y pop di pop cxdelay1 endp CODE ENDS END START

  28. 演示到此结束 Thank you for your watching !

More Related