用8253A定时计数器控制8位LED循环移动《微机原理与接口技术》课程设计报告课题名称:用8253A定时/计数器控制8位LED循环移动学院:系:电子信息工程系班级:学号:姓名:摘要在课程设计的背景下,本系统运用了8253A芯片,基于8086实现了控制8位LED循环移动的设计,显示程序设计以及软件编程的思路。关键词:芯片8253A;LED;程序流程图1.引言1.1课题设计的目的1.了解8253A与8086的硬件连接方法2.掌握8253A的各种方式的编程及其原理3.学会Emu8086和Proteus的联合用调1.2课题设计要求功能要求:1、8253A可编程定时/计数器作定时器2、LED灯循环移动2、系统总设计8086主控电路8253特定频率输入时钟LED灯循环移动以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;锁存控制74LS273⑵标志寄存器FR;⑶算术逻辑单元ALU。3.2、8253定时/计数器电路AD0AD1AD2AD3AD4AD5AD6AD7D08D17D26D35D44D53D62D71RD22WR23A019A120CS21CLK09GATE011OUT010CLK115GATE114OUT113CLK218GATE216OUT217U18253A121312U3:A7427R1270NMIAD[0..15]RDWRA1A2IO2U1(CLK0)用8253A可编程定时/计数器作定时器,每隔1sLED向左循环移动一位。设8253A可编程定时/计数器的输入时钟为100kHz,设定时/计数器0的计数初值为100,工作在方式3,即方波发生器,其输的1kHz方波做定时/计数器2的时钟。定时/计数器2的初值设为1000,工作在方式0,即每隔1s计数结束产生中断,用此信号作为不可屏蔽中断的申请信号,在中断服务程序中设置每中断一次LED向左循环移动1位。3.38位LED循环移动电路AD0AD2AD3AD4AD5AD6AD7AD1D03D14D27D38D413D514D617D718CLK11MR1Q02Q15Q26Q39Q412Q515Q616Q719U274LS273121312U3:A7427D1LED-REDR2270D2LED-REDR3270D3LED-REDR4270D4LED-REDR5270D5LED-REDR6270D6LED-REDR7270D7LED-REDR8270D8LED-REDR9270AD[0..15]WRA0IO1用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、系统仿真结果图系统初始化向8253输入时钟LED灯循环移动结束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.STARTUPNMI_INIT:PUSHES;NMI中断向量初始化XORAX,AXMOVES,AXMOVAL,02HXORAH,AHSHLAX,1SHLAX,1MOVSI,AXMOVAX,OFFSETNMI_SERVICEMOVES:[SI],AXINCSIINCSIMOVBX,CSMOVES:[SI],BXPOPES;可编程定时/计数器8253A初始化MOVAL,00110111B;t016位MODE3BCDMOVDX,0406H;控制口地址OUTDX,ALMOVDX,0400H;t0地址MOVAX,0100H;100khz100分频1khzOUTDX,ALMOVAL,AH;高字节OUTDX,ALMOVAL,10110001B;t216位MODE3BCDMOVDX,0406HOUTDX,ALMOVDX,0404HMOVAX,1000H;1khz1000分频1hzOUTDX,ALMOVAL,AH;高字节OUTDX,ALMOVBL,0FEH;LED初始状态MOVDX,0200H;273地址MOVAL,BLOUTDX,ALJMP$NMI_SERVICE:ROLBL,1;不可屏蔽中断服务程序MOVAL,BLMOVDX,0200H;273地址OUTDX,ALMOVDX,0404HMOVAX,1000H;1khz1000分频1hzOUTDX,AL;重新输入初值MOVAL,AH;高字节OUTDX,ALEXIT:IRET.DATAEND