protues-秒表计时(8255,8253)(内含简单源码-数码管亮)

刚刚完成了课设,用protues实现仿真秒表计时,里面用到了一些芯片

(8253,8255,8086),这里是我查到的一下东西,希望能帮到大家,,,

RESPACK-8:

一般是接在51单片机的P0口,因为P0口内部没有上拉电阻,不能输出高电平,所以要接

上拉电阻。排阻就是好多电阻连载一起,他们有一个公共端。1端为公共端接VCC或地,

看你是上拉还是下拉呢,其他接你要操作的端口。(所以,我觉得,对于我们这个设计

应该是:上拉电阻,是为了产生高电平,说白了,也就是为了产生1)

PROTUSE(8086引脚功能):

RESET:复位信号,输入。

高电平持续4个时钟周期以上有效:系统复位-FR,IP,DS,SS,ES和指令队列清零,

(cs)=FFFFH 
;  RESET变为低电平,cpu从FFFF0H开始执行程序。即

RESET:1(复位)0(正常工作)

CLK:时钟信号,输入。任何cpu都必须的信号

在Proteus中,CLK可以不接:Proteus中8086模型默认有时钟为5Mhz,也可以外接时钟

READY:准备好信号,输入。由所访问的存储器或I/O设备发来的响应信号,高电平表示

数据已经准备就绪,马上可以进行一次数据传送。

cpu在总线周期T3,对READY进行采样:

ready为0:则会继续插入等待状态Tw,在Tw状态,cpu继续对ready信号进行

采样,直到ready信号有效为止(即转为高电平)

ready:1(数据准备号,可以传送)0(数据未准备好,cpu插入等待状态)

/RD,/WR:cpu与存储器或IO接口通信,通常需要这两个信号进行读,写操作

ALE:地址锁存允许信号,输出。是cpu在每个总线周期T1发出的;

高电平:表示当前地址/数据复用线上输出的是(地址信息)

常常需要利用它的下降沿把地址信号锁存在8282或其它地址锁存器中。

锁存的目的:

T1状态:地址/数据复用引脚(AD0–
AD15输出地址信号);

T2状态:撤销地址信号;

T3:地址/数据复用引脚(AD0
- AD15出现数据信号);

T4:总线周期接受。

若不锁存,T3状态时,原先的地址信号早已不存在,找不到要访问的存

