《微机原理与接口技术》课程设计:流水线计数系统40540.pdf
微机原理与接口技术课程设计:流水线计数系统 1 设计任务与要求.2 2 方案比较、设计与论证.2 2.1 计数方式的选择.2 3 硬件电路设计.2 3.1 最小模式系统图.2 3.2 8255A 的 CS 选通信号的来源.3 3.3 8253A.4 3.4 8255A.4 3.5 数码管.5 3.6 555 构成的多谐振振荡器.6 4 软件设计(程序).6 5 现象图.10 5.1 打开以后的现象图如图 7 所示.10 5.2 计数到 80 的图如图 8 所示.10 5.3 计数到定时器定时的值如图 9 所示.10 6 实验心得.11 参考文献.11 流水线计数系统设计 1 设计任务与要求 设计一个流水线计数系统,可以实现从 00 到 99 的显示计数,还可以实现数据清零功能和达到设定的数据时提示的功能。2 方案比较、设计与论证 2.1 计数方式的选择 方案一:查询方式计数,这个计数方式是用于 CPU 处理东西比较少的情况,还有就是是用于节约中断口的情况。方案二:中断方式计数,这个计数方式用于 CPU 处理事情比较多时,里面有一个最重要的事情的时候用中断。综上所述:因为这个程序没有很复杂有查询方式就可以很好的计数,所以选用方案一。3 硬件电路设计 3.1 最小模式系统图 8086 的数据总线和地址总线通过 74HC373 锁存器分开,将 AD0-AD15 分开,分开后就可以进行用这 16 根地址线进行选址。如图 1 所示:图 1 最小模式系统图 3.2 8255A 的 CS 选通信号的来源 通过 4-16 译码器译码出 8255A 的 CS 选通信号。如图 2 所示:图 2 8255A 选通信号 CS 的来源 通过 4-16 译码器译码出 8253A 的 CS2 选通信号。如图 3 所示:图 3 8253A 选通信号 CS2 的来源 3.3 8253A 当 CLK0 计数满后 OUT 端输出一个负脉冲个 CLK1 的 GATE1 端,这时就会从 OUT 端输出脉冲信号驱动蜂鸣器发声。电路如图 4 所示:图 4 8253A 及其与外部的接线 3.4 8255A 8255A 用做检测 PB0 是否为低电平,若为低电平则数值加 1,检测 PB1 是否为低电平,若为低电平则数值清零,8255A 的 PC0 和 PC1 作为数码管的位选,PA 口作为数码管的段选。电路如图 5 所示:图 5 8255A 及其与外部的接线 3.5 数码管 数码管由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。数码管实际上是由七个发光管组成 8 字形构成的,加上小数点就是 8 个。这些段分别由字母 a,b,c,d,e,f,g,dp 来表示。按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。本设计采用 1 个 2 位共阴极数码管显示时、分、秒。共阴极数码管:共阴极数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴极数码管在应用时应将公共极 COM 接地,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮,其段选码:LED:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH 数码管的动态显示是利用人眼的视觉暂留特性来实现的。3.6 555 构成的多谐振振荡器 用于对按键出来的信号进行脉冲化、示波器用于将按键输出的信号和脉冲化后输出的信号进行对比。电路图如图 6 所示:图 6 555 构成的多谐振振荡器 4 软件设计(程序)IOY0 EQU 01H ;片选 IOY0 对应的端口始地址 IOYO0 EQU 00H P53_CTL EQU IOY0+03H*8 ;8253 的控制端口地址 TIMER0 EQU IOY0+00H*8 ;8253 的计数器 0 端口地址 TIMER1 EQU IOY0+01H*8 ;8253 的计数器 1 端口地址 P55_CTL EQU IOYO0+03H*2;8255 的控制端口地址 P8255A EQU IOYO0+00H*2;8255 的 A 口地址 P8255B EQU IOYO0+01H*2;8255 的 B 口地址 P8255C EQU IOYO0+02H*2;8255 的 C 口地址 STACK1 SEGMENT STACK DW 256 DUP(?)STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,SS:STACK1 START:MOV AX,0 MOV CL,0 ;先让数码管显示 00 MOV CH,0 CLI ;清除标志位 MOV DX,P53_CTL ;写 8253 控制字 MOV AL,34H ;定时器 0 工作于方式 2 00110100 OUT DX,AL MOV DX,TIMER0 ;给定时器初值 20 MOV AL,20 OUT DX,AL MOV AL,00 OUT DX,AL MOV DX,P53_CTL;写控制字 MOV AL,76H ;01110110,定时器 1 工作在方式 3,用于驱动蜂鸣器发声 OUT DX,AL MOV DX,TIMER1 MOV AL,0 OUT DX,AL MOV AL,25 OUT DX,AL MOV DX,P55_CTL MOV AL,82H ;设定 8255 的工作方式 0,B 口输入,A,C口输出 OUT DX,AL KS:MOV DX,P8255B ;读取 PB.1 端口,判定是否清零 IN AL,DX TEST AL,02H JNZ TJ ;若不等于 1 则执行清零操作 MOV CX,0 ;清零开关按下则 CX 清零数据全没了 CALL DISP;数码管显示 TJ:MOV DX,P8255B IN AL,DX ;检测 PB0 端口数据的变化 TEST AL,01H;判断是否为低电平 JNE DISPLAY1 ;不为低电平则调用 DISPLAY1,为低电平则执行下面的 CL 加 1 INC CL ;CL 加 1 CMP CL,10 ;到十回零,同时向高位进位 JNZ DISPLAY1 ;若不相等的话证明还没有要进位 MOV CL,0 INC CH CMP CH,10 JNZ DISPLAY1 MOV CH,0 DISPLAY1:CALL DISP JMP KS DISP PROC PUSH CS POP DS MOV AL,11111101B MOV DX,P8255C ;OUT DX,AL ;MOV AL,CL ;偏移次数送给 al,既要显示的值 LEA BX,LED ;地址传送指令,将了 LED 的基地址传送给bx XLAT;取出以 BX 中的数为基地址,AL 为偏移地址的数据给 AL MOV DX,P8255A ;将通过 XLAT 指令取到的内容从 PA 口输出 OUT DX,AL CALL DELAY MOV AL,11111110B MOV DX,P8255C OUT DX,AL MOV AL,CH ;要显示数值的十位 LEA BX,LED XLAT MOV DX,P8255A OUT DX,AL CALL DELAY RET DISP ENDP DELAY PROC PUSH CX MOV CX,1500H LOOP$;表示一直执行这条指令 POP CX RET DELAY ENDP LED:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;数码管显示所要查的表 CODE ENDS END START 5 现象图 5.1 打开以后的现象图如图 7 所示 通过按计数开关实现计数功能,通过按清零开关实现清零功能。图 7 5.2 计数到 80 的图如图 8 所示 图 8 5.3 计数到定时器定时的值如图 9 所示