可编程定时器/计数器(8253)一、实验目的1)学会8253芯片和微机接口原理和方法。2)掌握8253定时器计数器的基本工作原理、工作方式和编程原理。二、实验内容
按图6虚线连接电路,将计数器0设置为方式0,计数器初值为N(N≤0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入N1个脉冲后OUT0变高电平)。
图6按图7连接电路,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用逻辑笔观察OUT1输出电平的变化(频率1HZ)。
三、编程提示
1、8253控制寄存器地址
计数器0地址
280H
计数器1地址
281H
图7283H
fCLK0连接时钟1MHZ
2、参考流程图(见图8、9):
开始
开始
设计数器0为工作方式0
设计数器0为工作方式3
送计数器初值
向计数器0送初值1000先送低字节后送高字节
读计数器值
显示计数值
有键按下吗?NY结束
设计数器1为工作方式3
向计数器1送初值1000先送低字节后送高字节
结束
图8
图9
四、实验代码
1、图6电路的实验代码
CODESEGMENT
段定义开始(CODE段)
ASSUMECSCODE规定CODE为代码段
STARTMOVAL10H设置控制字00010000(计数器0,方式0,写两个字节,
二进制计数)
MOVDX283H把控制寄存器地址放在DX寄存器中
OUTDXAL将AL的值送入DX端口
MOVDX280H把计数器0地址放在DX寄存器中
MOVAL0FH将0FH存入AL寄存器
OUTDXAL将此时AL的值送入DX端口
LP1INALDX
从DX端口读入8位,放在AL寄存器中
CALLDISP调用DISP
PUSHDX
将DX内容保存到堆栈段
MOVAH06H将06H存入AH,为了下句调用21中断
MOVDL0FFH将0FFH存入DL
INT21H
调用21中断
POPDX
将DX的内容推出栈段
JZLP1
如果DX的内容是0,就跳转到LP1
MOVAH4CH将4CH存入AH,为了下句调用21中断
INT21H
调用21中断
DISPPROCNEAR
定义一个名为DISP的子程序
PUSHDX
把DX的内容保存到堆栈段中
ANDAL0FH将AL寄存器的内容与0FH进行“与”运算,再把结果存
入AL中
MOVDLAL将AL的值送入DL寄存器
fNUM
CMPDL9JLENUMADDDL7ADDDL30HMOVAH02HINT21HMOVDL0DHINT21HMOVDL0AHINT21H
比较DL中的值与9的大小如果DL的值小于或等于9时,则跳转到NUM将DL的值与7进行相加后,再送入DL中将DL的值与30H进行相加后,再送入DL中将02H存入AH调用DOS21中断结合“MOVAH02H”就是说输出0DH调用中断指令结合“MOVAH02H”就是说输出0AH调用DOS21中断
POPDXRETDISPENDPCODEENDSENDSTART
将DX的内容推出栈段子程序在功能完成后返回调用程序继续执行子程序结束r