用8253A定时计数器控制8位LED循环移动Word格式.docx
《用8253A定时计数器控制8位LED循环移动Word格式.docx》由会员分享,可在线阅读,更多相关《用8253A定时计数器控制8位LED循环移动Word格式.docx(11页珍藏版)》请在冰点文库上搜索。
在课程设计的背景下,本系统运用了8253A芯片,基于8086实现了控制8位LED循环移动的设计,
显示程序设计以及软件编程的
思路。
关键词:
芯片8253A;
LED;
程序流程图
1.引言
1.1课题设计的目的
1.了解8253A与8086的硬件连接方法
2.掌握8253A的各种方式的编程及其原理
3.学会Emu8086和Proteus的联合用调
1.2课题设计要求
功能要求:
1、8253A可编程定时/计数器作定时器
2、LED灯循环移动
2、系统总设计
锁存控制74LS273
以8086为主控系统,用8253A可编程定时/计数器作定时器,产生特定频率的时钟脉冲信号,通过74LS273影响8位LED灯的循环移动。
3、硬件详细设计
3.1、8086主控模块
本设计采用的是8086。
8086是Intel系列的16位微处理器,采用NMOS工艺制造,用单一的+5V电源,时钟频率为4.77MHz~10MHz。
8086有16根数据线和20根地址线,它既能处理16位数据,也能处理8位数据。
可寻址的内存空间为1MB。
Intel8086拥有四个16位的通用寄存器,也能够当作八个8位寄存器来存取,以及四个16位索引寄存器,包含了堆栈指标。
资料寄存器通常由指令隐含地使用,针对暂存值需要复杂的寄存器配置。
它提供64K8位元的输出输入(或32K16位元),以及固定的向量中断。
大部分的指令只能够存取一个内存位址,所以其中一个操作数必须是一个寄存器。
运算结果会储存在操作数中的一个寄存器。
8086总线接口部件由下列各部分组成:
⑴4个段地址寄存器:
CS--16位的代码段寄存器;
DS--16位的数据段寄存器;
ES--16位的扩展段寄存器;
SS--16位的堆栈段寄存器;
⑵16位的指令指针寄存器IP;
⑶20位的地址加法器;
⑷6字节的指令队列缓冲器。
8086执行部件由下列几个部分组成:
⑴8个通用寄存器:
即AX、BX、CX、DX、BP、SP、SI、DI;
其中,4个数据寄存器:
AX、BX、CX、DX;
2个地址指针寄存器:
BP,SP;
2个变址寄存器:
SI、DI;
⑵标志寄存器FR;
⑶算术逻辑单元ALU。
3.2、8253定时/计数器电路
用8253A可编程定时/计数器作定时器,每隔1sLED向左循环移动一位。
设8253A可编程定时/计数器的输入时钟为100kHz,设定时/计数器0的计数初值为100,工作在方式3,即方波发生器,其输的1kHz方波做定时/计数器2的时钟。
定时/计数器2的初值设为1000,工作在方式0,即每隔1s计数结束产生中断,用此信号作为不可屏蔽中断的申请信号,在中断服务程序中设置每中断一次LED向左循环移动1位。
3.38位LED循环移动电路
用72LS273输出接口控制8只LED灯,每隔一秒实现循环移动功能。
74LS273是8位数据/地址锁存器,他是一种带清除功能的8D触发器,下面我介绍一下他的管脚图功能表等资料。
(1).1脚是复位CLR,低电平有效,当1脚是低电平时,输出脚2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)全部输出0,即全部复位;
(2).当1脚为高电平时,11(CLK)脚是锁存控制端,并且是上升沿触发锁存,当11脚有一个上升沿,立即锁存输入脚3、4、7、8、13、14、17、18的电平状态,并且立即呈现在在输出脚2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)上.
74ls273管脚功能:
1D~8D为数据输入端,1Q~8Q为数据输出端,正脉冲触发,低电平清除,常用作8位地址锁存器。
4、软件详细设计
本设计共包括3个模块,分别是向8253输入时钟,向8086输入产生的不可屏蔽的申请信号,LED灯循环移动。
4.1、系统程序流程图
开始
系统初始化
结束
5、系统仿真
5.1、系统仿真图
5.2、系统仿真结果图
6、总结
本设计以8086为主控系统,首先,根据实验要求每隔一秒向左循环移动一位,则需要周期为1s的方波信号。
因为输入信号的频率为100kHz,所以N=10^5/1=100000,因为8253A中一个计数器最大的计数次数是65536次,所以对于100000这样的大数,一个计数器是不可能完成上述分频要求的。
因此必须采用两个计数器级联的方法解决这个问题。
CLK0接100kHz信号源,OUT0接CLK2,取N1=100,N2=1000,使得N=N1*N2。
然后在仿真软件中画出用8253A定时/计数器控制8位LED循环移动的电路原理图和8086最小模式下的总线结构及I/O地址分配图。
最后将所编写的8086程序运行编译加到8086芯片上去,进行仿真。
观察实验结果。
这次设计中原本按照书上的做,但是出现了一些问题,找了学霸解决,知道自己在8086的运用上还很生疏,这次课程设计给了我们一次应用自己所学知识的机会,使我更深层次的理解了这门课程。
7.附录
.MODELSMALL
.8086
.STACK
.CODE
.STARTUP
NMI_INIT:
PUSHES;
NMI中断向量初始化
XORAX,AX
MOVES,AX
MOVAL,02H
XORAH,AH
SHLAX,1
MOVSI,AX
MOVAX,OFFSETNMI_SERVICE
MOVES:
[SI],AX
INCSI
MOVBX,CS
[SI],BX
POPES
;
可编程定时/计数器8253A初始化
MOVAL,00110111B;
t016位MODE3BCD
MOVDX,0406H;
控制口地址
OUTDX,AL
MOVDX,0400H;
t0地址
MOVAX,0100H;
100khz100分频1khz
MOVAL,AH;
高字节
MOVAL,10110001B;
t216位MODE3BCD
MOVDX,0406H
MOVDX,0404H
MOVAX,1000H;
1khz1000分频1hz
MOVBL,0FEH;
LED初始状态
MOVDX,0200H;
273地址
MOVAL,BL
JMP$
NMI_SERVICE:
ROLBL,1;
不可屏蔽中断服务程序
MOVDX,0200H;
MOVAX,1000H;
OUTDX,AL;
重新输入初值
MOVAL,AH;
EXIT:
IRET
.DATA
END