顺序控制系统设计
班级: 姓名: 学号: 小组成员:指导老师: 计算机科学与技术学院
2012年10月
目 录
1.基本原理................................................................................................... 2 2. 电路图 ....................................................................................................... 3 3. 功能模块图................................................................................................ 3 4. 程序流程图.............................................................................................. 11 5. 代码、注释……………………………………………………………12 6. 分析与测试…………………………………………………………16 7. 问题解决方案 ......................................................................................... 17 8. 运行结果……………………………………………………………17 9.结论与体会............................................................. 错误!未定义书签。 10. 参考文献................................................................................................ 18
1
1. 基本原理
原理简介:
(1)8253用于对整个过程计时,每个灯所要亮灭的时间;
(2)通过对8255A编程初始化,使8253和灯连接,控制灯的亮与灭,用以指示整个过程;
(3)用8279控制数码显示器。 整个顺序控制实验我们将系统分为:
第一步:1号指示灯亮; 第9步:1号指示灯灭; 第二步:2号指示灯亮; 第10步:2号指示灯灭; 第三步:3号指示灯亮; 第11步:3号指示灯灭; 第四步:4号指示灯亮; 第12步:4号指示灯灭; 第五步:5号指示灯亮; 第13步:5号指示灯灭; 第六步:6号指示灯亮; 第14步:6号指示灯灭; 第七步:7号指示灯亮; 第15步:7号指示灯灭; 第八步:8号指示灯亮。 第16步:8号指示灯灭。
如果系统没有故障产生(即控制红外灯的开关没有闭合),此时整个顺序控制系统将循环运行这八个步骤。当出现故障的时候,此时系统将不能循环进行下去。所有的过程将停止下来。
其中最主要的过程是8253控制电机运转的时间,以及8255控制LED灯的亮灭,8279控制显示数字。这三个过程是整个顺序系统的关键。其中8253发出时钟脉冲信号进行定时,而8255控制LED灯。
2
2. 电路图
图2——顺序控制电路图 3.功能模块图
顺序控制系统 定时 8253 LED灯亮灭、开关报警 8255 数字显示 8279 图3-1——功能模块图 开关报警: 读入8255A口的值,开关K7接入PA7,按下后时钟暂停。
3
数字显示部分:
8279原理及接线图
图3-2——8279引脚图
8279采用单±5V电源供电,40脚封装。
DB0~DB7:双向数据总线,用来传送8279与CPU之间的数据和命令。 CLK:时钟输入线,用以产生内部定时的时钟脉冲。
RESET:复位输入线,8279复位后被置为字符显示左端输入,二键闭锁的触点回弹型式,程序时钟前置分频器被置为31,RESET信号为高电平有效。 CS:片选输入线,低电平有效,单片机在CS端为低时可以对8279读/写操作。
A0:缓冲器低位地址,当A0为高电平时,表示数据总线上为命令或状态, 当为低电平时,表示数据总线上为数据。
RD:读信号输入线,低电平有效,将缓冲器读出,数据送往外部总线。 WR:写信号输入线,低电平有效,将缓冲器读出,将数据从外部数据总线写入8279的缓冲器。 RL2-- 1 40 --VCC RL3-- 2 39 --RL 1 CLK-- 3 38 --RL 0
IRQ-- 4 37 --CNTL/STB RL4-- 5 36 --SHIFT RL5-- 6 35 --SL 3
RL6-- 7 34 --SL 2 RL7-- 8 33 --SL 1 RESRT-- 9 32 --SL 0 RD-- 10 31 --OUT B0 WR-- 11 30 --OUT B1 DB0-- 12 29 --OUT B2 DB1-- 13 28 --OUT B3 DB2-- 14 27 --OUT A0
4
DB3-- 15 26 --OUT A1
DB4-- 16 25 --OUT A2 DB5-- 17 24 --OUT A3 DB6-- 18 23 --BD DB7-- 19 22 --CS VSS-- 20 21 --A0
IRQ:中断请求输出线,高电平有效,在键盘工作方式下,当FIFO/传感器RAM中有数据时,此中断线变为高电平,在FIFO/传感器RAM每次读出时,中断线就下降为低电平,若在RAM中还有信息,则此线重又变为高电平。在传感器工作方式中, 每当探测到传感器信号变化时,中断线就变为高电平。
SL0~SL3:扫描线,用来扫描按键开关,传感器阵列和显示数字, 这些可被编程或被译码。
RL0~RL7:回送线,经过按键或传感器开关与扫描线联接,这些回送线内部设置有上拉电路,使之保持为高电平,只有当一个按闭合时,对应的返回线变为低电平;无按键闭合时,均保持高电平。
SHIFT:换位功能,当有开关闭合时被拉为低电平,没有按下SHIFT开关时,SHIFT输入端保持高电平,在键盘扫描方式中,按键一闭合,按键位置和换位输入状态一起被存贮起来。
CNTL/STB:当CNTL/STB开关闭合时将其拉到低电平,否则始终保持高电平, 对于键盘输入方式,此线用作控制输入端,当键被按下时,按键位置就和控制输入状态一起被存贮起来,在选通输入方式中,作选通用,把数据存入FIFO RAM中。
OUTA3~OUTA0及OUTB3~OUTB0:显示输出A口及B口,这两个口是16×4切换的数字显示。这两个端口可被控制,也可看成一个8位端口。 BD:空格显示,此输出端信号用于在数字转换时将显示空格或者用显示空格命令控制其显示空格字符。 VCC:+5V电源输入线。
VSS:地线输入线。 8279的编程方法
1.8279可按其功能分为:键盘功能块;显示功能块;控制功能块;与CPU接口功能块控制功能块包括控制和定时寄存器,定时和控制,扫描计数器三部分,它主要用来控制键盘和显示功能块工作.
::控制和定时寄存器:用于存贮来自CPU的编程命令,CPU对8279编程以确定键盘与显示器工作方式和其它工作条件时,先把命令控制数据放到
5
数据总线上,然后使A0=1,WR=0CS=0,并在WR上升沿把命令键存在控制和定时寄存器中,并经译码,建立适当的功能.
::定时和控制:它含基本的定时计数器,第一个计数器是一个分频系数为2-31的前置定时器,分频系数可由程序预置,使内部频率为100KHz,从而能给出5.1ms键盘扫描时间和10.3ms反跳时间,其它计数器将此基本频率分频后,提供适当的按键扫描.行扫描.键盘阵列扫描.以及显示器扫描次数.
::扫描计数器:扫描计数器有两种工作方式,在编码工作方式时,计数器提供一种二进制计数,通过管脚SL0-SL3输出后经外部译码才能提供给键盘和显示器的扫描作用,在译码工作方式时,扫描计数器对最低二位进行译码,SL0-SL3输出4选1的译码信号,作为显示器和键盘的译码扫描. ::键盘功能块包括:返回缓冲器,键盘反跳及控制,8x8 FIFO传感器RAM,FIFO/传感器RAM状态.
2.返回缓冲器与键盘反跳及控制
返回线被返回缓冲器缓冲,在键盘工作方式中,这几条线被逐个检测,以找出该行键中闭合的键,如果反跳电路测知某键闭合,则它等待10.3ms,然后重核此键是否仍然闭合,如果仍闭合,那么该键在矩阵中的行列地址以及SHIFT和CNTL的状态一起被送到FIFORAM中,其在FIFO RAM中 的数据格式如下:
D7 D6 D5 D4 D3 D2 D1 D0 CNTL SHIFT SCAN RET URN
数据格式中,最高位CNTL,次高位为SHIFT状态,D5-D3来自扫描计数器,D2-D0来自返回计数器,扫描线计数器和回扫线计数器的值分别反映出被按下键的行.列的值,如果在传感器阵列中,返回线上的数据直接进入传感器RAM中相应于阵列中正被扫中的那行,这样每个开关位置就直接反映为一个传感器RAM的位置. ::FIFO/传感器RAM
一个8x8 RAM,在键盘方式和选通方式中它是一个先入先出(FIFO)存贮器,每一条新的信息顺次写入,然后又按写入顺序读出,在传感器阵列扫描
6
方式时,存贮器作为传感器RAM,这时RAM中的各行存着传感器阵列中相应行的状态.
::FIF0/传感器RAM状态
在键盘或选通方式中,FIFO状态跟踪FIFO中字符数量注意它是\"满\"还是\"空\写入或读出过多均被认作出错,当FIFO非空时,状态逻辑提供一个中断申请IRQ信号,在传感器阵列扫描方式中,若测知某一传感器变化时,IRQ则为有效高电平.FIFO状态字的低3位表示FIFO中的字符数,F表示FIFORAM已满;O(over mn)表示越限错误,即试图向已满的FIFO送另一字符;U(Under done)
表示取空错误,即试图读取已空的FIFO.S/F有两种含义:在传感器扫描方式时,S/F表示在传感器RAM中至少包含了一个传感器闭合指示,在特殊错误方式时S/F位是出错标志,用来指示是否发生了多路同时闭合错误,Du位表示由于 CLEAR DISPLAY或CLEAR ALL命令尚末完成其消除操作而使显示RAM尚不可用.
3.显示功能块包括:显示寄存器,16X8显示RAM,显示地址寄存器. ::显示RAM和显示寄存器
8279内部有16X8的显示RAM,通过显示寄存器和两个四位端口0UT A0-3,0UT BO-3来刷新显示,显示器可以是白炽灯,也可以是8段数码管,显示RAM可以是16X8的形式,也可以构成两个16x4的RAM形式,显示RAM可由CPU进行读写,被读写的RAM字节地址由显示地址寄存器指示. ::显示地址寄存器保存当前CPU读或写的那个RAM地址,以及正显示着的那两个4位半字节的地址,读写地址由CPU命令编程,也可置为每次读写后地址自动加1的工作方式,在设置了正确的工作方式后,显示RAM可直接由CPU读出,半字节A和半字节B地址自动由8279更新,以适应由CPU送入 的数据,A和B半字节可送入,也可作为一个字送入,随CPU所设置的工作方式而定
3.I/O 接口功能块
8279通过数据缓冲器与I/O控制,使8279与CPU系统总线接口,I/O控制部分用CS.A0.RD和WR四条
7
线控制CPU与8279之间的数据交换,数据缓冲器是数据交换的双向通道,控制信号与数据交换间 的逻辑关系见下表: CS A0 WR RD
1 0 CPU从8279读状态 0 1 0 1 CPU向8279写状态 1 0 CPU从8279读数据 0 0 1 CPU向8279写数据 1 X X X 数据缓冲器输出呈三态 x为任意数(0或1) ☆8279的操作
由前所述,8279可适应各种键盘和显示器的不同工作方式,这是由于8279内的各功能块的工作是可程控的,用户可根据自己的要求,利用向8279写命令字的方法对8279的工作方式等进行编程,从上表可见,只要同时使CS=0 WR=0A0=1,则可向8279写命令字,并在wR的上升沿把命令打入8279.
对CPU而言,8279只有两个口地址,一个用于读写命令和状态
(CS=0,A0=1),一个用于读写数据(CS=0,A0=0)但用于编程命令字却有多种,在8279中用于区别各种不同命令字的方法是命令字代码的高3位(D7,D6,D5,)编码而低5位是命令字的真正内容 1.8279的编程命令 a.键盘/显示器方式设置 最高位 最低位
命令代码 0 0 0 D D K K K 其中DD为显示方式,KKK为键盘方式 DD
00 8个8位字符显示--左端传入 01 16个8位字符显示--左端送入 10 8个8位字符显示--右端送入 11 16个8位字符显示--右端送入
8
所谓左端送入是显示器根据用户送的先后,从左端一位开始,向右逐位排列,到最右端一位之后,下一位再从最左端显示,在这种显示方式中,显示器的每个显示管和8279中的显示RAM单元一一对应,RAM中的O地址对应最左面的显示字符,而15号单元对应最右端的显示字符而右端送入方式是电子计算器中常用的显示方式,第一个送入的数在最右端的显示字符上,而以后每送 入一个新数,显示先左移一位然后把送入的数仍放在最右端显示字符上. K K K
0 0 0 编码扫描键盘--2键连锁 0 0 1 译码扫描键盘--2键连锁 0 1 0 编码扫描键盘--N键巡回 0 1 1 译码扫描键盘--N键巡回 1 0 0 编码扫描传感器阵列 1 0 1 译码扫描传感器阵列 1 1 0 选通输入,编码显示扫描 1 1 1 选通输入,译码显示扫描
其中2键连锁和N键巡回是8279对键盘中被按下键的两种处理方式,编码扫描和译码扫描是SL0-SL3 对链盘和显示器的两种扫描形式. b.程序时钟
命令代码 0 0 1 P P P P P
此命令确定定时和控制中的前置定标器的分频系数,代码PPPPP可形成2-31的数,前置定标器可对外部时钟分频,以得到内部基频,选基频为100KHZ,可得到前面规定的扫描和反跳时间,则分频系数为;外部时钟100KHZ复位脉冲过后若无代码送入则自动为31. c.读FIF0/传感器RAM
命令代码:0 1 0 AI X A A A X=任意
此命令用于确定CPU读操作的对象是8279中的FIF0/传感器 RAM,并确定8个 RAM 字节中哪一个被读,其中 AAA表示CPU要读的行,AI为自动加1特征位,在键盘扫描方式中这两者互不相干,对随后的每次读取8279都按照
9
数据第一次进入的FIF0的同一顺序自动送出数据,所有随后发生的读,都是读自FIFO,直到写入新命令为止.
在传感器阵列方式中,AAA选择传感器RAM 8行中的一行若AI=1,则下一次读取便读自传感器RAM中的下一行. d.读显示器RAM
命令代码:0 1 1 AI A A A A
CPU对8279写此命令,则确定了 CPU 以显示器 RAM为数据源进行读操作,其中AAAA为显示器RAM的地址,AI 为自动加1特征位,若AI=1,则每读一行RAM之后,行地址自动加1 e.写显示器RAM
命令代码: 1 0 0 AI A A A A
CPU向8279写此命令,规定了下一步要对8279的显示RAM进行写,寻址方式和自动加1功能均与读显示器RAM相同 f.显示器写入禁止/空格
命令代码: 1 0 1 X IW IW BL BL X=任意 A B A B
此命令用于屏蔽A或B端口输出及使显示器显示空格,如果显示器用作双排4位显示,则必须把其中一个4位屏蔽掉这样CPU送入显示器的信息就不会影响另一半,IW为屏蔽特征位,若对某一端口设置IW=1,则该端口就被屏蔽,有必要注意的是:B0与D0对应,BL为显示空格标志位,若某一端口的BL置1,则此端口显示空格.当要使一个单8位输出格式的显示器空格时,则必须使两个BL标志全都置位,以使显示完全空格.
10
4.程序流程图 初始化,给8253送控制字和初值 开始 给8255写控制字 检验开关是否闭合 Y N 循环检测A口状态 时钟暂停 调用显示程序 数码管显示程序 调用8279显示秒的十位 初始化8279 检测PA0 时钟信号,是否到一秒 图4——程序流程图
11
结 束
5.代码、注释
data segment sum db 1 dup(?) lksign db 1 dup(?) data ends
code segment
assume cs:code,ds:data start:
MOV AL, 00110101B ; 通道0,16位,先读/写低字节,后高字节,方式2,BCD MOV DX, 20Bh OUT DX, AL
MOV DX,208H MOV AL,00H
OUT DX,AL ; 计数器低字节 MOV AL,50H
OUT DX,AL ; 计数器高字节
MOV AL, 01110111B ; 通道1,16位,先读/写低字节,后高字节,方式3,BCD MOV DX, 20Bh OUT DX, AL
MOV DX, 209h MOV AL, 00H
OUT DX, AL ; 计数器低字节 MOV AL, 04H
OUT DX, AL ; 计数器高字节 ; 定时初始设置
mov al,10010000b ;A口输入,B输出 mov dx,203h
out dx,al ;初始化8255
again:
mov sum,00H ;设定计数初值,此值可以改动
mov al,0FEh mov bl,0FEh
lp: ;计时累加模块,查看8255端口的信号,
12
call lok call lok mov al,bl
mov dx,201h ;B口 out dx,al
SHL al,01h ;左移1次 mov bl,al inc sum
push ax push bx push dx
call show ;调用显示程序
pop dx pop bx pop ax
cmp sum,08H
jnz lp ;实现灯顺序亮
mov al,01h mov bl,01h ln:
call lok call lok mov al,bl
mov dx,201h ;B口 out dx,al
SHL al,01h ;左移1次 OR AL,BL
mov bl,al dec sum
push ax push bx push dx
call show ;调用显示程序
13
pop dx pop bx pop ax
cmp sum,00H
jnz ln ;实现灯顺序灭
jmp again
lok proc near lk:
mov dx,200h
in al,dx ;读入8255 A口的值
and al,10000000b ;开关K7接入PA7,按下后时钟暂停 cmp al,10000000b jnz lk
mov dx,200h in al,dx
and al,10000001b ;检测PA0 时钟信号,是否到一秒了 cmp al,lksign jz lk
mov lksign,al ret
lok endp
show proc near mov dx,212h mov al,00H out dx,al mov al,38h
out dx,al ;初始化8279
mov dx,210h mov al,00H out dx,al out dx,al out dx,al out dx,al out dx,al out dx,al out dx,al
out dx,al ;熄灭8279
14
mov al,sum mov ah,0 mov dl,10 div dl
mov bl,ah ;将余数(即秒的个位)放在BL中 mov bh,al ;将商(即秒的十位)放在BH中 call trans ;调用8279显示秒的个位 mov bl,bh
call trans ;调用8279显示秒的十位
call trans call trans
mov dx,212h
mov al,0c2h ;清空8279缓存 out dx,al mov al,cl ret
show endp
trans proc near ;数码管显示程序 one:
cmp bl,1 jnz two
mov al,00000110b two:
cmp bl,2 jnz tri
mov al,01011011b tri:
cmp bl,3 jnz for
mov al,01001111b for:
cmp bl,4 jnz fiv
mov al,01100110b fiv:
cmp bl,5 jnz six
mov al,01101101b six:
cmp bl,6
15
jnz sev
mov al,01111101b sev:
cmp bl,7 jnz eit
mov al,00000111b eit:
cmp bl,8 jnz nin
mov al,01111111b nin:
cmp bl,9 jnz zro
mov al,01101111b zro:
cmp bl,0 jnz shw
mov al,00111111b shw:
mov dx,210h out dx,al ret
trans endp CODE ENDS END START
6.分析与测试
要实现顺序控制的全过程,需要用到8253计时,用LED灯指示每个过程,用8255来控制LED以及8279控制数码显示等等。
在运行程序的过程中出现了很多错误,给8255送控制字和初值,通过级联来给每个过程计时,8255的A口作输入,8253的输出接A口;B口作输出,8255循环检测A口的状态,通过B输出到灯上。 在实验过程中,我们先后遇到了3个困难:
1、首先,一开始不知道如何才能表示故障。
2、其次,就是8253输出到8255的A口时,只用到了一个A口,而输出时
我们用了全部的B口作为输出,我对这样的连线表示困惑,因为以前实验的时候
都是有几个输入就有几个输出,而在这次试验中的这种情况我们是第一次遇到,
16
所以我觉得这种方式不一定可行。
3、最后,就是在编程的时候我们也遇到许多困难,编写的程序许多功能实 现不了,与我们预想的差别很大,而且在编程过程中,加载运行时会出现好多错 误,尤其是实现灯顺序灭时耗费了许多时间。
7.问题解决方案
1、经过询问老师我们了解到可以用开关作为故障表示,于是我们就用开关 断开时表示电路出现故障,通过将开关连接到8255的一个输入端口,这样就可
以实现任务要求了。
2、后来请教了老师,老师告诉我们这些可以通过编程来实现只需要让输入 的语句通过不同的端口输出就行了,后来我们也克服了这个困难。
3、经过查阅资料与请教老师同学,基本能将功能实现,编写出相应程序, 至于顺序灭的实现,刚开始没考虑到,后来实现时灭一下就亮了,再经我们仔细 分析,发现对8255送数据时出现错误,再加一个OR语句,问题就解决了。
8.运行结果
实验现象: 灯顺序亮(0~7):
数码管显示:01、02、……08 灯顺序灭(0~7):
数码管显示:08、07、……01
打开开关,表示出现故障后,灯不再亮或灭,数码管显示数字不再变化。
9. 结论与体会
9.1结论
8253采用级联方式,定时,8255控制LED灯的亮灭及故障控制,8279显示数 字。通过本次实践我们可以知道8253、8255可完全自如的控制LED灯的顺序的 亮灭,而8279则可以和8255完美的结合显示正在亮着灯的数字。 9.2体会
我们选择这个顺序控制这个实验,首先,因为顺序控制实验首先在机械化生 产中用很大的应用,这对我们进一步了解电子机械有很大的帮助;其次,因为顺 序控制实验应用的器件比较多,使我们对以前的很多芯片和器件进行复习。在实
17
验过程中,我们碰到了很多的难题,尤其是 8255、8253 、8279等芯片的配合使 用,编程实现顺序系统的功能难度较大。所以我们一方面去图书馆查阅资料、借 阅相关的书籍,另一方面,在老师的帮助和指导下去完成这个实验。总之,在实 验最后,经过我们的不懈努力,终于完整地实现了顺序控制,这让我感到很高兴, 以后我们将会继续努力学习这些东西,争取掌握和能够应用它们去解决实际问 题。
在实验过程中,我学到了很多东西,但有的时候还是比较迷茫,不知道从哪 些方面努力和下手,幸亏有老师及同学的帮助,老师帮我们解决问题,指导我们 的实验过程,才使我们的实验最终可以完成。十分感谢老师的帮助。这次实验 从理论上和实践上都是对我的检查,我受益匪浅,对8253和8255、8279的功能
以及原理都有了更进一步的了解,同时,我也认识到了自己基础知识的不足和欠 缺,需要我继续加倍努力,这次实验也增加了我的学习兴趣,当我们最后完成实 验的时候,我觉得很高兴,也觉得很有成就感,以后我将更加努力的学习好我的 专业课程。
10.参考文献
[1] 《微型计算机原理与接口技术(第四版)》 周荷琴、吴秀清主编
合肥中国科学技术出版社 [2] 《计算机硬件课程设计指导书》 [3] [4] CSDN源码下载网
[5] 《微机接口技术300例》 李恩林、陈斌生主编 北京机械工业出版社 [6] 《微型计算机原理》王中民 西安电子科技大学出版社
18
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务