刚刚完成了课设,用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