把3个端口设置完成(把方式控制字送到控制端口的地址).对控制字的写入要采用控制I/O地址: A1A0=11(即控制端口). 外设数据的读写利用端口A、B、C的I/O地址: A1A0依次等于00、01和10(本课设中用到的译码电路产生的对应的PC机I/O地址为300H、301H、302H)。 初始化编程之后,处理器执行输入IN指令和输出OUT指令、对3个数据端口进行读写就可以实现处理器与外设间的数据交换.
5) 定时/计数器8253
定时/计数器8253的内部结构图和引脚图如下所示:
8253是可编程间隔定时器,有3个独立的16位减法计数器通道,每个计
数器有6种工作方式(由处理器写入的方式控制字确定).8253芯片面向处理器连接的引脚类似于处理器的数据、地址和控制信号.8253内部通过数据总线缓冲器引出8位数据引脚D7~D0,与系统数据总线相连,用于接收处理器的控制字(保存于控制字寄存器中)和计数初值,以及发送计数器的当前计数值和工作状态.
8253内部的读写控制逻辑接收来自系统总线的读写控制信号,控制整个芯片的工作.PC机主板I/O地址译码电路译码输出Y1与8253片选信号连接,系统地址总线A1和A0与8253芯片对应的地址引脚A1和A0连接,这样得到定时器的4个I/O地址304H~307H.
8253的初始化需要首先写入方式控制字,再写入计数初值.对于计数器的工作方式2和工作方式3,计数值减为0后自动将预置寄存器的计数初值送到减1计数器,同时重复下一次的计数过程,直到写入新的方式控制字才停止.这一特点使得8253在本课设中用于产生一个1s定时信号(OUT2接PC4)。
六. 程序流程图和汇编源程序
流程图
开始 8253、8255的初始化 启动8253 1s定时 PC4=0? N Y PA口数据输出 源程序
DATA SEGMENT
MESG1 DB '1s invoke interrupt one time,and to light one of LEDs',0ah,0dh
DB 'Exit with Esc',0ah,0dh,'$' LEDDATA DB 01H,02H,04H,08H,10H,20H,40H,80H ;NUM DW 0 DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA DELAY PROC PUSH CX PUSH BX
MOV BX,05FFFH LOOP2:MOV CX,0FFFFH LOOP1:LOOP LOOP1 DEC BX JNZ LOOP2 POP BX POP CX RET DELAY ENDP START:
MOV AX,DATA MOV DS,AX MOV AH,09H MOV DX,OFFSET MESG1
INT 21h MOV DX,303H MOV AL,80H OUT DX,AL MOV DX,300H MOV AL,0FFH OUT DX,AL ;D灯熄灭 MOV DX,307H 显示提示信息 ;初始化8255 ;PA输入 定时1S
;
;8253 MOV AL,01110110B OUT DX,AL MOV DX,305H MOV AL,0E8H OUT DX,AL MOV AL,03H OUT DX,AL MOV DX,307H MOV AL,10110110B OUT DX,AL MOV DX,306H MOV AL,0E8H OUT DX,AL MOV AL,03H OUT DX,AL MOV CX,0
L1: MOV AH,0BH ;检查是否有Esc键按下 INT 21H INC AL
JNZ LP ;若无键按下,则程序往下执行 MOV AH,08H ;如有Esc键按下,则程序退出 INT 21H