赞
踩
8253/8254的初始化命令字如下图所示:
按电路图连接电路,将计数器0设置为方式2,计数器初值为N(N<0FH),用手逐个输入单脉冲,编程使计数值在屏幕上显示,用逻辑笔观察OUTO电平变化,当输入N+1个脉冲后OUTO变为高电平,并将计数过程记录下来。
电路图:
接线:
汇编代码:
io8253a equ 283h io8253b equ 280h code segment assume cs:code start: MOV AL,14H ;设置8253通道0工作方式2,二进制计数,0001 0100 MOV DX,io8253a ;将io8253a对应的283H端口送入DX中 OUT DX,AL ;送工作方式控制字 MOV AL,0FH ;设置初始值0FH,0000 1111 MOV DX,io8253b ;将io8253b对应的280H端口送入DX中 OUT DX,AL ;送初始值 lll: IN AL,DX ;读计数初值 call disp ;调用显示子程序 push dx ;将dx中数据入栈 mov ah,06h ;调用DOS的6号功能,直接读写 mov dl,0ffh ;输入,dl为输入字符的ASCII码 int 21h ;中断,输出 pop dx ;将dx中数据出栈 jz lll ;跳转至lll mov ah,4ch ;返回DOS int 21h ;中断,退出 disp PROC NEAR ;显示子程序disp开始定义 PUSH DX ;将dx中数据入栈 AND AL,0FH ;将高四位清零 MOV DL,AL ;将更新后的AL送入DL中 CMP DL,9 ;将DL中值与'9'进行比较,判断是否小于'9'的ASCII码 JLE NUM ;如果比'9'小,则在'0'-'9',跳转到NUM ADD DL,7 ;否则为'A'-'F',需要加37H,A为65H NUM: ADD DL,30H ;将DL中的ASCII码值加30H MOV AH,02H ;调用DOS的2号功能,显示 INT 21H ;中断,输出 mov dl,0dh ;加回车符 int 21h ;中断,输出 mov dl,0ah ;加换行符 int 21h ;中断,输出 pop dx ;将dx中数据出栈 ret ;子程序返回 disp endp ;显示子程序disp结束定义 code ends end start
运行结果:
连接好实验箱后,运行程序,屏幕上显示初值F,持续按下按钮,屏幕上的示数依次从F递减至1,效果如下所示:
按照电路图连接电路,将计数器0、计数器1分别设置工作方式,CLK0连接时钟1MHz,由T01000分频后变为1000Hz,再由T1进行1000分频后得到1Hz。
电路图:
接线:
汇编代码:
io8253a equ 280h io8253b equ 281h io8253c equ 283h code segment assume cs:code start: mov dx,io8253c ;将io8253c对应的283H端口送入DX中 mov AL,37h ;设置通道0的工作方式3,0011 0111 out dx,al ;向8253写控制字 mov ax,1000h ;写入初始值1000h(二进制计数) mov dx,io8253a ;将io8253a对应的283H端口送入DX中 out dx,al ;写入低字节 mov al,ah ; out dx,al ;写入高字节 mov dx,io8253c ;将io8253c对应的283H端口送入DX中 mov al,76h ;设置通道1为工作方式3,0111 0110 out dx,al ;向8253写控制字 mov ax,1000d ;写入初始值1000d(BCD计数) mov dx,io8253b ;将io8253b对应的283H端口送入DX中 out dx,al ;写入低字节 mov al,ah ; out dx,al ;写入高字节 mov ah,4ch ;程序退出 int 21h ;中断,退出 code ends end start
运行结果:
连接好实验箱后,运行程序,屏幕上显示运行成功,观察实验箱逻辑笔的LED灯变化,发现每隔1秒黄色LED计数灯闪一次,对应着1Hz的频率。旁边的红色LED显示累积计数情况,其数值在00、01、10、11四种情况之间不断循环,效果如下所示:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。