储单元/IO接口,故(无法读/写数据。

8086本身只是一个cpu,内部并没有存储器。但在Proteus中,可以不接存储器:

该8086模型有内部存储器。见proteus
VSM Model Help ->8086 Model.

所以在Proteus仿真时不接存储器8086可以运行程序

74LS373为三态输出的八D锁存器,共有54LS373和74LS373两种线路。是一种常见

的8输入端,8输出端的锁存器。GND接地,VCC接5v直流电源(实际芯片上一定有这两个引脚)

D0– D7为芯片的数据接口,也是芯片的输出端,一般外接开关按钮或其他芯片的输出端。

Q1– Q7为芯片的输出接口,也就是芯片的输出端,简单电路一般外接小灯泡显示结果

,复杂电路需要将输出端外接下一个芯片。

/OE:三态允许控制端,当OE为低电平时,将信号从输出端D0–
D7放入,不然将信号置0

LE:为锁存器开关,当LE为高电平时,芯片具有锁存功能,外来信号不会改变输出结果

proteus:8255a

8255共有40个引脚,采用双列直插式封装:和外设相连的:

PA0– PA7:A口数据信号线,双向,三态引脚

PB0– PB7 : B口数据信号线,双向,三态引脚

PC0– PC7 : C口数据信号线,双向,三态引脚

(这三个端口配置成输出方式时可以字节写,配置成输入方式时可以字节读,

PC端口可以位操作。用来存储配置信息的寄存器的寄存器叫做控制寄存器,加上三个端口)

面向系统总线和cpu

RESET:复位信号线,高电平有效,当RESET信号来到时,所有内部寄存器都被

清除,同时3个数据端口被自动置为输入端口。

D7– D0:它们是8255A的数据线,和系统总线相连,用来传送数据和控制字

/CS(表示CS的非):片选信号线,低电平(/CS为0)有效,表示芯片被选中,只有当/CS

有效时,CPU才能对8255进行读/写操作

/RD:读信号,低电平有效。当/RD有效时,CPU可以从8255A中读取数据

/WR:写信号,低电平有效。当/WR有效时,CPU可以往8255A中写入控制字或数据

A1,A0:端口选择信号。8255内部有3个数据端口(I/O端口)和1个控制端口,共4个端口。

通过地址线A0,A1寻址。规定当A1,A0为00时,选中A端口;为01时,选中B

端口;为10时,选中C端口;为11时,选中控制口。

需要说明的是:写入控制寄存器的配置信息最高位必须为1。如果最高位为0,8255

芯片就理解成对PC端口的位操作。格式如下:

最高位=1,为配置信息

最高位=0,为PC端口位操作命令:

如果简单快速地使用

要使用8255,只要把控制方向的配置字写入控制寄存器,然后操作端口就可以了。

如何操作呢?如果你把PA口配置成输入方式就读操作,配置成输出方式就写操作。

在这里有一点硬件上的数据要介绍一下。8255的每个口在作为输出引脚时都有2.5mA

的带负载能力,推挽形式。作为输入方式时是浮空输入的,内部没有上拉电阻,

接键盘之类的要在另外加上拉电阻

驱动8255芯片共用到9个子程序,分别是初始化控制寄存器及读写PA,PB,PC

端口,读写PC端口某位。单片机上电后应初始化一次8255芯片,初始化函数完成

的工作是通过RESET引脚清除控制寄存器的内容,然后把控制字写入控制寄存器。

电源和地

Vcc:+5V电源

GND:地线

8253的工作原理

8253是可编程的计数器/定时器,其内部有三个独立的16位计数器/定时器通道,每

个计数器通道均可按6种不同的方式工作,并且都可以按二进制或十进制计数。其

中CLK0– CLK2是计数器0-2的时钟脉冲输入端,GATE0–
GATE2是门控脉冲输入端

,OUT0– OUT2是输出端及内部结构

当用8253做外部事件计数器时,在CLK端所加的计数脉冲由外部事件产生,这些脉冲的间

隔可以不相等。如果要用则CLK端应输入精确的时钟脉冲。这时,8253所能实现的定时时

间决定于计数脉冲的频率和计数器的初值,即定时时间=时钟脉冲周期tc
× 预置的计数初值n

8253的控制逻辑由5个控制信号WR,CS,A1,A0组成

控制逻辑和执行的操作

8253编程时,要对其控制字寄存器写入相应的控制字,控制字寄存器格式如下:

其中:SC1,SC0–通道选择位。为00,01,
10分别表示选择0,1, 2通道。RL1,RL0–读/写操作位。

00表示锁存数据,可随时读取计数器中的计数值;01表示只读/写低8位,高8位自动置为0;

10表示只读/写高8位,低8位自动置0;
11表示读/写16位数据,先低8位,后高8位。

M2,M1,M0
–工作方式的选择位8253具有3个独立的16位减法计数器,6中不同

的工作方式。

方式0:又称计数结束产生中断工作方式。当程序将工作方式控制字写入控制字寄

存器时计数器的输出端OUT立即变为低电平。在计数初值写入该计数器后,输出仍

将保持低电平。当门控信号GATE为高电平时,计数器对输入端CLK的输入脉冲开始作减

一操作,当计数器从初值减为0时,输出端OUT由低电平变为高电平,该输出信号

可作为向CPU发出中断请求信号。

方式1:又称可编程单稳态工作方式。功能是在GATE信号的上升沿作用下,输出端OUT产

生一个负脉冲信号,负脉冲的宽度可由定时器的计数初值和时钟频率编程确定

方式2:又称频率发生器工作方式。当程序将工作方式控制字写入控制字寄存器时,

计数器的输出端OUT立即变为高电平。在写入计数初值后,计数器对输入

时钟CLK计数。在计数过程中OUT保持不变,直到计数器从初值减为1时,输出

OUT将变低,在经过CLK周期时,OUT恢复高电平,并按已设定的计数初值重

新开始计数。在需要产生某个脉冲信号或将某一个较高频率的脉冲信号分频为

较低频率时,可使用8253的方式2

方式3:又称方波发生器工作方式。类似与方式2,不同之处是方式3的输出OUT是方波

方式4:又称软件触发选通工作方式。其功能是在输出OUT端隔一定时间产生一价目负脉冲

与方式0不同的是,输出脉冲的宽度是固定的,但产生负脉冲所相隔时间是可编程的。

方式5:又称软件触发选通工作方式。方式5的工作类似于方式4,不同之处是GATE信号的

作用不同。方式5的计数过程由GATE的上升沿触发,当计数结束时,OUT将输出

一个CLK周期的低电平信号

方式6:当程序送一控制字将所选的计数器置于所设定的方式后,该计数器的输出为低;当

计数器初值装入被选中的计数器后,在外部输入的门控高电平的控制下,则可通过

各自的计数脉冲进行递减计数。此时其输出仍为“低”。当计数器从初识值减到全“0”

时,便产生一高电平输出,利用此输出信号向CPU发计数完中断;此中断请求一直保

持到程序再次向计数器装入初值为止

BCD:计数方式选择位。1表示按十进制计数,0表示按二进制计数。

8253初始化编程

编程时,可选择计数器1工作在方式0.在8253的方式0工作方式中,从将计数初值写入计数器到

开始减1计数之间,有一个时钟脉冲的延迟。若计数初值为n=
999, 那么经过n+1个即1000个脉

冲时计数值减为0,并在OUT1输出一正跳变,这可以作为中断请求。在中断服务子程序中CPU

可以做其他处理,如送下一个包装箱等。设计数初值为1999(要求一个包装箱内装工件2000)

,按十进制计数,先送低8位,在送高8位,控制字为01110001B

初始化程序为:

MOV AL,01110001B

AL,01110001B

MOVDX, 0356H

OUTDX, AL ;送方式控制字

MOVAL,99H

MOVDX,0352H

OUT DX,AL
;向通道1送计数初值低8位

MOVAL,19H

OUTDX,AL
;向通道1送计数初值高8位

关于74ls373,8255:

锁存的作用是将数据线AD[0..15]中的AD0–
7给D0– D7,然后直接给Q0– Q7,而Q1,Q2给了A0,A1

8255内部含有4个寄存器

IO_8255A_A EQU 000b

IO_8255A_B EQU 010b

IO_8255A_C EQU 100b

IO_8255A_CON EQU 110b

**** *D1D2*

A000b

B010b

C100b

CON110b

1,tab db 3FH,06H,5BH,4FH,66H,6DH,7DH,7H,7FH,6FH

(db,汇编语言中的伪操作命令,它用来定义操作数占用的字节数,在这里B是byte

的缩写,即字节,该伪操作所定义的每个操作数占有1个字节)

(dw,定义一个字(一般为16位)dd,定义一个双字(一般为32位))

它们在程序中起的作用,一般是在程序中作变量使用

这句话的意思就是:将这些数据存入tab开始的地址空间里

lea bx, tab

取有效tab地址(16位),送到bx寄存器中去

Load  effect  address(取有效地址,也就是取偏移地址,在微机原理8086/8088中有

20位物理地址,由16位段地址向左偏移4位再与偏移地址之和得到。地址传送指令之一)

LEA目的,源

MOV CX,28H

S1:LOOP
S1

LOOP指令在执行时,先将CX的内容减1,然后再判断CX中是不是为0,如果不为0,则继续循环

,如果为0,则退出循环,执行下一条指令。

在LOOP指令前,一定要对CX寄存器设置循环计数初值的指令。

如:

mov cx,0100h
;设置循环次数256次

RRR:loop
RRR ;cx减1,如不为0,则循环

。。。。;后续处理

JMP PANDUAN ;jmp是无条件跳转的意思。

JZ CLEAR ;JZ是个跳转指令,就是当zf=
1时,跳转到CLEAR

JNZ就是zf!=1时跳转

emu8086,protuse,秒表计时器

(EQU:是一个代码替换指令ADD_55A
EQU 0800H, MOV DX,ADD_55A(表示的是:MOV DX,0800H))

(L DW 100 DUP(?):定义100个字(16位),里面的内容用()的数值填充,如果()内是?

,那么表示不进行初始化

db 3 dup(“abc”,“ABC”)定义了18个字节)

ADD_55A EQU 0800H

ADD_55B EQU 0802H

ADD_55C EQU 0804H

ADD_55CT EQU 0806H

MOV AL, 89H

OUT  DX, AL

(表示将AL的数据写入到DX寄存器中)

MOV DX,378H

OUT DX,AX(将AH和AL分别写入端口379H和378H)

IN AL,21H;表示从21H端口读取一字节数据到AL

IN AX,21H;表示从端口地址21H读取1字节数据到AL,从端口22H读取1字节到A

时间: 2024-10-12 15:38:25

protues-秒表计时(8255,8253)(内含简单源码-数码管亮)的相关文章

HashMap简单源码及多线程下的死循环

主要记录hashMap的一些基本操作源码实现原理以及多线程情况下get()操作的死循环引发原因 一.hashMap简介 1.hashMap集合的主要属性及方法 (默认初始化容量)DEFAULT_INITIAL_CAPACITY = 16 (默认最大容量)MAXIMUM_CAPACITY = 1 << 30 (默认加载因子)DEFAULT_LOAD_FACTOR = 0.75f (Entry数组)Entry[] table (Entry实例的数量)size put(K key, V value)

MyBatis简单源码分析1 - 环境搭建

本文以MyBatis独立使用的情形简单地分析MyBatis的源码,记录自己学习的过程 重要的Java代码如下: 主程序: 1 package com.suntao.learning.debug; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.util.List; 6 7 import org.apache.ibatis.io.Resources; 8 import org.apache.ib

Dubbo 简单源码

一.项目目录结构其中edu_service_user 是服务的提供方,edu-web_boss 是服务的消费方 二 xml 的核心配置①,服务提供方 (解释:address 是当前我本机的ip interface :提供服务的接口) -------------------------------------------------------------------------------------------------------------------------------------

SpringMvc流程分析,简单源码分析

SpringMvc的请求入口:web.xml中的DispatcherServlet <servlet> <servlet-name>springServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfi

Apache安全优化:设置防盗链,隐藏版本信息 (内含Apache源码包和抓包工具)

防盗链:一些不良网站有时为了不增加成本又想扩充自己站点的内容,经常盗用其他网站的链接,一方面损害了原网站的合法利益,另一方面又加重了服务器的负担 隐藏版本信息:一般情况下,软件的漏洞信息和特定版本是相关的如果×××或别有用心之人得到了Apache的版本信息,就会使服务器遭受被×××的风险,为了防止这些事的发生,我们可以隐藏版本号,减少危险的发生 实验环境:一台linux作为web服务器,IP为192.168.100.222 一台win7作为盗链网站,IP为192.168.100.3 一台win7

ReentrantLock(重入锁)简单源码分析

1.ReentrantLock是基于AQS实现的一种重入锁. 2.先介绍下公平锁/非公平锁 公平锁 公平锁是指多个线程按照申请锁的顺序来获取锁. 非公平锁 非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁.有可能,会造成优先级反转或者饥饿现象. 3.重入锁/不可重入锁 可重入锁:广义上的可重入锁指的是可重复可递归调用的锁,在外层使用锁之后,在内层仍然可以使用,并且不发生死锁(前提得是同一个对象或者class),这样的锁就叫做可重入锁. 不可重入锁

Javac源码简单分析之解析和填充符号表

一.说明 符号表是由一组符号地址和符号信息构成的表格.符号表中所登记的信息在编译的不同阶段都要用到,在语义分析(后面的步骤)中,符号表所登记的内容将用于语义检查和产生中间代码,在目标代码生成阶段,党对符号名进行地址分配时,符号表是地址分配的依据. 二.主要的类与方法 解析和填充符号表这个过程主要由com.sun.tools.javac.comp.Entry及com.sun.tools.javac.comp.MemberEnter两个类来实现的. com.sun.tools.javac.comp.

死磕 java集合之CopyOnWriteArraySet源码分析——内含巧妙设计

问题 (1)CopyOnWriteArraySet是用Map实现的吗? (2)CopyOnWriteArraySet是有序的吗? (3)CopyOnWriteArraySet是并发安全的吗? (4)CopyOnWriteArraySet以何种方式保证元素不重复? (5)如何比较两个Set中的元素是否完全一致? 简介 CopyOnWriteArraySet底层是使用CopyOnWriteArrayList存储元素的,所以它并不是使用Map来存储元素的. 但是,我们知道CopyOnWriteArra

bootstrap源码分析之tab(选项卡)

实现tab选项卡的应用,此插件相对比较简单 源码文件: tab.js 实现原理 1.单击一个元素时,首先将原来高亮的元素取消2.然后给被单击元素进行高亮3.如果单击元素是下拉框中某个选项,则选中本身,还要选中下拉框5.如果定义了动画,先执行动画,然后回调 源码分析: 1.Show方法,是在单击一个元素的时候触发,会触发如下四个事件  1.1.Hiden.bs.tab:隐藏上一个元素  1.2.Show.bs.tab:显示当前元素  1.3.Hideen.bs.tab:隐藏上一个元素完成  1.4