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

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


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




RESPACK-8:


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


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


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


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




PROTUSE8086引脚功能):



RESET:复位信号,输入。


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


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


RESET1(复位)0(正常工作)


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


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



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


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


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


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


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


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



/RD/WRcpu与存储器或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锁存器,共有54LS37374LS373两种线路。是一种常见


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


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


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

        

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


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


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


protues-秒表计时(8255,8253)(内含简单源码-数码管亮)_第1张图片


proteus:8255a


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


PA0– PA7A口数据信号线,双向,三态引脚


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


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


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


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


面向系统总线和cpu


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


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


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


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


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


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


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


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


通过地址线A0A1寻址。规定当A1A000时,选中A端口;01时,选中B


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





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


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



最高位=1,为配置信息


                                        protues-秒表计时(8255,8253)(内含简单源码-数码管亮)_第2张图片


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

                                                 protues-秒表计时(8255,8253)(内含简单源码-数码管亮)_第3张图片



如果简单快速地使用

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

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

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

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

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






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

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

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



电源和地

Vcc+5V电源

GND:地线





8253的工作原理


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


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


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


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

protues-秒表计时(8255,8253)(内含简单源码-数码管亮)_第4张图片





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


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


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




8253的控制逻辑由5个控制信号WRCSA1,A0组成


控制逻辑和执行的操作








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



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


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


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


M2M1,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 AL01110001B


AL01110001B


MOVDX, 0356H


OUTDX, AL ;送方式控制字


MOVAL99H


MOVDX0352H


OUT DXAL ;向通道1送计数初值低8


MOVAL19H


OUTDXAL ;向通道1送计数初值高8





关于74ls373,8255


锁存的作用是将数据线AD[0..15]中的AD0– 7D0– 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,汇编语言中的伪操作命令,它用来定义操作数占用的字节数,在这里Bbyte

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

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

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

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



lea bx, tab

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

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

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


LEA目的,源


MOV CX28H


S1LOOP S1


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


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


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


如:


mov cx0100h ;设置循环次数256


RRRloop RRR ;cx1,如不为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 DX0800H))


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


,那么表示不进行初始化


db 3 dupabc”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 DX378H


OUT DXAX(将AHAL分别写入端口379H378H




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


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

你可能感兴趣的:(protues,8086,82558253汇编,秒表计时)